def test_handle_and_notify_action(self): class SpecialPlayer(Player): def init(self): self.handled = False self.handle_verb_called = False self.notify_called = False self.notify_args = None def handle_verb(self, parsed, actor): self.handle_verb_called = True if parsed.verb in self.verbs: self.handled = True return True else: return False def notify_action(self, parsed, actor): self.notify_called = True self.notify_args = (parsed, actor) player = SpecialPlayer("julie", "f") player.verbs["xywobble"] = "" room = Location("room") class Chair(Item): def init(self): self.handled = False self.handle_verb_called = False self.notify_called = False self.notify_args = None def handle_verb(self, parsed, actor): self.handle_verb_called = True if parsed.verb in self.verbs: self.handled = True return True else: return False def notify_action(self, parsed, actor): self.notify_called = True self.notify_args = (parsed, actor) chair_in_inventory = Chair("littlechair") chair_in_inventory.verbs["kerwaffle"] = "" player.insert(chair_in_inventory, player) chair = Chair("chair") chair.verbs["frobnitz"] = "" room.init_inventory([player, chair]) # first check if the handle_verb passes to all objects including inventory parsed = ParseResult("kowabungaa12345") handled = room.handle_verb(parsed, player) self.assertFalse(handled) self.assertTrue(chair.handle_verb_called) self.assertTrue(player.handle_verb_called) self.assertTrue(chair_in_inventory.handle_verb_called) self.assertFalse(chair.handled) self.assertFalse(player.handled) self.assertFalse(chair_in_inventory.handled) # check item handling player.init() chair.init() chair_in_inventory.init() parsed = ParseResult("frobnitz") handled = room.handle_verb(parsed, player) self.assertTrue(handled) self.assertTrue(chair.handled) self.assertFalse(player.handled) self.assertFalse(chair_in_inventory.handled) # check living handling player.init() chair.init() chair_in_inventory.init() parsed = ParseResult("xywobble") handled = room.handle_verb(parsed, player) self.assertTrue(handled) self.assertFalse(chair.handled) self.assertTrue(player.handled) self.assertFalse(chair_in_inventory.handled) # check inventory handling player.init() chair.init() chair_in_inventory.init() parsed = ParseResult("kerwaffle") handled = room.handle_verb(parsed, player) self.assertTrue(handled) self.assertFalse(chair.handled) self.assertFalse(player.handled) self.assertTrue(chair_in_inventory.handled) # check notify_action player.init() chair.init() chair_in_inventory.init() room._notify_action_all(parsed, player) self.assertTrue(chair.notify_called) self.assertTrue(player.notify_called) self.assertTrue(chair_in_inventory.notify_called) parsed, actor = chair.notify_args self.assertIs(player, actor) self.assertEqual("kerwaffle", parsed.verb) parsed, actor = player.notify_args self.assertIs(player, actor) self.assertEqual("kerwaffle", parsed.verb) parsed, actor = chair_in_inventory.notify_args self.assertIs(player, actor) self.assertEqual("kerwaffle", parsed.verb)