class TestInputHandler(unittest.TestCase): def setUp(self) -> None: self.map0 = '../game_states/game0_repr.json' self.game_state = GameState(self.map0) self.ih = InputHandler(self.game_state) def tearDown(self) -> None: del self.game_state del self.ih def test_synonym(self): self.assertEqual(["go"], self.ih._parse_user_input("run")) def test_unknown_word(self): self.assertEqual(["runy"], self.ih._parse_user_input("runy")) def test_move_north(self): self.assertEqual(["go", "north"], self.ih._parse_user_input("move north")) def test_move_to_north(self): self.assertEqual(["go", "north"], self.ih._parse_user_input("move to north")) def test_move_inventory_north(self): self.assertEqual(["go", "inventory", "north"], self.ih._parse_user_input("move inventory north"))
def setUp(self) -> None: self.map0 = '../game_states/game0_repr.json' self.game_state = GameState(self.map0) self.ih = InputHandler(self.game_state) self.map1 = '../game_states/game1_cake.json' self.game_state1 = GameState(self.map1) self.ih1 = InputHandler(self.game_state1)
def __init__(self, game_state: GameState): self.game_state = game_state self.input_handler = InputHandler(game_state)
class TestMoving(unittest.TestCase): def setUp(self) -> None: self.map0 = '../game_states/game0_repr.json' self.game_state = GameState(self.map0) self.ih = InputHandler(self.game_state) def tearDown(self) -> None: del self.game_state del self.ih def test_move_invalid(self): self.ih.handle_user_input("go east") self.assertEqual("#room_entrance", self.game_state.hero.location) def test_move_valid(self): self.ih.handle_user_input("go west") self.assertEqual("#room_arena", self.game_state.hero.location) def test_move_back_and_forth(self): self.ih.handle_user_input("go west") self.assertEqual("#room_arena", self.game_state.hero.location) self.ih.handle_user_input("go east") def test_move_locked_door(self): self.ih.handle_user_input("go west") self.assertEqual("#room_arena", self.game_state.hero.location) stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("go north") result_output = stdout.getvalue() expected_output = "You can't go north.\nExit door is locked, you need a key\n" self.assertEqual(expected_output, result_output) self.assertEqual("#room_arena", self.game_state.hero.location) def test_do_south(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("do south") result_output = stdout.getvalue() expected_output = "This action is not allowed with the south.\n" self.assertEqual(expected_output, result_output) def test_do_north(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("do north") result_output = stdout.getvalue() expected_output = "This action is not allowed with the north.\n" self.assertEqual(expected_output, result_output) def test_do_west(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("do west") result_output = stdout.getvalue() expected_output = "This action is not allowed with the west.\n" self.assertEqual(expected_output, result_output) def test_do_east(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("do east") result_output = stdout.getvalue() expected_output = "This action is not allowed with the east.\n" self.assertEqual(expected_output, result_output) def test_go_no_direction(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("go") result_output = stdout.getvalue() expected_output = "I don't understand that command.\n" self.assertEqual(expected_output, result_output) def test_move_no_direction(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("move") result_output = stdout.getvalue() expected_output = "I don't understand that command.\n" self.assertEqual(expected_output, result_output)
class TestCombat(unittest.TestCase): def setUp(self) -> None: self.map0 = '../game_states/game0_repr.json' self.game_state = GameState(self.map0) self.ih = InputHandler(self.game_state) def tearDown(self) -> None: del self.game_state del self.ih def test_attack_dragon(self): self.ih.handle_user_input("go west") stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("attack dragon") result_output = stdout.getvalue() expected_output = "You hit the green dragon for 1 damage! Green dragon has 59 HP left.\n" \ "Green dragon hit you for 10 damage! You have 90 HP left.\n" self.assertEqual(expected_output, result_output) def test_hit_creature_with_fist(self): self.ih.handle_user_input("go west") self.assertEqual(60, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(100, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(59, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) def test_hit_creature_with_fist_then_with_sword(self): self.ih.handle_user_input("take sword") self.ih.handle_user_input("go west") self.assertEqual(60, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(100, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(59, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) self.ih.handle_user_input("equip sword") self.ih.handle_user_input("attack dragon") self.assertEqual(29, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(80, self.game_state.hero.health) def test_kill_dragon(self): self.ih.handle_user_input("take sword") self.ih.handle_user_input("equip sword") self.ih.handle_user_input("go west") self.assertEqual(60, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(100, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(30, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(0, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) def test_get_key(self): self.ih.handle_user_input("take sword") self.ih.handle_user_input("equip sword") self.ih.handle_user_input("go west") self.assertEqual(60, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(100, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(30, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) self.ih.handle_user_input("attack dragon") self.assertEqual(0, self.game_state.creatures["#creature_dragon"].health) self.assertEqual(90, self.game_state.hero.health) self.assertIn( "#item_doorkey_exit", self.game_state.rooms[self.game_state.hero.location].items) def test_kill_creature_helmet_durability(self): self.ih.handle_user_input("take helmet") self.ih.handle_user_input("equip helmet") self.ih.handle_user_input("take chestplate") self.ih.handle_user_input("equip chestplate") self.ih.handle_user_input("go west") for i in range(3): self.ih.handle_user_input("attack dragon") self.assertTrue( self.game_state.equipment["#equipment_gladiator_helmet"].durability <= 0) def test_kill_creature_chestplate_durability(self): self.ih.handle_user_input("take helmet") self.ih.handle_user_input("equip helmet") self.ih.handle_user_input("take chestplate") self.ih.handle_user_input("equip chestplate") self.ih.handle_user_input("go west") for i in range(4): self.ih.handle_user_input("attack dragon") self.assertTrue( self.game_state.equipment["#equipment_steel_chestplate"].durability <= 0) def test_full_armor_creature_kill_get_key(self): self.ih.handle_user_input("take helmet") self.ih.handle_user_input("equip helmet") self.ih.handle_user_input("take chestplate") self.ih.handle_user_input("equip chestplate") self.ih.handle_user_input("take sword") self.ih.handle_user_input("equip sword") self.assertEqual("#equipment_silver_sword", self.game_state.hero.weapon_slot) self.assertEqual("#equipment_steel_chestplate", self.game_state.hero.chest_slot) self.assertEqual("#equipment_gladiator_helmet", self.game_state.hero.head_slot) self.ih.handle_user_input("go west") for i in range(2): self.ih.handle_user_input("attack dragon") self.assertEqual(0, self.game_state.creatures["#creature_dragon"].health) self.ih.handle_user_input("take key") self.assertIn("#item_doorkey_exit", self.game_state.hero.inventory) def test_full_armor_creature_kill_get_key_open_door(self): self.ih.handle_user_input("take helmet") self.ih.handle_user_input("equip helmet") self.ih.handle_user_input("take chestplate") self.ih.handle_user_input("equip chestplate") self.ih.handle_user_input("take sword") self.ih.handle_user_input("equip sword") self.assertEqual("#equipment_silver_sword", self.game_state.hero.weapon_slot) self.assertEqual("#equipment_steel_chestplate", self.game_state.hero.chest_slot) self.assertEqual("#equipment_gladiator_helmet", self.game_state.hero.head_slot) self.ih.handle_user_input("go west") for i in range(2): self.ih.handle_user_input("attack dragon") self.assertEqual(0, self.game_state.creatures["#creature_dragon"].health) self.ih.handle_user_input("take key") self.assertIn("#item_doorkey_exit", self.game_state.hero.inventory) self.ih.handle_user_input("unlock door") self.assertEqual("#room_arena", self.game_state.hero.location)
class TestItems(unittest.TestCase): def setUp(self) -> None: self.map0 = '../game_states/game0_repr.json' self.game_state = GameState(self.map0) self.ih = InputHandler(self.game_state) self.map1 = '../game_states/game1_cake.json' self.game_state1 = GameState(self.map1) self.ih1 = InputHandler(self.game_state1) def tearDown(self) -> None: del self.game_state del self.ih def test_internal_spawn_item(self): self.ih.handle_user_input("open envelope") room_items = self.game_state.rooms[self.game_state.hero.location].items self.assertIn( "#item_letter", room_items, "Letter should appear in room after opening an envelope") self.assertNotIn( "#item_envelope", room_items, "After envelope was opened it should have disappeared") def test_internal_take_item(self): self.ih.handle_user_input("take sword") room_items = self.game_state.rooms[self.game_state.hero.location].items self.assertNotIn( "#equipment_silver_sword", room_items, "You took the sword, why is it still in the room ???") def test_go_through_locked_door(self): self.ih.handle_user_input("go west") self.assertEqual("#room_arena", self.game_state.hero.location) self.ih.handle_user_input("go north") self.assertEqual("#room_arena", self.game_state.hero.location) def test_take_sword(self): self.ih.handle_user_input("take sword") self.assertEqual(1, len(self.game_state.hero.inventory)) self.assertIn("#equipment_silver_sword", self.game_state.hero.inventory) def test_open_non_existing_item(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("open envel") result_output = stdout.getvalue() expected_output = "There is no envel around.\n" self.assertEqual(expected_output, result_output) def test_non_existing_action_ope(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("ope envelope") result_output = stdout.getvalue() expected_output = f"Action \"ope\" is not allowed with the envelope.\n" self.assertEqual(expected_output, result_output) def test_both_non_existing_ope_enveep(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("ope enveep") result_output = stdout.getvalue() expected_output = "There is no enveep around.\n" self.assertEqual(expected_output, result_output) def test_read_envelope(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("read envelope") result_output = stdout.getvalue() expected_output = "Action \"read\" is not allowed with the envelope.\n" self.assertEqual(expected_output, result_output) def test_read_letter(self): self.ih.handle_user_input("open envelope") stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("read letter") result_output = stdout.getvalue() expected_output = "A green dragon guards a key to the exit door.\n" \ "You must kill the dragon and take the key from its dead body.\n" self.assertEqual(expected_output, result_output) def test_open_envelope_room(self): self.ih.handle_user_input("open envelope") self.assertNotIn("#item_envelope", self.game_state.rooms['#room_entrance'].items) self.assertIn("#item_letter", self.game_state.rooms['#room_entrance'].items) stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("open envelope") result_output = stdout.getvalue() expected_output = "There is no envelope around.\n" self.assertEqual(expected_output, result_output) def test_open_envelope_inventory(self): self.ih.handle_user_input("take envelope") self.ih.handle_user_input("open envelope") self.assertNotIn("#item_envelope", self.game_state.rooms['#room_entrance'].items) self.assertIn("#item_letter", self.game_state.rooms['#room_entrance'].items) stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("open envelope") result_output = stdout.getvalue() expected_output = "There is no envelope around.\n" self.assertEqual(expected_output, result_output) def test_take_keys_with_same_alias(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih1.handle_user_input("take key") result_output = stdout.getvalue() expected_output = f"There are 2 \"key\". You have to be more specific.\n" self.assertEqual(expected_output, result_output) def test_examine_keys_with_same_alias(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih1.handle_user_input("examine key") result_output = stdout.getvalue() expected_output = f"There are 2 \"key\". You have to be more specific.\n" self.assertEqual(expected_output, result_output) def test_nonexistent_action_keys_with_same_alias(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih1.handle_user_input("read key") result_output = stdout.getvalue() expected_output = f"There are 2 \"key\". You have to be more specific.\n" self.assertEqual(expected_output, result_output) # -- attack non creatures -- def test_attack_envelope(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("attack envelope") result_output = stdout.getvalue() expected_output = "Action \"attack\" is not allowed with the envelope.\n" self.assertEqual(expected_output, result_output) def test_attack_helmet(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("attack helmet") result_output = stdout.getvalue() expected_output = "Action \"attack\" is not allowed with the helmet.\n" self.assertEqual(expected_output, result_output) def test_attack_door(self): self.ih.handle_user_input("go west") stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("attack door") result_output = stdout.getvalue() expected_output = "Action \"attack\" is not allowed with the door.\n" self.assertEqual(expected_output, result_output) def test_attack_nonexistent(self): stdout = io.StringIO() with contextlib.redirect_stdout(stdout): self.ih.handle_user_input("attack nothing") result_output = stdout.getvalue() expected_output = "There is no nothing around.\n" self.assertEqual(expected_output, result_output)