lark/tests/test_trees.py

67 lines
1.5 KiB
Python
Raw Normal View History

from __future__ import absolute_import
2018-02-18 15:28:47 +00:00
import unittest
from unittest import TestCase
import copy
import pickle
2018-05-12 20:39:23 +00:00
from lark.tree import Tree
from lark.transformers import Interpreter, visit_children_decor
class TestTrees(TestCase):
def setUp(self):
self.tree1 = Tree('a', [Tree(x, y) for x, y in zip('bcd', 'xyz')])
def test_deepcopy(self):
assert self.tree1 == copy.deepcopy(self.tree1)
def test_pickle(self):
s = copy.deepcopy(self.tree1)
data = pickle.dumps(s)
assert pickle.loads(data) == s
def test_interp(self):
t = Tree('a', [Tree('b', []), Tree('c', []), 'd'])
class Interp1(Interpreter):
def a(self, tree):
return self.visit_children(tree) + ['e']
def b(self, tree):
return 'B'
def c(self, tree):
return 'C'
self.assertEqual(Interp1().visit(t), list('BCde'))
class Interp2(Interpreter):
@visit_children_decor
def a(self, values):
return values + ['e']
def b(self, tree):
return 'B'
def c(self, tree):
return 'C'
self.assertEqual(Interp2().visit(t), list('BCde'))
class Interp3(Interpreter):
def b(self, tree):
return 'B'
def c(self, tree):
return 'C'
self.assertEqual(Interp3().visit(t), list('BCd'))
if __name__ == '__main__':
unittest.main()