test_parser.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. # vim: set fileencoding=utf-8 :
  2. import unittest
  3. from src.parser import Parser
  4. from src.node import ExpressionNode as Node, ExpressionLeaf as Leaf
  5. from tests.parser import ParserWrapper, run_expressions, line, graph
  6. class TestParser(unittest.TestCase):
  7. def test_constructor(self):
  8. node = Node('+', Leaf(1), Leaf(4))
  9. self.assertEqual(ParserWrapper(Parser).run(['1 + 4']), node)
  10. def test_identifiers(self):
  11. run_expressions(Parser, [('a', Leaf('a'))])
  12. def test_graph(self):
  13. assert graph(Parser, '4a') == ("""
  14. *
  15. ╭┴╮
  16. 4 a
  17. """).replace('\n ', '\n')[1:-1]
  18. def test_line(self):
  19. self.assertEqual(line(Parser, '4-a'), '4 - a')
  20. def test_reset_after_failure(self):
  21. parser = ParserWrapper(Parser)
  22. parser.run(['-(3a+6b)'])
  23. possibilities1 = parser.parser.possibilities
  24. self.assertNotEqual(possibilities1, [])
  25. parser.run(['5+2*6'])
  26. possibilities2 = parser.parser.possibilities
  27. self.assertNotEqual(possibilities2, [])
  28. self.assertNotEqual(possibilities1, possibilities2)