rulestestcase.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import unittest
  2. from src.node import ExpressionNode
  3. from src.parser import Parser
  4. from tests.parser import ParserWrapper
  5. def tree(exp, **kwargs):
  6. return ParserWrapper(Parser, **kwargs).run([exp])
  7. class RulesTestCase(unittest.TestCase):
  8. def assertEqualPos(self, possibilities, expected):
  9. self.assertEqual(len(possibilities), len(expected))
  10. for p, e in zip(possibilities, expected):
  11. self.assertEqual(p.root, e.root)
  12. if p.args == None: # pragma: nocover
  13. self.assertIsNone(e.args)
  14. elif e.args == None: # pragma: nocover
  15. self.assertIsNone(p.args)
  16. else:
  17. for pair in zip(p.args, e.args):
  18. self.assertEqual(*pair)
  19. self.assertEqual(p, e)
  20. def assertEqualNodes(self, a, b):
  21. if not isinstance(a, ExpressionNode):
  22. return self.assertEqual(a, b)
  23. self.assertIsInstance(b, ExpressionNode)
  24. self.assertEqual(a.op, b.op)
  25. for ca, cb in zip(a, b):
  26. self.assertEqualNodes(ca, cb)