Пример #1
0
 def kill_player(self, player: Player, ctx: Context) -> None:
     # player can only be killed if she is still here, obviously
     if self.attacking and player in self.location.livings:
         player.tell_text_file(
             ctx.resources["messages/completion_failed.txt"])
         raise StoryCompleted
     self.attacking = False
Пример #2
0
 def test_with_key(self):
     player = Player("julie", "f")
     key = Key("key", "door key")
     key.key_for(code=12345)
     hall = Location("hall")
     door = Door("north", hall, "a locked door", locked=True, opened=False)
     door2 = Door("south", hall, "another locked door", locked=True, opened=False)
     with self.assertRaises(ActionRefused):
         door.unlock(player)
     with self.assertRaises(ActionRefused):
         door.unlock(player, key)
     door.key_code = 12345
     door2.key_code = 9999
     key.key_for(door)
     self.assertTrue(door.locked)
     door.unlock(player, key)
     self.assertFalse(door.locked)
     with self.assertRaises(ActionRefused):
         door2.unlock(key)
     door.locked = True
     with self.assertRaises(ActionRefused):
         door.unlock(player)
     key.move(player, player)
     door.unlock(player)
     self.assertFalse(door.locked)
     door.lock(player)
     self.assertTrue(door.locked)
     door.unlock(player)
     player.remove(key, player)
     with self.assertRaises(ActionRefused):
         door.lock(player)
     door.key_code = None
     with self.assertRaises(LocationIntegrityError):
         key.key_for(door)
Пример #3
0
    def test_custom_verbs(self):
        player = Player("julie", "f")
        player.verbs["xywobble"] = "p1"
        room = Location("room")
        chair1 = Item("chair1")
        chair1.verbs["frobnitz"] = "c1"
        chair2 = Item("chair2")
        chair2.verbs["frobnitz"] = "c2"
        chair_in_inventory = Item("chair3")
        chair_in_inventory.verbs["kowabooga"] = "c3"
        room.init_inventory([chair1, player, chair2])

        # check inventory NOT affecting player custom verbs, but DOES affect location verbs
        self.assertEqual({"xywobble": "p1"}, player.verbs)
        self.assertEqual({"frobnitz": "c2", "xywobble": "p1"}, room.verbs)
        player.insert(chair_in_inventory, player)
        self.assertEqual({"xywobble": "p1"}, player.verbs)
        self.assertEqual({"frobnitz": "c2", "xywobble": "p1", "kowabooga": "c3"}, room.verbs)
        player.remove(chair_in_inventory, player)
        self.assertEqual({"frobnitz": "c2", "xywobble": "p1"}, room.verbs)

        player.insert(chair_in_inventory, player)
        self.assertEqual({"frobnitz": "c2", "xywobble": "p1", "kowabooga": "c3" }, room.verbs)
        room2 = Location("room2")
        self.assertEqual({}, room2.verbs)
        chair1.move(room2, player)
        self.assertEqual({"xywobble": "p1", "kowabooga": "c3" }, room.verbs)
        self.assertEqual({"frobnitz": "c1"}, room2.verbs)
        chair2.move(room2, player)
        self.assertEqual({"xywobble": "p1", "kowabooga": "c3"}, room.verbs)
        self.assertEqual({"frobnitz": "c2"}, room2.verbs)
        player.move(room2)
        self.assertEqual({}, room.verbs)
        self.assertEqual({"frobnitz": "c2", "xywobble": "p1", "kowabooga": "c3"}, room2.verbs)
Пример #4
0
    def test_move_notify(self):
        class LocationNotify(Location):
            def notify_npc_left(self, npc, target_location):
                self.npc_left = npc
                self.npc_left_target = target_location

            def notify_npc_arrived(self, npc, previous_location):
                self.npc_arrived = npc
                self.npc_arrived_from = previous_location

            def notify_player_left(self, player, target_location):
                self.player_left = player
                self.player_left_target = target_location

            def notify_player_arrived(self, player, previous_location):
                self.player_arrived = player
                self.player_arrived_from = previous_location

        player = Player("julie", "f")
        room1 = LocationNotify("room1")
        room2 = LocationNotify("room2")
        room1.insert(player, player)
        player.move(room2)
        pubsub.sync()
        self.assertEqual(room2, player.location)
        self.assertEqual(player, room1.player_left)
        self.assertEqual(room2, room1.player_left_target)
        self.assertEqual(player, room2.player_arrived)
        self.assertEqual(room1, room2.player_arrived_from)
Пример #5
0
 def test_custom_verbs(self):
     player = Player("julie", "f")
     player.verbs["xywobble"] = "p1"
     monster = NPC("snake", "f")
     monster.verbs["snakeverb"] = "s1"
     room = Location("room")
     chair1 = Item("chair1")
     chair1.verbs["frobnitz"] = "c1"
     chair2 = Item("chair2")
     chair2.verbs["frobnitz"] = "c2"
     chair_in_inventory = Item("chair3")
     chair_in_inventory.verbs["kowabooga"] = "c3"
     box_in_inventory = Item("box")
     box_in_inventory.verbs["boxverb"] = "c4"
     player.init_inventory([box_in_inventory, chair_in_inventory])
     exit = Exit("e", "dummy", None, None)
     exit.verbs["exitverb"] = "c5"
     room.init_inventory([chair1, player, chair2, monster])
     room.add_exits([exit])
     custom_verbs = mud_context.driver.current_custom_verbs(player)
     all_verbs = mud_context.driver.current_verbs(player)
     self.assertEqual(
         {
             "xywobble", "snakeverb", "frobnitz", "kowabooga", "boxverb",
             "exitverb"
         }, set(custom_verbs))
     self.assertEqual(set(), set(custom_verbs) - set(all_verbs))
