def test_to_block(self): arrangement_item = EbTileArrangementItem() block = Block() block.from_list([4] * 3) arrangement_item.is_vertically_flipped = True arrangement_item.is_horizontally_flipped = False arrangement_item.is_priority = True arrangement_item.subpalette = 7 arrangement_item.tile = 0x120 arrangement_item.to_block(block, 0) assert_equal(block.read_multi(0, 2), 0x8000 | 0x2000 | (7 << 10) | 0x120) arrangement_item.is_vertically_flipped = False arrangement_item.is_horizontally_flipped = True arrangement_item.is_priority = False arrangement_item.subpalette = 2 arrangement_item.tile = 0x3F5 arrangement_item.to_block(block, 1) assert_equal(block.read_multi(1, 2), 0x4000 | (2 << 10) | 0x3F5)
def test_to_block(self): arrangement_item = EbTileArrangementItem() block = Block() block.from_list([4] * 3) arrangement_item.is_vertically_flipped = True arrangement_item.is_horizontally_flipped = False arrangement_item.is_priority = True arrangement_item.subpalette = 7 arrangement_item.tile = 0x120 arrangement_item.to_block(block, 0) assert_equal(block.read_multi(0, 2), 0x8000 | 0x2000 | (7 << 10) | 0x120) arrangement_item.is_vertically_flipped = False arrangement_item.is_horizontally_flipped = True arrangement_item.is_priority = False arrangement_item.subpalette = 2 arrangement_item.tile = 0x3f5 arrangement_item.to_block(block, 1) assert_equal(block.read_multi(1, 2), 0x4000 | (2 << 10) | 0x3f5)
class TestBlock(BaseTestCase): def setup(self): self.block = Block() def teardown(self): del self.block def test_baseline(self): pass def test_empty(self): assert_equal(len(self.block), 0) assert_equal(len(self.block.data), 0) def test_from_file(self): self.block.from_file(os.path.join(TEST_DATA_DIR, "binaries", "1kb_null.bin")) assert_equal(len(self.block), 1024) assert_list_equal(self.block.to_list(), [0] * 1024) def test_from_file_unhappy(self): # Attempt to load a directory assert_raises(FileAccessError, self.block.from_file, TEST_DATA_DIR) # Attempt to load a nonexistent file assert_raises(FileAccessError, self.block.from_file, os.path.join(TEST_DATA_DIR, "doesnotexist.bin")) # Attempt to load a file in a nonexistent directory assert_raises(FileAccessError, self.block.from_file, os.path.join(TEST_DATA_DIR, "dne", "dne.bin")) def test_from_list(self): self.block.from_list([0, 1, 2, 3, 4, 5]) assert_equal(len(self.block), 6) assert_list_equal(self.block.to_list(), [0, 1, 2, 3, 4, 5]) self.block.from_list([]) assert_equal(len(self.block), 0) assert_list_equal(self.block.to_list(), []) self.block.from_list([69]) assert_equal(len(self.block), 1) assert_list_equal(self.block.to_list(), [69]) def test_getitem(self): self.block.from_file(os.path.join(TEST_DATA_DIR, "binaries", "1kb_rand.bin")) assert_equal(self.block[0], 0x25) assert_equal(self.block[1023], 0x20) assert_equal(self.block[0x3e3], 0xf4) assert_equal(self.block[1023], self.block[-1]) assert_raises(OutOfBoundsError, self.block.__getitem__, 1024) assert_raises(OutOfBoundsError, self.block.__getitem__, 9999) def test_getitem_slice(self): self.block.from_file(os.path.join(TEST_DATA_DIR, "binaries", "1kb_rand.bin")) assert_is_instance(self.block[0:1], Block) assert_list_equal(self.block[0:0].to_list(), []) assert_list_equal(self.block[0x25c:0x25c].to_list(), []) assert_list_equal(self.block[0x25c:0x25d].to_list(), [0xa0]) assert_list_equal(self.block[0x25c:0x25c + 5].to_list(), [0xa0, 0x0b, 0x71, 0x5d, 0x91]) assert_list_equal(self.block[0x25c:0x25c + 5].to_list(), [0xa0, 0x0b, 0x71, 0x5d, 0x91]) assert_list_equal(self.block[1022:1024].to_list(), [0x10, 0x20]) assert_raises(InvalidArgumentError, self.block.__getitem__, slice(0, -1)) assert_raises(OutOfBoundsError, self.block.__getitem__, slice(-2, -1)) assert_raises(InvalidArgumentError, self.block.__getitem__, slice(1024, 0)) assert_raises(InvalidArgumentError, self.block.__getitem__, slice(1024, -1)) assert_raises(InvalidArgumentError, self.block.__getitem__, slice(1022, 3)) def test_setitem(self): self.block.from_file(os.path.join(TEST_DATA_DIR, "binaries", "1kb_rand.bin")) self.block[1] = 0xaa assert_equal(self.block[0], 0x25) assert_equal(self.block[1], 0xaa) assert_equal(self.block[2], 0x38) assert_raises(OutOfBoundsError, self.block.__setitem__, 1024, 0xbb) assert_raises(InvalidArgumentError, self.block.__setitem__, 5, 0x1234) assert_raises(InvalidArgumentError, self.block.__setitem__, 0, 0x100) assert_raises(InvalidArgumentError, self.block.__setitem__, 1, -1) def test_setitem_slice(self): self.block.from_file(os.path.join(TEST_DATA_DIR, "binaries", "1kb_rand.bin")) assert_list_equal(self.block[0:3].to_list(), [0x25, 0x20, 0x38]) self.block[0:3] = [0xeb, 0x15, 0x66] assert_list_equal(self.block[0:3].to_list(), [0xeb, 0x15, 0x66]) self.block[0:1024] = [5] * 1024 assert_equal(self.block[0:1024].to_list(), [5] * 1024) assert_raises(InvalidArgumentError, self.block.__setitem__, slice(5, 0), []) assert_raises(InvalidArgumentError, self.block.__setitem__, slice(55, 55), []) assert_raises(OutOfBoundsError, self.block.__setitem__, slice(-1, 2), []) assert_raises(OutOfBoundsError, self.block.__setitem__, slice(1, 1025), [0] * 1024) assert_raises(OutOfBoundsError, self.block.__setitem__, slice(1024, 1025), [1]) assert_raises(InvalidArgumentError, self.block.__setitem__, slice(0, 1), []) assert_raises(InvalidArgumentError, self.block.__setitem__, slice(0, 1), [1, 2, 3]) assert_raises(InvalidArgumentError, self.block.__setitem__, slice(0, 5), [1, 2]) def test_read_multi(self): self.block.from_list([0x03, 0xa1, 0x44, 0x15, 0x92, 0x65]) assert_equal(self.block.read_multi(0, 4), 0x1544a103) assert_equal(self.block.read_multi(1, 4), 0x921544a1) assert_equal(self.block.read_multi(1, 1), 0xa1) assert_equal(self.block.read_multi(1, 2), 0x44a1) assert_equal(self.block.read_multi(2, 3), 0x921544) assert_equal(self.block.read_multi(3, 3), 0x659215) assert_equal(self.block.read_multi(5, 1), 0x65) assert_equal(self.block.read_multi(0, 0), 0) assert_equal(self.block.read_multi(5, 0), 0) assert_raises(InvalidArgumentError, self.block.read_multi, 0, -1) assert_raises(InvalidArgumentError, self.block.read_multi, 0, -99) assert_raises(OutOfBoundsError, self.block.read_multi, -1, 3) assert_raises(OutOfBoundsError, self.block.read_multi, 7, 1) assert_raises(OutOfBoundsError, self.block.read_multi, 5, 2) assert_raises(OutOfBoundsError, self.block.read_multi, 0, 7) def test_write_multi(self): self.block.from_list([0x03, 0xa1, 0x44, 0x15, 0x92, 0x65]) self.block.write_multi(0, 0, 0) assert_list_equal(self.block.to_list(), [0x03, 0xa1, 0x44, 0x15, 0x92, 0x65]) self.block.write_multi(0, 0xff, 1) assert_list_equal(self.block.to_list(), [0xff, 0xa1, 0x44, 0x15, 0x92, 0x65]) self.block.write_multi(1, 0xa1b2, 2) assert_list_equal(self.block.to_list(), [0xff, 0xb2, 0xa1, 0x15, 0x92, 0x65]) self.block.write_multi(2, 0x100000f, 4) assert_list_equal(self.block.to_list(), [0xff, 0xb2, 0x0f, 0x00, 0x00, 0x01]) assert_raises(InvalidArgumentError, self.block.write_multi, 0, 0, -1) assert_raises(OutOfBoundsError, self.block.write_multi, -1, 0, 1) assert_raises(OutOfBoundsError, self.block.write_multi, -1, 0, 1) assert_raises(OutOfBoundsError, self.block.write_multi, 0, 0, 7) assert_raises(OutOfBoundsError, self.block.write_multi, 1, 0, 6) assert_raises(OutOfBoundsError, self.block.write_multi, 3, 0, 4) def test_len(self): self.block.from_list([0x03, 0xa1, 0x44, 0x15, 0x92, 0x65]) assert_equal(len(self.block), 6) self.block.from_list([]) assert_equal(len(self.block), 0)