Exemple #1
0
class Test_Crate(unittest.TestCase):
    def setUp(self):
        cells = [[1, 1],
                 [1, 4]
                 ]
        ctypes = [('Water', 0), ('Water', 1), ('Water', 2), ('Water', 3), ('Floor',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.crate = self.level.add_sprite('Crate', (0, 0))


    def test_crate_moves_if_in_flowing_water_with_water_beyond(self):
        self.crate.start_turn()
        self.assertEqual(self.crate.to_move, 1)


    def test_crate_moves_in_flow_direction(self):
        self.crate.start_turn()
        self.assertEqual(self.crate.move_dir, 1)


    def test_crate_doesnt_move_if_non_water_cell_beyond(self):
        self.crate.pos = (0, 1)
        self.crate.start_turn()
        self.assertEqual(self.crate.to_move, 0)


    def test_crate_doesnt_move_if_level_edge_beyond(self):
        self.crate.pos = (1, 0)
        self.crate.start_turn()
        self.assertEqual(self.crate.to_move, 0)


    def test_player_can_enter_crate_cell_when_in_water(self):
        self.assertFalse(self.level.player_can_enter((0, 0)))
        self.crate.start_turn()
        self.assertTrue(self.level.player_can_enter((0, 0)))
Exemple #2
0
class Test_Level(unittest.TestCase):
    def setUp(self):
        cells = [[1, 1, 1, 1],
                 [0, 0, 0, 0],
                 [0, 0, 0, 0]
                 ]
        ctypes = [('Floor',),
                  ('Grate',)
                  ]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite('Player', (1, 2))
        self.crate = self.level.add_sprite('Crate', (1, 1))


    def test_level_has_correct_cell_types(self):
        for (x, y), celltype in [((0, 0), 'Grate'),
                                 ((1, 1), 'Floor')
                                 ]:
            self.assertEqual(self.level.cells[x, y].type, celltype)


    def test_level_has_correct_sprite_types(self):
        classes = [sprite.type for sprite in self.level.sprites]
        self.assertItemsEqual(classes, ['Player', 'Crate'])


    def test_level_returns_sprites_at_cell(self):
        self.assertItemsEqual(self.level.sprites.at((1, 2)), [self.player])
        self.assertItemsEqual(self.level.sprites.at((1, 1)), [self.crate])
        self.assertItemsEqual(self.level.sprites.at((1, 0)), [])


    def test_level_returns_sprites_partially_in_cell(self):
        crate = self.level.add_sprite('Crate', (2.5, 2))
        self.assertItemsEqual(self.level.sprites.on((2, 1)), [])
        self.assertItemsEqual(self.level.sprites.on((2, 2)), [crate])
        self.assertItemsEqual(self.level.sprites.on((3, 2)), [crate])


    def test_level_returns_sprites_by_type(self):
        self.assertItemsEqual(self.level.sprites['Player'], [self.player])
        self.assertItemsEqual(self.level.sprites['Crate'], [self.crate])
        self.assertItemsEqual(self.level.sprites['Random'], [])


    def test_sprites_cant_enter_cells_out_of_bounds(self):
        self.assertTrue(self.level.sprite_can_enter((0, 0)))
        self.assertTrue(self.level.sprite_can_enter((3, 2)))
        self.assertFalse(self.level.sprite_can_enter((0, 3)))
        self.assertFalse(self.level.sprite_can_enter((-1, -1)))


    def test_sprites_cant_enter_cells_with_movables(self):
        self.assertFalse(self.level.sprite_can_enter((1, 1)))


    def test_robots_cant_enter_no_robot_cells_even_if_empty(self):
        self.assertFalse(self.level.enemy_can_enter((1, 0)))


    def test_player_can_enter_cells_with_movables(self):
        self.assertTrue(self.level.player_can_enter((1, 1)))


    def test_player_cant_enter_cells_with_robot(self):
        self.level.add_sprite('Robot', (2.5, 2))
        self.assertFalse(self.level.player_can_enter((2, 2)))


    def test_player_can_enter_cells_with_rover(self):
        self.level.add_sprite('Rover', (2.5, 2))
        self.assertTrue(self.level.player_can_enter((2, 2)))