Пример #6
0
    def test_move_notify(self):
        class LocationNotify(Location):
            def notify_npc_left(self, npc, target_location):
                self.npc_left = npc
                self.npc_left_target = target_location

            def notify_npc_arrived(self, npc, previous_location):
                self.npc_arrived = npc
                self.npc_arrived_from = previous_location

            def notify_player_left(self, player, target_location):
                self.player_left = player
                self.player_left_target = target_location

            def notify_player_arrived(self, player, previous_location):
                self.player_arrived = player
                self.player_arrived_from = previous_location

        player = Player("julie", "f")
        room1 = LocationNotify("room1")
        room2 = LocationNotify("room2")
        room1.insert(player, player)
        player.move(room2)
        pubsub.sync()
        self.assertEqual(room2, player.location)
        self.assertEqual(player, room1.player_left)
        self.assertEqual(room2, room1.player_left_target)
        self.assertEqual(player, room2.player_arrived)
        self.assertEqual(room1, room2.player_arrived_from)
Пример #7
0
 def test_write_output(self):
     player = Player("julie", "f")
     with WrappedConsoleIO(None) as io:
         pc = PlayerConnection(player, io)
         player.tell("hello 1", end=True)
         player.tell("hello 2", end=True)
         pc.write_output()
         self.assertEqual("  hello 2", pc.last_output_line)
         self.assertEqual("  hello 1\n  hello 2\n", sys.stdout.getvalue())
Пример #8
0
 def welcome(self, player: Player) -> str:
     """
     Welcome text when player enters a new game
     If you return a string, it is used as an input prompt before continuing (a pause).
     """
     player.tell("<bright>Hello, %s!</> Welcome to the land of `%s'.  May your visit here be... interesting."
                 % (player.title, self.config.name), end=True)
     player.tell("--", end=True)
     return ""
Пример #9
0
 def test_tell_emptystring(self):
     player = Player("fritz", "m")
     player.tell("", end=False)
     self.assertEqual([], player.test_get_output_paragraphs())
     player.tell("", end=True)
     self.assertEqual(["\n"], player.test_get_output_paragraphs())
     player.tell("", end=True)
     player.tell("", end=True)
     self.assertEqual(["\n", "\n"], player.test_get_output_paragraphs())
Пример #10
0
 def test_input(self):
     player = Player("julie", "f")
     with WrappedConsoleIO(None) as io:
         pc = PlayerConnection(player, io)
         player.tell("first this text")
         player.store_input_line("      input text     \n")
         x = pc.input_direct("inputprompt")
         self.assertEqual("input text", x)
         self.assertEqual("  first this text\ninputprompt ", sys.stdout.getvalue())  # should have outputted the buffered text
Пример #11
0
 def notify_player_arrived(self, player: Player,
                           previous_location: Location) -> None:
     # player has entered, and thus the story ends
     player.tell("\n")
     player.tell("\n")
     player.tell(
         "<bright>Congratulations on escaping the house!</> Someone else has to look after Garfield now though..."
     )
     raise StoryCompleted
Пример #12
0
 def test_write_output(self):
     player = Player("julie", "f")
     with WrappedConsoleIO(None) as io:
         pc = PlayerConnection(player, io)
         player.tell("hello 1", end=True)
         player.tell("hello 2", end=True)
         pc.write_output()
         self.assertEqual("  hello 2", pc.last_output_line)
         self.assertEqual("  hello 1\n  hello 2\n", sys.stdout.getvalue())
Пример #13
0
 def test_init(self):
     player = Player("fritz", "m")
     player.title = "Fritz the great"
     self.assertEqual("fritz", player.name)
     self.assertEqual("Fritz the great", player.title)
     self.assertEqual("", player.description)
     self.assertEqual("human", player.race)
     self.assertEqual("m", player.gender)
     self.assertEqual(set(), player.privileges)
     self.assertTrue(1 < player.stats["agi"] < 100)
Пример #14
0
 def test_peek_output(self):
     player = Player("fritz", "m")
     pc = PlayerConnection(player, ConsoleIo(None))
     player.set_screen_sizes(0, 100)
     player.tell("line1")
     player.tell("line2", 42)
     self.assertEqual(["line1\nline2 42\n"],
                      player.test_peek_output_paragraphs())
     self.assertEqual("line1 line2 42\n", pc.get_output())
     self.assertEqual([], player.test_peek_output_paragraphs())
Пример #15
0
 def welcome(self, player: Player) -> Optional[str]:
     """
     Welcome text when player enters a new game
     If you return a string, it is used as an input prompt before continuing (a pause).
     """
     player.tell(
         "<bright>Hello, %s!</> Welcome to the land of `%s'.  May your visit here be... interesting."
         % (player.title, self.config.name),
         end=True)
     player.tell("--", end=True)
     return None
Пример #16
0
 def test_init(self):
     player = Player("fritz", "m")
     player.title = "Fritz the great"
     self.assertEqual("fritz", player.name)
     self.assertEqual("Fritz the great", player.title)
     self.assertEqual("", player.description)
     self.assertEqual("human", player.stats.race)
     self.assertEqual("m", player.gender)
     self.assertEqual(set(), player.privileges)
     self.assertTrue(1 < player.stats.agi < 100)
     self.assertGreater(player.output_line_delay, 1)
