From bfce757f7783fccdd41b3bf796c1853298673f47 Mon Sep 17 00:00:00 2001 From: DannyAbdi <dannyabdi13@gmail.com> Date: Sun, 17 Mar 2024 02:48:11 +0000 Subject: [PATCH] Created test class for PlayerController class --- testPlayerController.py | 226 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 testPlayerController.py diff --git a/testPlayerController.py b/testPlayerController.py new file mode 100644 index 0000000..591c217 --- /dev/null +++ b/testPlayerController.py @@ -0,0 +1,226 @@ +import unittest +from unittest.mock import Mock + +import pygame + +from config import TILE_SIZE +from player import Player +from playerController import PlayerController # Import the PlayerController class + + +class TestPlayerController(unittest.TestCase): + def setUp(self): + self.player_mock = Mock() + self.maze_mock = Mock() + self.player_controller = PlayerController(self.player_mock, self.maze_mock) + + def test_move_player_up(self): + direction = {pygame.K_UP: True, pygame.K_DOWN: False, pygame.K_LEFT: False, pygame.K_RIGHT: False} + self.player_controller.move_player(direction) + self.assertEqual(self.player_mock.y, self.player_mock.y - TILE_SIZE) + + def test_move_player_down(self): + direction = {pygame.K_UP: False, pygame.K_DOWN: True, pygame.K_LEFT: False, pygame.K_RIGHT: False} + self.player_controller.move_player(direction) + self.assertEqual(self.player_mock.y, self.player_mock.y + TILE_SIZE) + + def test_move_player_left(self): + direction = {pygame.K_UP: False, pygame.K_DOWN: False, pygame.K_LEFT: True, pygame.K_RIGHT: False} + self.player_controller.move_player(direction) + self.assertEqual(self.player_mock.x, self.player_mock.x - TILE_SIZE) + + def test_move_player_right(self): + direction = {pygame.K_UP: False, pygame.K_DOWN: False, pygame.K_LEFT: False, pygame.K_RIGHT: True} + self.player_controller.move_player(direction) + self.assertEqual(self.player_mock.x, self.player_mock.x + TILE_SIZE) + + def test_valid_position_within_maze(self): + position = (1, 1) + self.assertTrue(self.player_controller.is_valid_position(position)) + + def test_position_outside_maze_bounds(self): + position = (-1, 1) + self.assertFalse(self.player_controller.is_valid_position(position)) + position = (10, 5) + self.assertFalse(self.player_controller.is_valid_position(position)) + position = (1, 10) + self.assertFalse(self.player_controller.is_valid_position(position)) + + def test_position_collides_with_wall(self): + self.player_controller.maze = Mock(current_level=[[0, 0, 0], + [0, 1, 0], + [0, 0, 0]]) + position = (1, 1) + self.assertFalse(self.player_controller.is_valid_position(position)) + position = (0, 1) + self.assertTrue(self.player_controller.is_valid_position(position)) + + def test_collision_with_wall(self): + self.player_controller.maze = [[0, 0, 0], + [0, 1, 0], + [0, 0, 0]] + x, y = 50, 50 + self.assertTrue(self.player_controller.check_collision(x, y)) + + def test_no_collision_with_wall(self): + self.player_controller.maze = [[0, 0, 0], + [0, 0, 0], + [0, 0, 0]] + x, y = 50, 50 + self.assertFalse(self.player_controller.check_collision(x, y)) + + def test_reset_player_position(self): + initial_x, initial_y = 100, 100 + self.player_controller.player = Player(initial_x, initial_y) + self.player_controller.reset_player_position() + self.assertEqual(self.player_controller.player.x, TILE_SIZE) + self.assertEqual(self.player_controller.player.y, TILE_SIZE) + + def test_set_dfs_solver(self): + dfs_solver_mock = Mock() + self.player_controller.set_dfs_solver(dfs_solver_mock) + self.assertEqual(self.player_controller.dfs_solver, dfs_solver_mock) + + def test_set_bfs_solver(self): + bfs_solver_mock = Mock() + self.player_controller.set_bfs_solver(bfs_solver_mock) + self.assertEqual(self.player_controller.bfs_solver, bfs_solver_mock) + + def test_set_dijkstra_solver(self): + dijkstra_solver_mock = Mock() + self.player_controller.set_dijkstra_solver(dijkstra_solver_mock) + self.assertEqual(self.player_controller.dijkstra_solver, dijkstra_solver_mock) + + def test_set_astar_solver(self): + astar_solver_mock = Mock() + self.player_controller.set_astar_solver(astar_solver_mock) + self.assertEqual(self.player_controller.astar_solver, astar_solver_mock) + + def test_move_to_goal_dfs(self): + dfs_solver_mock = Mock() + dfs_solver_mock.dfs.return_value = True + dfs_solver_mock.get_path.return_value = [(1, 1), (1, 2), (1, 3)] + + self.player_controller.set_dfs_solver(dfs_solver_mock) + self.player_controller.maze = Mock() + self.player_controller.maze.current_level = [ + [0, 0, 0, 0], + [0, 0, 3, 0], + [0, 0, 0, 0], + ] + + self.player_controller.player.x = TILE_SIZE + self.player_controller.player.y = TILE_SIZE + self.player_controller.move_to_goal_dfs() + + expected_path = [(1 * TILE_SIZE, 1 * TILE_SIZE), (1 * TILE_SIZE, 2 * TILE_SIZE), (1 * TILE_SIZE, 3 * TILE_SIZE)] + self.assertEqual( + [(self.player_controller.player.x, self.player_controller.player.y) for _ in range(len(expected_path))], + expected_path) + + def test_move_to_goal_bfs(self): + bfs_solver_mock = Mock() + bfs_solver_mock.bfs.return_value = True + bfs_solver_mock.get_path.return_value = [(1, 1), (1, 2), (1, 3)] + + self.player_controller.set_bfs_solver(bfs_solver_mock) + self.player_controller.maze = Mock() + self.player_controller.maze.current_level = [ + [0, 0, 0, 0], + [0, 0, 3, 0], + [0, 0, 0, 0], + ] + + self.player_controller.player.x = TILE_SIZE + self.player_controller.player.y = TILE_SIZE + self.player_controller.move_to_goal_bfs() + + expected_path = [(1 * TILE_SIZE, 1 * TILE_SIZE), (1 * TILE_SIZE, 2 * TILE_SIZE), (1 * TILE_SIZE, 3 * TILE_SIZE)] + self.assertEqual( + [(self.player_controller.player.x, self.player_controller.player.y) for _ in range(len(expected_path))], + expected_path) + + def test_move_to_goal_dijkstra(self): + dijkstra_solver_mock = Mock() + dijkstra_solver_mock.find_shortest_path.return_value = [(1, 1), (1, 2), (1, 3)] # Simulate a path + + self.player_controller.set_dijkstra_solver(dijkstra_solver_mock) + self.player_controller.maze = Mock() + self.player_controller.maze.current_level = [ + [0, 0, 0, 0], + [0, 0, 3, 0], + [0, 0, 0, 0], + ] + + self.player_controller.player.x = TILE_SIZE + self.player_controller.player.y = TILE_SIZE + self.player_controller.move_to_goal_dijkstra() + + expected_path = [(1 * TILE_SIZE, 1 * TILE_SIZE), (1 * TILE_SIZE, 2 * TILE_SIZE), (1 * TILE_SIZE, 3 * TILE_SIZE)] + self.assertEqual( + [(self.player_controller.player.x, self.player_controller.player.y) for _ in range(len(expected_path))], + expected_path) + + def test_move_to_goal_astar(self): + astar_solver_mock = Mock() + astar_solver_mock.find_goal_position.return_value = (2, 2) # Simulate a goal position + astar_solver_mock.find_shortest_path.return_value = [(1, 1), (1, 2), (1, 3)] # Simulate a path + + self.player_controller.set_astar_solver(astar_solver_mock) + self.player_controller.maze = Mock() + self.player_controller.maze.current_level = [ + [0, 0, 0, 0], + [0, 0, 3, 0], + [0, 0, 0, 0], + ] + + self.player_controller.player.x = TILE_SIZE + self.player_controller.player.y = TILE_SIZE + self.player_controller.move_to_goal_astar() + + expected_path = [(1 * TILE_SIZE, 1 * TILE_SIZE), (1 * TILE_SIZE, 2 * TILE_SIZE), (1 * TILE_SIZE, 3 * TILE_SIZE)] + self.assertEqual( + [(self.player_controller.player.x, self.player_controller.player.y) for _ in range(len(expected_path))], + expected_path) + + def test_follow_path(self): + player_mock = Mock() + self.player_controller.player = player_mock + maze_mock = Mock() + self.player_controller.maze = maze_mock + path = [(0, 0), (0, 1), (0, 2)] + self.player_controller.follow_path(path) + expected_positions = [(0, 0), (0, 1), (0, 2)] + self.assertEqual([(args[0], args[1]) for args in player_mock.x.call_args_list], expected_positions) + + def test_draw_path(self): + screen_mock = Mock() + self.player_controller.screen = screen_mock + path = [(0, 0), (0, 1), (1, 1)] + self.player_controller.draw_path(path) + + expected_calls = [ + ((screen_mock,), {'color': (0, 255, 0), 'rect': (0, 0, TILE_SIZE, TILE_SIZE)}), + ((screen_mock,), {'color': (0, 255, 0), 'rect': (TILE_SIZE, 0, TILE_SIZE, TILE_SIZE)}), + ((screen_mock,), {'color': (0, 255, 0), 'rect': (TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE)}) + ] + + self.assertEqual(screen_mock.mock_calls, + [unittest.mock.call.draw.rect(*args, **kwargs) for args, kwargs in expected_calls]) + + def test_find_goal_position(self): + mock_maze = Mock() + mock_maze.current_level = [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 3] + ] + + self.player_controller.maze = mock_maze + goal_position = self.player_controller.find_goal_position() + expected_goal_position = (2, 2) + self.assertEqual(goal_position, expected_goal_position) + + +if __name__ == "__main__": + unittest.main() -- GitLab