1274
1274
"\nfoobar\n^\nParse error at line 2, column 0:"
1275
1275
" expected the character 'a'. trail: []\n")
1278
class TreeTransformerTestCase(unittest.TestCase):
1280
def compile(self, grammar):
1282
Produce an object capable of parsing via this grammar.
1284
@param grammar: A string containing an OMeta grammar.
1286
from ometa.grammar import TreeTransformerGrammar
1287
from ometa.runtime import TreeTransformerBase
1288
g = TreeTransformerGrammar.makeGrammar(dedent(grammar), globals(), 'TestGrammar', superclass=TreeTransformerBase)
1291
def test_termForm(self):
1292
from terml.parser import parseTerm as term
1293
g = self.compile("Foo(:left :right) -> left.data + right.data")
1294
self.assertEqual(g.transform(term("Foo(1, 2)"))[0], 3)
1296
def test_termFormNest(self):
1297
from terml.parser import parseTerm as term
1298
g = self.compile("Foo(:left Baz(:right)) -> left.data + right.data")
1299
self.assertEqual(g.transform(term("Foo(1, Baz(2))"))[0], 3)
1301
def test_listForm(self):
1302
from terml.parser import parseTerm as term
1303
g = self.compile("Foo(:left [:first :second]) -> left.data + first.data + second.data")
1304
self.assertEqual(g.transform(term("Foo(1, [2, 3])"))[0], 6)
1306
def test_subTransform(self):
1307
from terml.parser import parseTerm as term
1308
g = self.compile("""
1309
Foo(:left @right) -> left.data + right
1310
Baz(:front :back) -> front.data * back.data
1312
self.assertEqual(g.transform(term("Foo(1, Baz(2, 3))"))[0], 7)
1315
def test_defaultExpand(self):
1316
from terml.parser import parseTerm as term
1317
g = self.compile("""
1318
Foo(:left @right) -> left.data + right
1319
Baz(:front :back) -> front.data * back.data
1321
self.assertEqual(g.transform(term("Blee(Foo(1, 2), Baz(2, 3))"))[0],
1277
1324
class ErrorReportingTests(unittest.TestCase):