Пример #17
0
 def test_idle(self):
     p = Player("dummy", "f")
     c = PlayerConnection(p, WrappedConsoleIO(None))
     self.assertLess(p.idle_time, 0.1)
     self.assertLess(c.idle_time, 0.1)
     time.sleep(0.2)
     self.assertGreater(p.idle_time, 0.1)
     self.assertGreater(c.idle_time, 0.1)
     p.store_input_line("input")
     self.assertLess(p.idle_time, 0.1)
     self.assertLess(c.idle_time, 0.1)
Пример #18
0
 def test_init(self):
     player = Player("fritz", "m")
     player.title = "Fritz the great"
     self.assertEqual("fritz", player.name)
     self.assertEqual("Fritz the great", player.title)
     self.assertEqual("", player.description)
     self.assertEqual("human", player.stats.race)
     self.assertEqual("m", player.gender)
     self.assertEqual(set(), player.privileges)
     self.assertTrue(1 < player.stats.agi < 100)
     self.assertGreater(player.output_line_delay, 1)
Пример #19
0
 def test_idle(self):
     p = Player("dummy", "f")
     c = PlayerConnection(p, WrappedConsoleIO(None))
     self.assertLess(p.idle_time, 0.1)
     self.assertLess(c.idle_time, 0.1)
     time.sleep(0.2)
     self.assertGreater(p.idle_time, 0.1)
     self.assertGreater(c.idle_time, 0.1)
     p.store_input_line("input")
     self.assertLess(p.idle_time, 0.1)
     self.assertLess(c.idle_time, 0.1)
Пример #20
0
 def test_peek_output(self):
     player = Player("fritz", "m")
     pc = PlayerConnection(player, ConsoleIo(None))
     player.set_screen_sizes(0, 100)
     player.tell("line1")
     player.tell("line2", 42)
     self.assertEqual(["line1\nline2 42\n"], player.test_peek_output_paragraphs())
     self.assertEqual("line1 line2 42\n", pc.get_output())
     self.assertEqual([], player.test_peek_output_paragraphs())
Пример #21
0
 def test_tell_sep(self):
     player = Player("fritz", "m")
     pc = PlayerConnection(player, ConsoleIo(None))
     player.set_screen_sizes(0, 10)
     player.tell("apple", "bee", "zinc", "rose")
     self.assertEqual(["apple bee zinc rose\n"],
                      player.test_get_output_paragraphs())
     pc.get_output()
     player.tell("apple", "bee", "zinc", "rose", format=False)
     self.assertEqual("apple\nbee\nzinc\nrose\n", pc.get_output())
Пример #22
0
 def welcome(self, player: Player) -> Optional[str]:
     """welcome text when player enters a new game"""
     player.tell("<bright>Hello, %s! Welcome to %s.</>" % (player.title, self.config.name), end=True)
     player.tell("\n")
     player.tell(self.driver.resources["messages/welcome.txt"].text)
     player.tell("\n")
     return None
Пример #23
0
 def welcome(self, player: Player) -> str:
     player.tell("<bright>Welcome to `%s'.</>" % self.config.name, end=True)
     player.tell("This is a tiny embedded story to check out a running Tale environment.")
     player.tell("Try to communicate with your pet, and exit the house to win the game.")
     player.tell("\n")
     player.tell("\n")
     return ""
Пример #24
0
 def welcome_savegame(self, player: Player) -> Optional[str]:
     """welcome text when player enters the game after loading a saved game"""
     player.tell("<bright>Hello %s, welcome back to %s.</>" % (player.title, self.config.name), end=True)
     player.tell("\n")
     player.tell(self.driver.resources["messages/welcome.txt"].text)
     player.tell("\n")
     return None
Пример #25
0
 def test_clone(self):
     item = Item("thing", "description")
     item.aliases = ["a1", "a2"]
     item2 = util.clone(item)
     self.assertNotEqual(item, item2)
     item2.aliases.append("a3")
     self.assertNotEqual(item.aliases, item2.aliases)
     player = Player("julie", "f")
     player.insert(item, player)
     player2 = util.clone(player)
     player2.insert(item2, player2)
     self.assertNotEqual(player.inventory_size, player2.inventory_size)
     self.assertNotEqual(player.inventory, player2.inventory)
     self.assertTrue(item in player)
     self.assertFalse(item in player2)
Пример #26
0
 def test_destroy_deferreds(self):
     ctx = Context(driver=mud_context.driver, clock=None, config=None, player_connection=None)
     thing = Item("thing")
     player = Player("julie", "f")
     wolf = NPC("wolf", "m")
     loc = Location("loc")
     mud_context.driver.defer(datetime.datetime.now(), thing.move)
     mud_context.driver.defer(datetime.datetime.now(), player.move)
     mud_context.driver.defer(datetime.datetime.now(), wolf.move)
     mud_context.driver.defer(datetime.datetime.now(), loc.move)
     self.assertEqual(4, len(mud_context.driver.deferreds))
     thing.destroy(ctx)
     player.destroy(ctx)
     wolf.destroy(ctx)
     loc.destroy(ctx)
     self.assertEqual(0, len(mud_context.driver.deferreds), "all deferreds must be removed")
