atrcopy/test/test_disk_image.py

66 lines
2.2 KiB
Python

import glob
import numpy as np
from mock import *
from atrcopy.container import guess_container, load
from atrcopy.media_type import MediaType, guess_media_type
from atrcopy import errors
from atrcopy.media_types.atari_disks import *
from atrcopy.media_types.apple_disks import *
class TestDiskImage:
@pytest.mark.parametrize("filename,sector_size,sectors", [
("dos_sd_test1.atr", 128, [(1,3), (360,1), (361,8)]),
("dos_ed_test1.atr", 128, [(1,3), (360,1), (361,8)]),
])
def test_contiguous_sectors(self, filename, sector_size, sectors):
pathname = os.path.join(os.path.dirname(__file__), "../test_data", filename)
container = load(pathname)
media = container.media
for start, count in sectors:
# grab sectors
segment = media.get_contiguous_sectors(start, count)
# 16 byte ATR header, first byte of sector 1 is byte 16
assert np.array_equal(segment.container_offset, np.arange(16 + (start - 1) * sector_size, 16 + (start + count - 1)*sector_size))
def test_ed_sectors(self):
pathname = os.path.join(os.path.dirname(__file__), "../test_data/dos_ed_test1.atr")
container = load(pathname)
media = container.media
# get vtoc + vtoc2
boot = media.get_sector_list([360,1024])
assert np.array_equal(boot.container_offset[0:128], np.arange(16 + (360 - 1) * 128, 16 + 360*128))
assert np.array_equal(boot.container_offset[128:256], np.arange(16 + (1024 - 1) * 128, 16 + 1024*128))
if __name__ == "__main__":
import logging
logging.basicConfig(level=logging.WARNING)
log = logging.getLogger("atrcopy.media_type")
log.setLevel(logging.DEBUG)
def check(pathname):
print(f"checking {pathname}")
container = load(pathname)
print(container.verbose_info)
media = container.media
print(media)
boot = media.get_contiguous_sectors(1, 3)
print(boot)
print(boot.container_offset)
import sys
import glob
if len(sys.argv) > 1:
images = sys.argv[1:]
else:
images = sorted(glob.glob(os.path.join(os.path.dirname(__file__), "../test_data/", "*")))
for pathname in images:
check(pathname)