2017-02-21 19:25:47 -08:00
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
from mock import *
|
|
|
|
|
|
|
|
from atrcopy import SegmentData, AtariDosDiskImage, InvalidBinaryFile
|
2017-02-21 20:08:37 -08:00
|
|
|
from atrcopy.errors import *
|
2017-02-21 19:25:47 -08:00
|
|
|
|
|
|
|
|
|
|
|
class TestAtariDosSDImage(object):
|
|
|
|
def setup(self):
|
|
|
|
data = np.fromfile("../test_data/dos_sd_test1.atr", dtype=np.uint8)
|
|
|
|
rawdata = SegmentData(data)
|
|
|
|
self.image = AtariDosDiskImage(rawdata)
|
|
|
|
|
2017-02-21 23:07:24 -08:00
|
|
|
def check_entries(self, entries, prefix="TEST", save=None):
|
2017-02-21 20:08:37 -08:00
|
|
|
orig_num_files = len(self.image.files)
|
2017-02-21 23:07:24 -08:00
|
|
|
filenames = []
|
2017-02-21 20:08:37 -08:00
|
|
|
count = 1
|
|
|
|
for data in entries:
|
2017-02-21 23:07:24 -08:00
|
|
|
filename = "%s%d.BIN" % (prefix, count)
|
2017-02-21 20:08:37 -08:00
|
|
|
self.image.write_file(filename, None, data)
|
|
|
|
assert len(self.image.files) == orig_num_files + count
|
|
|
|
data2 = self.image.find_file(filename)
|
|
|
|
assert data.tostring() == data2
|
|
|
|
count += 1
|
|
|
|
|
|
|
|
# loop over them again to make sure data wasn't overwritten
|
|
|
|
count = 1
|
|
|
|
for data in entries:
|
2017-02-21 23:07:24 -08:00
|
|
|
filename = "%s%d.BIN" % (prefix, count)
|
2017-02-21 20:08:37 -08:00
|
|
|
data2 = self.image.find_file(filename)
|
|
|
|
assert data.tostring() == data2
|
|
|
|
count += 1
|
2017-02-21 23:07:24 -08:00
|
|
|
filenames.append(filename)
|
2017-02-21 20:08:37 -08:00
|
|
|
|
2017-02-21 23:07:24 -08:00
|
|
|
if save is not None:
|
|
|
|
self.image.save(save)
|
|
|
|
|
|
|
|
return filenames
|
2017-02-21 20:08:37 -08:00
|
|
|
|
2017-02-21 19:25:47 -08:00
|
|
|
def test_small(self):
|
|
|
|
assert len(self.image.files) == 5
|
|
|
|
|
2017-02-21 19:49:03 -08:00
|
|
|
data = np.asarray([0xff, 0xff, 0x00, 0x60, 0x01, 0x60, 1, 2], dtype=np.uint8)
|
2017-02-21 19:25:47 -08:00
|
|
|
self.image.write_file("TEST.XEX", None, data)
|
|
|
|
assert len(self.image.files) == 6
|
|
|
|
|
2017-02-21 19:49:03 -08:00
|
|
|
data2 = self.image.find_file("TEST.XEX")
|
|
|
|
assert data.tostring() == data2
|
|
|
|
|
2017-02-21 20:08:37 -08:00
|
|
|
def test_50k(self):
|
|
|
|
assert len(self.image.files) == 5
|
|
|
|
|
|
|
|
data = np.arange(50*1024, dtype=np.uint8)
|
|
|
|
self.image.write_file("RAMP50K.BIN", None, data)
|
|
|
|
assert len(self.image.files) == 6
|
|
|
|
|
|
|
|
data2 = self.image.find_file("RAMP50K.BIN")
|
|
|
|
assert data.tostring() == data2
|
|
|
|
|
|
|
|
def test_many_small(self):
|
|
|
|
entries = [
|
|
|
|
np.asarray([0xff, 0xff, 0x00, 0x60, 0x01, 0x60, 1, 2], dtype=np.uint8),
|
|
|
|
np.arange(1*1024, dtype=np.uint8),
|
|
|
|
np.arange(2*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(4*1024, dtype=np.uint8),
|
|
|
|
np.arange(5*1024, dtype=np.uint8),
|
|
|
|
np.arange(6*1024, dtype=np.uint8),
|
|
|
|
np.arange(7*1024, dtype=np.uint8),
|
|
|
|
np.arange(8*1024, dtype=np.uint8),
|
|
|
|
np.arange(9*1024, dtype=np.uint8),
|
|
|
|
np.arange(10*1024, dtype=np.uint8),
|
|
|
|
]
|
2017-02-21 23:07:24 -08:00
|
|
|
self.check_entries(entries, save="many_small.atr")
|
2017-02-21 20:08:37 -08:00
|
|
|
|
|
|
|
def test_big_failure(self):
|
|
|
|
assert len(self.image.files) == 5
|
|
|
|
|
|
|
|
data = np.arange(50*1024, dtype=np.uint8)
|
|
|
|
self.image.write_file("RAMP50K.BIN", None, data)
|
|
|
|
assert len(self.image.files) == 6
|
|
|
|
with pytest.raises(NotEnoughSpaceOnDisk):
|
|
|
|
self.image.write_file("RAMP50K2.BIN", None, data)
|
|
|
|
assert len(self.image.files) == 6
|
|
|
|
|
2017-02-21 23:07:24 -08:00
|
|
|
def test_delete(self):
|
|
|
|
entries1 = [
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(3*1024, dtype=np.uint8),
|
|
|
|
np.arange(10*1024, dtype=np.uint8),
|
|
|
|
np.arange(10*1024, dtype=np.uint8),
|
|
|
|
]
|
|
|
|
entries2 = [
|
|
|
|
np.arange(10*1024, dtype=np.uint8),
|
|
|
|
np.arange(11*1024, dtype=np.uint8),
|
|
|
|
]
|
|
|
|
|
|
|
|
filenames = self.check_entries(entries1, "FIRST")
|
|
|
|
assert len(self.image.files) == 16
|
|
|
|
self.image.delete_file(filenames[2])
|
|
|
|
self.image.delete_file(filenames[5])
|
|
|
|
self.image.delete_file(filenames[0])
|
|
|
|
self.image.delete_file(filenames[8])
|
|
|
|
assert len(self.image.files) == 12
|
|
|
|
|
|
|
|
filename = self.check_entries(entries2, "SECOND", save="test_delete.atr")
|
|
|
|
assert len(self.image.files) == 14
|
|
|
|
|
2017-02-21 19:25:47 -08:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
t = TestAtariDosFile()
|
|
|
|
t.setup()
|
|
|
|
t.test_segment()
|