Пример #27
0
 def setUp(self):
     mud_context.driver = TestDriver()
     mud_context.config = DemoStory()._get_config()
     self.hall = Location("Main hall", "A very large hall.")
     self.attic = Location("Attic", "A dark attic.")
     self.street = Location("Street", "An endless street.")
     e1 = Exit("up", self.attic, "A ladder leads up.")
     e2 = Exit(["door", "east"], self.street, "A heavy wooden door to the east blocks the noises from the street outside.")
     self.hall.add_exits([e1, e2])
     self.table = Item("table", "oak table", "a large dark table with a lot of cracks in its surface")
     self.key = Item("key", "rusty key", "an old rusty key without a label", short_description="Someone forgot a key.")
     self.magazine = Item("magazine", "university magazine")
     self.magazine2 = Item("magazine", "university magazine")
     self.rat = NPC("rat", "n", race="rodent")
     self.rat2 = NPC("rat", "n", race="rodent")
     self.fly = NPC("fly", "n", race="insect", short_description="A fly buzzes around your head.")
     self.julie = NPC("julie", "f", title="attractive Julie", description="She's quite the looker.")
     self.julie.aliases = {"chick"}
     self.player = Player("player", "m")
     self.pencil = Item("pencil", title="fountain pen")
     self.pencil.aliases = {"pen"}
     self.bag = Container("bag")
     self.notebook_in_bag = Item("notebook")
     self.bag.insert(self.notebook_in_bag, self.player)
     self.player.insert(self.pencil, self.player)
     self.player.insert(self.bag, self.player)
     self.hall.init_inventory([self.table, self.key, self.magazine, self.magazine2, self.rat, self.rat2, self.julie, self.player, self.fly])
Пример #28
0
 def test_destroy_deferreds(self):
     ctx = Context(driver=mud_context.driver)
     thing = Item("thing")
     player = Player("julie", "f")
     wolf = Monster("wolf", "m")
     loc = Location("loc")
     mud_context.driver.defer(datetime.datetime.now(), thing, "method")
     mud_context.driver.defer(datetime.datetime.now(), player, "method")
     mud_context.driver.defer(datetime.datetime.now(), wolf, "method")
     mud_context.driver.defer(datetime.datetime.now(), loc, "method")
     self.assertEqual(4, len(mud_context.driver.deferreds))
     thing.destroy(ctx)
     player.destroy(ctx)
     wolf.destroy(ctx)
     loc.destroy(ctx)
     self.assertEqual(0, len(mud_context.driver.deferreds), "all deferreds must be removed")
Пример #29
0
 def test_complete_one(self):
     player = Player("fritz", "m")
     driver = TestDriver()
     conn = PlayerConnection(player)
     io = IoAdapterBase(conn)
     conn.io = io
     self.assertEqual(["criticize"], io.tab_complete("critic", driver))
Пример #30
0
 def test_init(self):
     player = Player("fritz", "m")
     player.title = "Fritz the great"
     self.assertEqual("fritz", player.name)
     self.assertEqual("Fritz the great", player.title)
     self.assertEqual("", player.description)
     self.assertEqual("human", player.stats.race)
     self.assertEqual("m", player.gender)
     self.assertEqual("m", player.stats.gender)
     self.assertEqual("he", player.subjective)
     self.assertEqual(set(), player.privileges)
     self.assertGreater(player.output_line_delay, 1)
     player.init_gender("f")
     self.assertEqual("f", player.gender)
     self.assertEqual("f", player.stats.gender)
     self.assertEqual("she", player.subjective)
Пример #31
0
 def test_tell_sep(self):
     player = Player("fritz", "m")
     pc = PlayerConnection(player, ConsoleIo(None))
     player.set_screen_sizes(0, 10)
     player.tell("apple", "bee", "zinc", "rose")
     self.assertEqual(["apple bee zinc rose\n"], player.test_get_output_paragraphs())
     pc.get_output()
     player.tell("apple", "bee", "zinc", "rose", format=False)
     self.assertEqual("apple\nbee\nzinc\nrose\n", pc.get_output())
Пример #32
0
 def test_others(self):
     attic = Location("Attic", "A dark attic.")
     player = Player("merlin", "m")
     player.title = "wizard Merlin"
     julie = MsgTraceNPC("julie", "f", "human")
     fritz = MsgTraceNPC("fritz", "m", "human")
     julie.move(attic, silent=True)
     fritz.move(attic, silent=True)
     player.move(attic, silent=True)
     player.tell_others("one", "two", "three")
     self.assertEqual([], player.test_get_output_paragraphs())
     self.assertEqual(["one", "two", "three"], fritz.messages)
     self.assertEqual(["one", "two", "three"], julie.messages)
     fritz.clearmessages()
     julie.clearmessages()
     player.tell_others("{title} and {Title}")
     self.assertEqual(["wizard Merlin and Wizard Merlin"], fritz.messages)
Пример #33
0
 def welcome(self, player: Player) -> str:
     """
     Welcome text when player enters a new game
     If you return a string, it is used as an input prompt before continuing (a pause).
     """
     player.tell("<bright>Welcome to `%s'.</>" % self.config.name, end=True)
     player.tell("\n")
     player.tell_text_file(self.driver.resources["messages/welcome.txt"])
     player.tell("\n")
     return "<bright>Press enter to continue.</>"
