From d2cd30055077263e0432fee48a87181fd36a43a4 Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Thu, 25 Mar 2021 11:48:27 -0500 Subject: [PATCH] Added test for cache + inline-transformer --- tests/test_cache.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/test_cache.py b/tests/test_cache.py index 4a07d7a..61af293 100644 --- a/tests/test_cache.py +++ b/tests/test_cache.py @@ -3,7 +3,7 @@ from __future__ import absolute_import import sys from unittest import TestCase, main -from lark import Lark, Tree +from lark import Lark, Tree, Transformer from lark.lexer import Lexer, Token import lark.lark as lark_module @@ -14,6 +14,13 @@ except ImportError: import tempfile, os +class TestT(Transformer): + def add(self, children): + return sum(children if isinstance(children, list) else children.children) + + def NUM(self, token): + return int(token) + class MockFile(StringIO): def close(self): @@ -92,6 +99,25 @@ class TestCache(TestCase): Lark(g, parser="lalr", debug=True, cache=True) parser = Lark(g, parser="lalr", debug=True, cache=True) assert parser.options.options['debug'] + + # Test inline transformer (tree-less) + mock_fs.files = {} + g = """ + start: add+ + add: NUM "+" NUM + NUM: /\d+/ + %ignore " " + """ + text = "1+2 3+4" + expected = Tree('start', [3, 7]) + + parser = Lark(g, parser='lalr', transformer=TestT(), cache=True) + parser = Lark(g, parser='lalr', transformer=TestT(), cache=True) + assert len(mock_fs.files) == 1 + res1 = parser.parse(text) + res2 = TestT().transform( Lark(g, parser="lalr", cache=True).parse(text) ) + assert res1 == res2 + finally: lark_module.FS = fs