This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.5 KiB

  1. from __future__ import absolute_import
  2. import unittest
  3. from unittest import TestCase
  4. import copy
  5. import pickle
  6. from lark.tree import Tree
  7. from lark.transformers import Interpreter, visit_children_decor
  8. class TestTrees(TestCase):
  9. def setUp(self):
  10. self.tree1 = Tree('a', [Tree(x, y) for x, y in zip('bcd', 'xyz')])
  11. def test_deepcopy(self):
  12. assert self.tree1 == copy.deepcopy(self.tree1)
  13. def test_pickle(self):
  14. s = copy.deepcopy(self.tree1)
  15. data = pickle.dumps(s)
  16. assert pickle.loads(data) == s
  17. def test_interp(self):
  18. t = Tree('a', [Tree('b', []), Tree('c', []), 'd'])
  19. class Interp1(Interpreter):
  20. def a(self, tree):
  21. return self.visit_children(tree) + ['e']
  22. def b(self, tree):
  23. return 'B'
  24. def c(self, tree):
  25. return 'C'
  26. self.assertEqual(Interp1().visit(t), list('BCde'))
  27. class Interp2(Interpreter):
  28. @visit_children_decor
  29. def a(self, values):
  30. return values + ['e']
  31. def b(self, tree):
  32. return 'B'
  33. def c(self, tree):
  34. return 'C'
  35. self.assertEqual(Interp2().visit(t), list('BCde'))
  36. class Interp3(Interpreter):
  37. def b(self, tree):
  38. return 'B'
  39. def c(self, tree):
  40. return 'C'
  41. self.assertEqual(Interp3().visit(t), list('BCd'))
  42. if __name__ == '__main__':
  43. unittest.main()