Пример #34
0
 def welcome_savegame(self, player: Player) -> str:
     """
     Welcome text when player enters the game after loading a saved game
     If you return a string, it is used as an input prompt before continuing (a pause).
     """
     player.tell("<bright>Welcome back to `%s'.</>" % self.config.name, end=True)
     player.tell("\n")
     player.tell_text_file(self.driver.resources["messages/welcome.txt"])
     player.tell("\n")
     return "<bright>Press enter to continue where you were before.</>"
Пример #35
0
 def test_clone(self):
     item = Item("thing", "description")
     item.aliases = ["a1", "a2"]
     item2 = clone(item)
     self.assertNotEqual(item, item2)
     item2.aliases.append("a3")
     self.assertNotEqual(item.aliases, item2.aliases)
     player = Player("julie", "f")
     player.insert(item, player)
     with self.assertRaises(ValueError):
         clone(player)   # can't clone something with stuff in it
     player.remove(item, player)
     player2 = clone(player)
     player2.insert(item2, player2)
     self.assertNotEqual(player.inventory_size, player2.inventory_size)
     self.assertNotEqual(player.inventory, player2.inventory)
     self.assertFalse(item in player)
     self.assertFalse(item in player2)
Пример #36
0
 def setUp(self):
     mud_context.driver = TestDriver()
     mud_context.config = DemoStory()._get_config()
     self.hall = Location("Main hall", "A very large hall.")
     self.attic = Location("Attic", "A dark attic.")
     self.street = Location("Street", "An endless street.")
     e1 = Exit("up", self.attic, "A ladder leads up.")
     e2 = Exit(
         ["door", "east"], self.street,
         "A heavy wooden door to the east blocks the noises from the street outside."
     )
     self.hall.add_exits([e1, e2])
     self.table = Item(
         "table", "oak table",
         "a large dark table with a lot of cracks in its surface")
     self.key = Item("key",
                     "rusty key",
                     "an old rusty key without a label",
                     short_description="Someone forgot a key.")
     self.magazine = Item("magazine", "university magazine")
     self.magazine2 = Item("magazine", "university magazine")
     self.rat = NPC("rat", "n", race="rodent")
     self.rat2 = NPC("rat", "n", race="rodent")
     self.fly = NPC("fly",
                    "n",
                    race="insect",
                    short_description="A fly buzzes around your head.")
     self.julie = NPC("julie",
                      "f",
                      title="attractive Julie",
                      description="She's quite the looker.")
     self.julie.aliases = {"chick"}
     self.player = Player("player", "m")
     self.pencil = Item("pencil", title="fountain pen")
     self.pencil.aliases = {"pen"}
     self.bag = Container("bag")
     self.notebook_in_bag = Item("notebook")
     self.bag.insert(self.notebook_in_bag, self.player)
     self.player.insert(self.pencil, self.player)
     self.player.insert(self.bag, self.player)
     self.hall.init_inventory([
         self.table, self.key, self.magazine, self.magazine2, self.rat,
         self.rat2, self.julie, self.player, self.fly
     ])
Пример #37
0
 def welcome(self, player: Player) -> str:
     player.tell("<bright>Welcome to `%s'.</>" % self.config.name, end=True)
     player.tell(
         "This is a tiny embedded story to check out a running Tale environment."
     )
     player.tell(
         "Try to communicate with your pet, and exit the house to win the game."
     )
     player.tell("\n")
     player.tell("\n")
     return ""
Пример #38
0
 def test_notify(self):
     room = Location("room")
     room2 = Location("room2")
     player = Player("julie", "f")
     room.notify_player_arrived(player, room2)
     room.notify_player_left(player, room2)
     room.notify_npc_arrived(player, room2)
     room.notify_npc_left(player, room2)
     parsed = ParseResult("verb")
     room.notify_action(parsed, player)
Пример #39
0
 def test_destroy_deferreds(self):
     ctx = Context(driver=mud_context.driver,
                   clock=None,
                   config=None,
                   player_connection=None)
     thing = Item("thing")
     player = Player("julie", "f")
     wolf = NPC("wolf", "m")
     loc = Location("loc")
     mud_context.driver.defer(datetime.datetime.now(), thing.move)
     mud_context.driver.defer(datetime.datetime.now(), player.move)
     mud_context.driver.defer(datetime.datetime.now(), wolf.move)
     mud_context.driver.defer(datetime.datetime.now(), loc.move)
     self.assertEqual(4, len(mud_context.driver.deferreds))
     thing.destroy(ctx)
     player.destroy(ctx)
     wolf.destroy(ctx)
     loc.destroy(ctx)
     self.assertEqual(0, len(mud_context.driver.deferreds),
                      "all deferreds must be removed")
Пример #40
0
 def test_others(self):
     attic = Location("Attic", "A dark attic.")
     player = Player("merlin", "m")
     player.title = "wizard Merlin"
     julie = MsgTraceNPC("julie", "f", "human")
     fritz = MsgTraceNPC("fritz", "m", "human")
     julie.move(attic, silent=True)
     fritz.move(attic, silent=True)
     player.move(attic, silent=True)
     player.tell_others("one", "two", "three")
     self.assertEqual([], player.test_get_output_paragraphs())
     self.assertEqual(["one", "two", "three"], fritz.messages)
     self.assertEqual(["one", "two", "three"], julie.messages)
     fritz.clearmessages()
     julie.clearmessages()
     player.tell_others("{title} and {Title}")
     self.assertEqual(["wizard Merlin and Wizard Merlin"], fritz.messages)
