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"))
Exemple #2
0
    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)
Exemple #3
0
 def __init__(self, game_state: GameState):
     self.game_state = game_state
     self.input_handler = InputHandler(game_state)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)