test_data.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. """Test suite.
  2. Copyright 2010-2015 Brandon Rhodes. Licensed as free software under the
  3. Apache License, Version 2.0 as detailed in the accompanying README.txt.
  4. """
  5. import unittest
  6. class DataTest(unittest.TestCase):
  7. def setUp(self):
  8. from adventure.data import Data
  9. from adventure import load_advent_dat
  10. self.data = Data()
  11. load_advent_dat(self.data)
  12. def test_long_description(self):
  13. self.assertEqual(self.data.rooms[4].long_description, """\
  14. YOU ARE IN A VALLEY IN THE FOREST BESIDE A STREAM TUMBLING ALONG A
  15. ROCKY BED.
  16. """)
  17. def test_long_description_expands_tabs(self):
  18. self.assertIn("ALMOST AS IF ALIVE. A COLD WIND BLOWS",
  19. self.data.rooms[15].long_description)
  20. def test_short_description(self):
  21. self.assertEqual(self.data.rooms[4].short_description,
  22. "YOU'RE IN VALLEY.\n")
  23. def test_object_message_expands_tabs(self):
  24. self.assertEqual(self.data.objects[24].messages[5], """\
  25. YOU'VE OVER-WATERED THE PLANT! IT'S SHRIVELING UP! IT'S, IT'S...
  26. """)
  27. def test_hint(self):
  28. hint = self.data.hints[4]
  29. self.assertEqual(hint.turns_needed, 4)
  30. self.assertEqual(hint.penalty, 2)
  31. self.assertEqual(hint.question.text,
  32. "ARE YOU TRYING TO GET INTO THE CAVE?\n")
  33. self.assertEqual(hint.message.text, """\
  34. THE GRATE IS VERY SOLID AND HAS A HARDENED STEEL LOCK. YOU CANNOT
  35. ENTER WITHOUT A KEY, AND THERE ARE NO KEYS NEARBY. I WOULD RECOMMEND
  36. LOOKING ELSEWHERE FOR THE KEYS.
  37. """)
  38. class ReprTest(unittest.TestCase):
  39. def setUp(self):
  40. from adventure.data import Data
  41. from adventure import load_advent_dat
  42. self.data = Data()
  43. load_advent_dat(self.data)
  44. def assertMove(self, room_i, entry_i, s):
  45. r = repr(self.data.rooms[room_i].travel_table[entry_i]).strip()
  46. self.assertEqual(r, s)
  47. def test_move_repr_look_good(self):
  48. m = self.assertMove
  49. m(1, 0, '<road|west|upward moves to "YOU\'RE AT HILL IN ROAD.">')
  50. m(108, 0, '<east|north|south|ne|se|sw|nw|upward|d 95% of the time'
  51. ' prints \'YOU HAVE CRAWLED AROUND IN SOME LITTLE HOLES AND WOUND'
  52. ' UP BACK IN THE\\nMAIN PASSAGE.\\n\'>')
  53. m(61, 2, '<south if not a dwarf moves to \'YOU ARE IN A MAZE OF\'>')
  54. m(15, 3, '<upward|pit|steps|dome|passage|east if carrying 50 moves'
  55. ' to \'THE DOME IS UNCLIMBA\'>')
  56. m(19, 6, '<sw if carrying or in room with 11 moves to '
  57. '"YOU CAN\'T GET BY THE">')
  58. m(17, 2, '<forward if prop 12 != 1 moves to "YOU DIDN\'T MAKE IT.">')
  59. def test_move_repr_works_on_all_moves(self):
  60. for room in self.data.rooms.values():
  61. for i, move in enumerate(room.travel_table):
  62. try:
  63. repr(move)
  64. except: # pragma: no cover
  65. print(room, i)
  66. raise
  67. def test_room_repr(self):
  68. self.assertRegex(repr(self.data.rooms[64]), '<room 64 at .*>')
  69. def test_object_repr(self):
  70. self.assertRegex(repr(self.data.objects['chest']),
  71. r'<Object 55 chest/box/treasure .*>')
  72. def test_word_repr(self):
  73. self.assertEqual(repr(self.data.vocabulary['eat']), '<Word eat>')