Пример #41
0
 def test_destroy_loc(self):
     ctx = Context()
     loc = Location("loc")
     i = Item("item")
     liv = Living("rat", "n", race="rodent")
     loc.add_exits([Exit("north", "somewhere", "exit to somewhere")])
     player = Player("julie", "f")
     player.privileges = {"wizard"}
     player.create_wiretap(loc)
     loc.init_inventory([i, liv, player])
     self.assertTrue(len(loc.exits) > 0)
     self.assertTrue(len(loc.items) > 0)
     self.assertTrue(len(loc.livings) > 0)
     self.assertEqual(loc, player.location)
     self.assertEqual(loc, liv.location)
     loc.destroy(ctx)
     self.assertTrue(len(loc.exits) == 0)
     self.assertTrue(len(loc.items) == 0)
     self.assertTrue(len(loc.livings) == 0)
     self.assertEqual(_Limbo, player.location)
     self.assertEqual(_Limbo, liv.location)
Пример #42
0
 def test_destroy_loc(self):
     ctx = Context(None, None, None, None)
     loc = Location("loc")
     i = Item("item")
     liv = Living("rat", "n", race="rodent")
     loc.add_exits([Exit("north", "somewhere", "exit to somewhere")])
     player = Player("julie", "f")
     player.privileges = {"wizard"}
     player.create_wiretap(loc)
     loc.init_inventory([i, liv, player])
     self.assertTrue(len(loc.exits) > 0)
     self.assertTrue(len(loc.items) > 0)
     self.assertTrue(len(loc.livings) > 0)
     self.assertEqual(loc, player.location)
     self.assertEqual(loc, liv.location)
     loc.destroy(ctx)
     self.assertTrue(len(loc.exits) == 0)
     self.assertTrue(len(loc.items) == 0)
     self.assertTrue(len(loc.livings) == 0)
     self.assertEqual(_limbo, player.location)
     self.assertEqual(_limbo, liv.location)
Пример #43
0
 def test_destroy_player(self):
     ctx = Context(None, None, None, None)
     loc = Location("loc")
     player = Player("julie", "f")
     player.privileges = {"wizard"}
     player.create_wiretap(loc)
     player.insert(Item("key"), player)
     loc.init_inventory([player])
     self.assertEqual(loc, player.location)
     self.assertTrue(len(player.inventory) > 0)
     self.assertTrue(player in loc.livings)
     player.destroy(ctx)
     import gc
     gc.collect()
     self.assertTrue(len(player.inventory) == 0)
     self.assertFalse(player in loc.livings)
     self.assertIsNone(player.location,
                       "destroyed player should end up nowhere (None)")
Пример #44
0
 def test_complete_c(self):
     player = Player("fritz", "m")
     driver = TestDriver()
     conn = PlayerConnection(player)
     io = IoAdapterBase(conn)
     conn.io = io
     result = io.tab_complete("c", driver)
     self.assertGreater(len(result), 20)
     self.assertTrue("cackle" in result)
     self.assertTrue("criticize" in result)
     result = io.tab_complete("h", driver)
     self.assertGreater(len(result), 10)
     self.assertTrue("hiss" in result)
Пример #45
0
 def test_init_inventory(self):
     rat = NPC("rat", "n", race="rodent")
     rat.insert(Item("thing"), None)
     wizz = Player("wizard", "f")
     wizz.privileges.add("wizard")
     rat.insert(Item("thing2"), wizz)
     self.assertEqual(2, rat.inventory_size)
     stuff = [Item("thing")]
     with self.assertRaises(AssertionError):
         rat.init_inventory(stuff)
     rat = NPC("rat", "n", race="rodent")
     rat.init_inventory(stuff)
     self.assertEqual(1, rat.inventory_size)
Пример #46
0
 def test_input(self):
     player = Player("julie", "f")
     player.prompt_toolkit_enabled = False
     with WrappedConsoleIO(None) as io:
         pc = PlayerConnection(player, io)
         player.tell("first this text")
         player.store_input_line("      input text     \n")
         x = pc.input_direct("inputprompt")
         self.assertEqual("input text", x)
         self.assertEqual("  first this text\ninputprompt ",
                          sys.stdout.getvalue()
                          )  # should have outputted the buffered text
Пример #47
0
 def test_with_key(self):
     player = Player("julie", "f")
     key = Key("key", "door key")
     key.key_for(code=12345)
     hall = Location("hall")
     door = Door("north", hall, "a locked door", locked=True, opened=False)
     door2 = Door("south",
                  hall,
                  "another locked door",
                  locked=True,
                  opened=False)
     with self.assertRaises(ActionRefused):
         door.unlock(player)
     with self.assertRaises(ActionRefused):
         door.unlock(player, key)
     door.key_code = 12345
     door2.key_code = 9999
     key.key_for(door)
     self.assertTrue(door.locked)
     door.unlock(player, key)
     self.assertFalse(door.locked)
     with self.assertRaises(ActionRefused):
         door2.unlock(key)
     door.locked = True
     with self.assertRaises(ActionRefused):
         door.unlock(player)
     key.move(player, player)
     door.unlock(player)
     self.assertFalse(door.locked)
     door.lock(player)
     self.assertTrue(door.locked)
     door.unlock(player)
     player.remove(key, player)
     with self.assertRaises(ActionRefused):
         door.lock(player)
     door.key_code = None
     with self.assertRaises(LocationIntegrityError):
         key.key_for(door)
