from __future__ import absolute_import import sys import unittest from unittest import TestCase from lark.tree import Tree from lark.tools import standalone try: from StringIO import StringIO except ImportError: from io import StringIO class TestStandalone(TestCase): def setUp(self): pass def _create_standalone(self, grammar): code_buf = StringIO() temp = sys.stdout sys.stdout = code_buf standalone.main(StringIO(grammar), 'start') sys.stdout = temp code = code_buf.getvalue() context = {} exec(code, context) return context def test_simple(self): grammar = """ start: NUMBER WORD %import common.NUMBER %import common.WORD %import common.WS %ignore WS """ context = self._create_standalone(grammar) _Lark = context['Lark_StandAlone'] l = _Lark() x = l.parse('12 elephants') self.assertEqual(x.children, ['12', 'elephants']) def test_contextual(self): grammar = """ start: a b a: "A" "B" b: "AB" """ context = self._create_standalone(grammar) _Lark = context['Lark_StandAlone'] l = _Lark() x = l.parse('ABAB') class T(context['Transformer']): def a(self, items): return 'a' def b(self, items): return 'b' start = list x = T().transform(x) self.assertEqual(x, ['a', 'b']) if __name__ == '__main__': unittest.main()