|
|
|
|
@ -25,7 +25,7 @@ def build_dummy(level_index):
|
|
|
|
|
dummy.game_end = (False, None) |
|
|
|
|
dummy.menu_screen = None |
|
|
|
|
dummy.units = {} |
|
|
|
|
dummy.assets = {"BMP_WEWIN": object(), "end": object()} |
|
|
|
|
dummy.assets = {"BMP_WEWIN": object(), "end": object(), "clear": object(), "lose": object()} |
|
|
|
|
dummy.explosions = {"LEFT": object(), "RIGHT": object(), "UP": object(), "DOWN": object()} |
|
|
|
|
dummy.count_rats = lambda: 0 |
|
|
|
|
dummy.start_menu_animation_started_at = 0 |
|
|
|
|
@ -89,8 +89,29 @@ class FinalLevelFlowTests(unittest.TestCase):
|
|
|
|
|
self.assertEqual(saves, [1234]) |
|
|
|
|
self.assertEqual(load_calls, []) |
|
|
|
|
|
|
|
|
|
def test_advance_level_starts_next_dat_level_immediately(self): |
|
|
|
|
dummy, _, _, _, _, load_calls = build_dummy(4) |
|
|
|
|
|
|
|
|
|
dummy.advance_level() |
|
|
|
|
|
|
|
|
|
self.assertEqual( |
|
|
|
|
load_calls, |
|
|
|
|
[((5,), {"preserve_points": True, "show_menu": False})], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def test_advance_level_starts_non_dat_level_immediately(self): |
|
|
|
|
dummy, _, _, _, _, load_calls = build_dummy(0) |
|
|
|
|
dummy.map = SimpleNamespace(source_path=Path("/tmp/level.json")) |
|
|
|
|
|
|
|
|
|
dummy.advance_level() |
|
|
|
|
|
|
|
|
|
self.assertEqual( |
|
|
|
|
load_calls, |
|
|
|
|
[((0,), {"preserve_points": True, "show_menu": False})], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def test_regular_level_clear_keeps_run_open(self): |
|
|
|
|
dummy, sounds, _, stats, saves, _ = build_dummy(4) |
|
|
|
|
dummy, sounds, dialogs, stats, saves, _ = build_dummy(4) |
|
|
|
|
|
|
|
|
|
result = dummy.game_over() |
|
|
|
|
|
|
|
|
|
@ -108,6 +129,41 @@ class FinalLevelFlowTests(unittest.TestCase):
|
|
|
|
|
], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dummy.game_over() |
|
|
|
|
|
|
|
|
|
self.assertEqual(dialogs[-1][0][0], "Level 5 Clear! Points: 1234") |
|
|
|
|
self.assertIs(dialogs[-1][1]["image"], dummy.assets["clear"]) |
|
|
|
|
|
|
|
|
|
def test_defeat_dialog_uses_lose_art(self): |
|
|
|
|
dummy, sounds, dialogs, stats, saves, _ = build_dummy(4) |
|
|
|
|
dummy.count_rats = lambda: 201 |
|
|
|
|
|
|
|
|
|
result = dummy.game_over() |
|
|
|
|
|
|
|
|
|
self.assertTrue(result) |
|
|
|
|
self.assertEqual(dummy.game_end, (True, "defeat")) |
|
|
|
|
self.assertEqual(stats, [(1234, False)]) |
|
|
|
|
self.assertEqual(saves, [1234]) |
|
|
|
|
self.assertEqual( |
|
|
|
|
sounds, |
|
|
|
|
[ |
|
|
|
|
("stop",), |
|
|
|
|
(("WEWIN.WAV",), {}), |
|
|
|
|
], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
dummy.game_over() |
|
|
|
|
|
|
|
|
|
self.assertEqual(dialogs[-1][0][0], "Game Over: Mice are too many!") |
|
|
|
|
self.assertIs(dialogs[-1][1]["image"], dummy.assets["lose"]) |
|
|
|
|
self.assertEqual(dialogs[-1][1]["image_scale"], 0.48) |
|
|
|
|
self.assertEqual(dialogs[-1][1]["scores"], dummy.combined_scores) |
|
|
|
|
self.assertEqual( |
|
|
|
|
dialogs[-1][1]["subtitle"], |
|
|
|
|
"Reached level: 5\nPress Return to go back to the start menu", |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def test_final_dat_level_records_score_and_shows_dedicated_dialog(self): |
|
|
|
|
dummy, sounds, dialogs, stats, saves, _ = build_dummy(maze.DEFAULT_LEVELS_PER_DAT_FILE - 1) |
|
|
|
|
|
|
|
|
|
@ -147,15 +203,17 @@ class FinalLevelFlowTests(unittest.TestCase):
|
|
|
|
|
[((0,), {"preserve_points": False, "show_menu": True, "menu_screen": "start"})], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def test_toggle_pause_ignores_transition_screen_between_levels(self): |
|
|
|
|
dummy, _, _, _, _, _ = build_dummy(2) |
|
|
|
|
dummy.game_status = "start_menu" |
|
|
|
|
dummy.menu_screen = "level_intro" |
|
|
|
|
def test_return_after_defeat_goes_back_to_start_menu(self): |
|
|
|
|
dummy, _, _, _, _, load_calls = build_dummy(4) |
|
|
|
|
dummy.game_end = (True, "defeat") |
|
|
|
|
dummy.game_status = "paused" |
|
|
|
|
|
|
|
|
|
dummy.toggle_pause() |
|
|
|
|
dummy.reset_game() |
|
|
|
|
|
|
|
|
|
self.assertEqual(dummy.game_status, "start_menu") |
|
|
|
|
self.assertEqual(dummy.menu_screen, "level_intro") |
|
|
|
|
self.assertEqual( |
|
|
|
|
load_calls, |
|
|
|
|
[((0,), {"preserve_points": False, "show_menu": True, "menu_screen": "start"})], |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def test_toggle_pause_ignores_game_end_dialogs(self): |
|
|
|
|
dummy, _, _, _, _, _ = build_dummy(2) |
|
|
|
|
|