Пример #48
0
 def test_custom_verbs(self):
     player = Player("julie", "f")
     player.verbs["xywobble"] = "p1"
     monster = NPC("snake", "f")
     monster.verbs["snakeverb"] = "s1"
     room = Location("room")
     chair1 = Item("chair1")
     chair1.verbs["frobnitz"] = "c1"
     chair2 = Item("chair2")
     chair2.verbs["frobnitz"] = "c2"
     chair_in_inventory = Item("chair3")
     chair_in_inventory.verbs["kowabooga"] = "c3"
     box_in_inventory = Item("box")
     box_in_inventory.verbs["boxverb"] = "c4"
     player.init_inventory([box_in_inventory, chair_in_inventory])
     exit = Exit("e", "dummy", None, None)
     exit.verbs["exitverb"] = "c5"
     room.init_inventory([chair1, player, chair2, monster])
     room.add_exits([exit])
     custom_verbs = mud_context.driver.current_custom_verbs(player)
     all_verbs = mud_context.driver.current_verbs(player)
     self.assertEqual({"xywobble", "snakeverb", "frobnitz", "kowabooga", "boxverb", "exitverb"}, set(custom_verbs))
     self.assertEqual(set(), set(custom_verbs) - set(all_verbs))
Пример #49
0
 def test_print_location(self):
     p = Player("julie", "f")
     key = Item("key")
     bag = Container("bag")
     room = Location("room")
     bag.insert(key, p)
     p.insert(bag, p)
     room.insert(p, p)
     with self.assertRaises(Exception):
         util.print_object_location(p, None, None)
     util.print_object_location(p, key, None)
     self.assertEqual(["(It's not clear where key is).\n"], p.test_get_output_paragraphs())
     util.print_object_location(p, key, None, print_parentheses=False)
     self.assertEqual(["It's not clear where key is.\n"], p.test_get_output_paragraphs())
     util.print_object_location(p, key, bag)
     result = "".join(p.test_get_output_paragraphs())
     self.assertTrue("in bag" in result and "in your inventory" in result)
     util.print_object_location(p, key, room)
     self.assertTrue("in your current location" in "".join(p.test_get_output_paragraphs()))
     util.print_object_location(p, bag, p)
     self.assertTrue("in your inventory" in "".join(p.test_get_output_paragraphs()))
     util.print_object_location(p, p, room)
     self.assertTrue("in your current location" in "".join(p.test_get_output_paragraphs()))
Пример #50
0
 def test_input(self):
     player = Player("julie", "f")
     player.io = ConsoleIo(None)
     old_stdout = sys.stdout
     sys.stdout = StringIO()
     try:
         player.tell("first this text")
         player.store_input_line("input text\n")
         x = player.input("inputprompt")
         self.assertEqual("input text", x)
         self.assertEqual("  first this text\ninputprompt", sys.stdout.getvalue())  # should have outputted the buffered text
     finally:
         sys.stdout = old_stdout
Пример #51
0
 def test_destroy_player(self):
     ctx = Context()
     loc = Location("loc")
     player = Player("julie", "f")
     player.privileges = {"wizard"}
     player.create_wiretap(loc)
     player.insert(Item("key"), player)
     loc.init_inventory([player])
     self.assertEqual(loc, player.location)
     self.assertTrue(len(player.inventory) > 0)
     self.assertTrue(player in loc.livings)
     player.destroy(ctx)
     import gc
     gc.collect()
     self.assertTrue(len(player.inventory) == 0)
     self.assertFalse(player in loc.livings)
     self.assertIsNone(player.location, "destroyed player should end up nowhere (None)")
Пример #52
0
 def test_title(self):
     bag = Container("bag", "leather bag", "a small leather bag")
     stone = Item("stone")
     player = Player("julie", "f")
     self.assertEqual("bag", bag.name)
     self.assertEqual("leather bag", bag.title)
     self.assertEqual("a small leather bag", bag.description)
     bag.move(player, player)
     self.assertEqual("bag", bag.name)
     self.assertEqual("leather bag", strip_text_styles(bag.title))
     self.assertEqual("a small leather bag",
                      strip_text_styles(bag.description))
     stone.move(bag, player)
     self.assertEqual("bag", bag.name)
     self.assertEqual("leather bag", strip_text_styles(bag.title))
     self.assertEqual("a small leather bag",
                      strip_text_styles(bag.description))
Пример #53
0
 def test_insertremove(self):
     key = Item("key")
     thing = Item("gizmo")
     player = Player("julie", "f")
     with self.assertRaises(ActionRefused):
         key.remove(None, player)
     with self.assertRaises(ActionRefused):
         key.remove(thing, player)
     with self.assertRaises(ActionRefused):
         key.insert(None, player)
     with self.assertRaises(ActionRefused):
         key.insert(thing, player)
     key.allow_item_move(player)
     with self.assertRaises(ActionRefused):
         key.inventory
     with self.assertRaises(ActionRefused):
         key.inventory_size
Пример #54
0
 def test_write_output(self):
     player = Player("julie", "f")
     player.io = ConsoleIo(None)
     old_stdout = sys.stdout
     sys.stdout = StringIO()
     try:
         player.tell("hello 1", end=True)
         player.tell("hello 2", end=True)
         player.write_output()
         self.assertEqual("  hello 1\n  hello 2\n", sys.stdout.getvalue())
     finally:
         sys.stdout = old_stdout
