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)
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)
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)