test_possibilities.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import unittest
  2. from src.possibilities import MESSAGES, Possibility as P
  3. from tests.rulestestcase import tree
  4. from src.parser import Parser
  5. from tests.parser import ParserWrapper
  6. def dummy_handler(root, args): # pragma: nocover
  7. pass
  8. def dummy_handler_msg(root, args): # pragma: nocover
  9. pass
  10. MESSAGES[dummy_handler_msg] = 'foo {1} + {2} bar'
  11. class TestPossibilities(unittest.TestCase):
  12. def setUp(self):
  13. self.l1, self.l2 = self.n = tree('1 + 2')
  14. self.p0 = P(self.n, dummy_handler, (self.l1, self.l2))
  15. self.p1 = P(self.n, dummy_handler_msg, (self.l1, self.l2))
  16. def test___str__(self):
  17. self.assertEqual(str(self.p0),
  18. '<Possibility root="1 + 2" handler=dummy_handler args=(1, 2)>')
  19. self.assertEqual(str(self.p1), 'foo `1` + `2` bar')
  20. def test___repr__(self):
  21. self.assertEqual(repr(self.p0),
  22. '<Possibility root="1 + 2" handler=dummy_handler args=(1, 2)>')
  23. def test___eq__(self):
  24. assert self.p0 == P(self.n, dummy_handler, (self.l1, self.l2))
  25. assert self.p0 != self.p1
  26. def test_multiple_input(self):
  27. parser = ParserWrapper(Parser)
  28. parser.run(['1+2', '?', '3+4', '?'])
  29. possibilities = parser.parser.possibilities
  30. self.assertEqual('\n'.join([repr(pos) for pos in possibilities]),
  31. '<Possibility root="3 + 4" handler=add_numerics' \
  32. ' args=(<Scope of "3 + 4">, 3, 4)>')
  33. def test_multiple_runs(self):
  34. parser = ParserWrapper(Parser)
  35. parser.run(['1+2', '?'])
  36. possibilities = parser.parser.possibilities
  37. self.assertEqual('\n'.join([repr(pos) for pos in possibilities]),
  38. '<Possibility root="1 + 2" handler=add_numerics' \
  39. ' args=(<Scope of "1 + 2">, 1, 2)>')
  40. # Remove previous possibilities after second run() call.
  41. parser.run(['', ' '])
  42. possibilities = parser.parser.possibilities
  43. self.assertEqual(possibilities, None)
  44. # Overwrite previous possibilities with new ones
  45. parser.run(['3+4', '?'])
  46. possibilities = parser.parser.possibilities
  47. self.assertEqual('\n'.join([repr(pos) for pos in possibilities]),
  48. '<Possibility root="3 + 4" handler=add_numerics' \
  49. ' args=(<Scope of "3 + 4">, 3, 4)>')
  50. #def test_filter_duplicates(self):
  51. # a, b = ab = tree('a + b')
  52. # p0 = P(a, dummy_handler, (1, 2))
  53. # p1 = P(ab, dummy_handler, (1, 2))
  54. # p2 = P(ab, dummy_handler, (1, 2, 3))
  55. # p3 = P(ab, dummy_handler_msg, (1, 2))
  56. # self.assertEqual(filter_duplicates([]), [])
  57. # self.assertEqual(filter_duplicates([p0, p1]), [p1])
  58. # self.assertEqual(filter_duplicates([p1, p2]), [p1, p2])
  59. # self.assertEqual(filter_duplicates([p1, p3]), [p1, p3])
  60. # self.assertEqual(filter_duplicates([p0, p1, p2, p3]), [p1, p2, p3])
  61. # # Docstrings example
  62. # (l1, l2), l3 = left, l3 = right = tree('1 + 2 + 3')
  63. # p0 = P(left, add_numerics, (1, 2, 1, 2))
  64. # p1 = P(right, add_numerics, (1, 2, 1, 2))
  65. # p2 = P(right, add_numerics, (1, 3, 1, 3))
  66. # p3 = P(right, add_numerics, (2, 3, 2, 3))
  67. # self.assertEqual(filter_duplicates([p0, p1, p2, p3]), [p1, p2, p3])