Пример #55
0
def spawn_cvnum(player: Player, parsed: ParseResult, ctx: util.Context) -> None:
    """Spawn an item or monster with the given circle-vnum (or both if the circle-vnum is the same)."""
    if len(parsed.args) != 1:
        raise ParseError("You have to give the item or monster's circle-vnum.")
    vnum = int(parsed.args[0])
    try:
        item = make_item(vnum)
    except KeyError:
        player.tell("There's no item with that circle-vnum.")
    else:
        player.tell("Spawned " + repr(item) + " (into your inventory)")
        item.move(player, actor=player)
    try:
        mob = make_mob(vnum)
    except KeyError:
        player.tell("There's no monster with that circle-vnum.")
    else:
        player.tell("Spawned " + repr(mob) + " (into your current location)")
        mob.move(player.location, actor=player)
Пример #56
0
 def test_print_location(self):
     p = Player("julie", "f")
     key = Item("key")
     bag = Container("bag")
     room = Location("room")
     bag.insert(key, p)
     p.insert(bag, p)
     room.insert(p, p)
     with self.assertRaises(Exception):
         util.print_object_location(p, None, None)
     util.print_object_location(p, key, None)
     self.assertEqual(["(It's not clear where key is).\n"], p.test_get_output_paragraphs())
     util.print_object_location(p, key, None, print_parentheses=False)
     self.assertEqual(["It's not clear where key is.\n"], p.test_get_output_paragraphs())
     util.print_object_location(p, key, bag)
     result = "".join(p.test_get_output_paragraphs())
     self.assertTrue("in bag" in result and "in your inventory" in result)
     util.print_object_location(p, key, room)
     self.assertTrue("in your current location" in "".join(p.test_get_output_paragraphs()))
     util.print_object_location(p, bag, p)
     self.assertTrue("in your inventory" in "".join(p.test_get_output_paragraphs()))
     util.print_object_location(p, p, room)
     self.assertTrue("in your current location" in "".join(p.test_get_output_paragraphs()))
Пример #57
0
def show_cvnum(player: Player, parsed: ParseResult, ctx: util.Context) -> None:
    """Show the circle-vnum of a location (.) or an object/living,
    or when you provide a circle-vnum as arg, show the object(s) with that circle-vnum."""
    if not parsed.args:
        raise ParseError("From what should I show the circle-vnum?")
    name = parsed.args[0]
    obj = None  # type: Union[Location, Living, Item, Exit]
    if name == ".":
        obj = player.location
    elif parsed.who_info:
        obj = parsed.who_1
    else:
        try:
            vnum = int(parsed.args[0])
        except ValueError as x:
            raise ActionRefused(str(x))
        objects = []   # type: List[Union[Location, Living, Item, Exit]]
        try:
            objects.append(make_item(vnum))
        except KeyError:
            pass
        try:
            objects.append(make_location(vnum))
        except KeyError:
            pass
        try:
            objects.append(make_mob(vnum))
        except KeyError:
            pass
        player.tell("Objects with circle-vnum %d:" % vnum + " " + (lang.join(str(o) for o in objects) or "none"))
        return
    try:
        vnum = obj.circle_vnum
        player.tell("Circle-Vnum of %s = %d." % (obj, vnum))
    except AttributeError:
        player.tell(str(obj) + " has no circle-vnum.")
Пример #58
0
 def test_tell_chain(self):
     player = Player("fritz", "m")
     player.tell("hi").tell("there")
     self.assertEqual(["hi\nthere\n"], player.test_get_output_paragraphs())
Пример #59
0
 def test_tell(self):
     player = Player("fritz", "m")
     player.tell(5)
     self.assertEqual(["5\n"], player.test_get_output_paragraphs())
     player.tell("")
     self.assertEqual([], player.test_get_output_paragraphs())
     player.tell("")
     player.tell("")
     self.assertEqual([], player.test_get_output_paragraphs())
     player.tell("")
     player.tell("line1")
     player.tell("line2")
     player.tell("")
     self.assertEqual(["line1\nline2\n"], player.test_get_output_paragraphs())
     player.tell("", format=False)
     player.tell("line1", format=False)
     player.tell("", format=False)
     player.tell("line2", format=False)
     player.tell("", format=False)
     self.assertEqual(["\nline1\n\nline2\n\n"], player.test_get_output_paragraphs())
     player.tell("\n")
     self.assertEqual(["\n"], player.test_get_output_paragraphs())
     player.tell("line1")
     player.tell("line2")
     player.tell("hello\nnewline")
     player.tell("\n")
     player.tell("ints", 42, 999)
     self.assertEqual(["line1\nline2\nhello\nnewline\n", "ints 42 999\n"], player.test_get_output_paragraphs())
     self.assertEqual([], player.test_get_output_paragraphs())
     player.tell("para1", end=False)
     player.tell("para2", end=True)
     player.tell("para3")
     player.tell("\n")
     player.tell("para4", "\n", "para5")
     self.assertEqual(["para1\npara2\n", "para3\n", "para4 \n para5\n"], player.test_get_output_paragraphs())
     player.tell("   xyz   \n  123", format=False)
     self.assertEqual(["   xyz   \n  123\n"], player.test_get_output_paragraphs())
     player.tell("line1", end=True)
     player.tell("\n")
     player.tell("line2", end=True)
     player.tell("\n")
     player.tell("\n")
     self.assertEqual(["line1\n", "\n", "line2\n", "\n", "\n"], player.test_get_output_paragraphs())