mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
tag v1.15.0 67fe5ea7f68cf1185379c2c5e8acf37d483a2d4a https://github.com/clalancette/pycdlib.git
250 lines
8.4 KiB
Python
250 lines
8.4 KiB
Python
import os
|
|
import sys
|
|
import struct
|
|
import time
|
|
|
|
import pytest
|
|
|
|
prefix = '.'
|
|
for i in range(0, 3):
|
|
if os.path.isdir(os.path.join(prefix, 'pycdlib')):
|
|
sys.path.insert(0, prefix)
|
|
break
|
|
else:
|
|
prefix = '../' + prefix
|
|
|
|
import pycdlib.dates
|
|
import pycdlib.pycdlibexception
|
|
|
|
def test_string_to_timestruct_invalid_input_type():
|
|
with pytest.raises(AttributeError) as exc_info:
|
|
ts = pycdlib.dates.string_to_timestruct('')
|
|
|
|
def test_string_to_timestruct_blank_bytes():
|
|
ts = pycdlib.dates.string_to_timestruct(b'')
|
|
assert(ts.tm_year == 0)
|
|
assert(ts.tm_mon == 0)
|
|
assert(ts.tm_mday == 0)
|
|
assert(ts.tm_hour == 0)
|
|
assert(ts.tm_min == 0)
|
|
assert(ts.tm_sec == 0)
|
|
assert(ts.tm_wday == 0)
|
|
assert(ts.tm_yday == 0)
|
|
assert(ts.tm_isdst == 0)
|
|
|
|
def test_string_to_timestruct():
|
|
ts = pycdlib.dates.string_to_timestruct(b'20180718212300')
|
|
assert(ts.tm_year == 2018)
|
|
assert(ts.tm_mon == 7)
|
|
assert(ts.tm_mday == 18)
|
|
assert(ts.tm_hour == 21)
|
|
assert(ts.tm_min == 23)
|
|
assert(ts.tm_sec == 0)
|
|
assert(ts.tm_wday == 2)
|
|
assert(ts.tm_yday == 199)
|
|
assert(ts.tm_isdst == -1)
|
|
|
|
def test_dirrecorddate_record_not_initialized():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
drdate.record()
|
|
assert(str(excinfo.value) == 'Directory Record Date not initialized')
|
|
|
|
def test_dirrecorddate_new_after_new():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.new(time.time())
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
drdate.new(time.time())
|
|
assert(str(excinfo.value) == 'Directory Record Date already initialized')
|
|
|
|
def test_dirrecorddate_parse_after_new():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.new(time.time())
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
drdate.parse(b'')
|
|
assert(str(excinfo.value) == 'Directory Record Date already initialized')
|
|
|
|
def test_dirrecorddate_parse_after_parse():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
|
|
assert(str(excinfo.value) == 'Directory Record Date already initialized')
|
|
|
|
def test_dirrecorddate_new_after_parse():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
drdate.new(time.time())
|
|
assert(str(excinfo.value) == 'Directory Record Date already initialized')
|
|
|
|
def test_dirrecorddate_record_after_new():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.new(time.time())
|
|
assert(len(drdate.record()) == 7)
|
|
|
|
def test_dirrecorddate_compare_equal():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.new(time.time())
|
|
|
|
drdate2 = drdate
|
|
|
|
assert(not(drdate2 != drdate))
|
|
|
|
def test_dirrecorddate_compare_not_equal():
|
|
drdate = pycdlib.dates.DirectoryRecordDate()
|
|
drdate.new(time.time())
|
|
|
|
time.sleep(1)
|
|
|
|
drdate2 = pycdlib.dates.DirectoryRecordDate()
|
|
drdate2.new(time.time())
|
|
|
|
assert(drdate2 != drdate)
|
|
|
|
def test_volumedescdate_record_not_initialized():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
voldate.record()
|
|
assert(str(excinfo.value) == 'This Volume Descriptor Date is not initialized')
|
|
|
|
def test_volumedescdate_parse_invalid_string():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInvalidISO) as excinfo:
|
|
voldate.parse(b'')
|
|
assert(str(excinfo.value) == 'Invalid ISO9660 date string')
|
|
|
|
def test_volumedescdate_new_after_new():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.new(0.0)
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
voldate.new(0.0)
|
|
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
|
|
|
|
def test_volumedescdate_parse_after_new():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.new(0.0)
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
voldate.parse(b'')
|
|
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
|
|
|
|
def test_volumedescdate_parse_after_parse():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
|
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
|
|
|
|
def test_volumedescdate_new_after_parse():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
|
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
|
|
voldate.new(0.0)
|
|
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
|
|
|
|
def test_volumedescdate_parse_zero():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
|
assert(voldate.year == 0)
|
|
assert(voldate.month == 0)
|
|
assert(voldate.dayofmonth == 0)
|
|
assert(voldate.hour == 0)
|
|
assert(voldate.minute == 0)
|
|
assert(voldate.second == 0)
|
|
assert(voldate.hundredthsofsecond == 0)
|
|
assert(voldate.gmtoffset == 0)
|
|
assert(voldate.date_str == b'0000000000000000' + b'\x00')
|
|
|
|
def test_volumedescdate_parse_nonzero():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'2019010721250000\x00')
|
|
assert(voldate.year == 2019)
|
|
assert(voldate.month == 1)
|
|
assert(voldate.dayofmonth == 7)
|
|
assert(voldate.hour == 21)
|
|
assert(voldate.minute == 25)
|
|
assert(voldate.second == 0)
|
|
assert(voldate.hundredthsofsecond == 0)
|
|
assert(voldate.gmtoffset == 0)
|
|
|
|
def test_volumedescdate_parse_hundredths():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'2019010721250005\x00')
|
|
assert(voldate.year == 2019)
|
|
assert(voldate.month == 1)
|
|
assert(voldate.dayofmonth == 7)
|
|
assert(voldate.hour == 21)
|
|
assert(voldate.minute == 25)
|
|
assert(voldate.second == 0)
|
|
assert(voldate.hundredthsofsecond == 5)
|
|
assert(voldate.gmtoffset == 0)
|
|
|
|
def test_volumedescdate_parse_null_hundredths():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'20190107212500\x00\x00\x00')
|
|
assert(voldate.year == 2019)
|
|
assert(voldate.month == 1)
|
|
assert(voldate.dayofmonth == 7)
|
|
assert(voldate.hour == 21)
|
|
assert(voldate.minute == 25)
|
|
assert(voldate.second == 0)
|
|
assert(voldate.hundredthsofsecond == 0)
|
|
assert(voldate.gmtoffset == 0)
|
|
|
|
def test_volumedescdate_record_after_parse():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.parse(b'2019010721250000\x00')
|
|
rec = voldate.record()
|
|
assert(rec == b'2019010721250000\x00')
|
|
|
|
def save_and_set_tz(newtz):
|
|
if 'TZ' in os.environ:
|
|
oldtz = os.environ['TZ']
|
|
else:
|
|
oldtz = None
|
|
|
|
os.environ['TZ'] = newtz
|
|
time.tzset()
|
|
|
|
return oldtz
|
|
|
|
def restore_tz(oldtz):
|
|
if oldtz is not None:
|
|
os.environ['TZ'] = oldtz
|
|
else:
|
|
del os.environ['TZ']
|
|
time.tzset()
|
|
|
|
def test_volumedescdate_new_nonzero():
|
|
oldtz = save_and_set_tz('US/Eastern')
|
|
|
|
test_seconds_since_epoch = 1546914300.0
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.new(test_seconds_since_epoch)
|
|
assert(voldate.year == 2019)
|
|
assert(voldate.month == 1)
|
|
assert(voldate.dayofmonth == 7)
|
|
assert(voldate.hour == 21)
|
|
assert(voldate.minute == 25)
|
|
assert(voldate.second == 0)
|
|
assert(voldate.hundredthsofsecond == 0)
|
|
restore_tz(oldtz)
|
|
|
|
def test_volumedescdate_test_equal():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.new(1546914300.0)
|
|
|
|
voldate2 = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate2.new(1546914300.0)
|
|
|
|
assert(not(voldate != voldate2))
|
|
|
|
def test_volumedescdate_test_not_equal():
|
|
voldate = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate.new(1546914300.0)
|
|
|
|
voldate2 = pycdlib.dates.VolumeDescriptorDate()
|
|
voldate2.new(1546914200.0)
|
|
|
|
assert(voldate != voldate2)
|