From 35979953a534bcdb2185de0a934e7937f319d687 Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Wed, 4 Nov 2020 19:24:09 -0700 Subject: switch from specific declarations to generic AST --- tests/test_ast.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/test_ast.py (limited to 'tests/test_ast.py') diff --git a/tests/test_ast.py b/tests/test_ast.py new file mode 100644 index 0000000..b2c592d --- /dev/null +++ b/tests/test_ast.py @@ -0,0 +1,54 @@ +import unittest + +from crowbar_reference_compiler import build_ast, parse_header, scan +from crowbar_reference_compiler.ast import ArrayType, BasicType, ConstantExpression, EnumDeclaration, HeaderFile, \ + PointerType, StructDeclaration, UnionDeclaration, VariableDeclaration, VariableExpression + + +class TestAST(unittest.TestCase): + def test_kitchen_sink(self): + code = r""" +struct normal { + bool fake; + (uint8[3])* data; +} + +opaque struct ope; + +enum sample { + Testing, +} + +union robust { + enum sample tag; + + switch (tag) { + case Testing: bool testPassed; + } +} + +fragile union not_robust { + int8 sample; + bool nope; +} +""" + tokens = scan(code) + parse_tree = parse_header(tokens) + decls = build_ast(parse_tree, []) + normal = StructDeclaration('normal', [ + VariableDeclaration('fake', BasicType('bool')), + VariableDeclaration('data', PointerType(ArrayType(BasicType('uint8'), ConstantExpression('3')))), + ]) + ope = StructDeclaration('ope', None) + sample = EnumDeclaration('sample', [('Testing', None)]) + robust = UnionDeclaration('robust', VariableDeclaration('tag', BasicType('enum sample')), + [(VariableExpression('Testing'), VariableDeclaration('testPassed', BasicType('bool')))]) + not_robust = UnionDeclaration('not_robust', None, [ + VariableDeclaration('sample', BasicType('int8')), + VariableDeclaration('nope', BasicType('bool')), + ]) + self.assertEqual(decls, HeaderFile([], [normal, ope, sample, robust, not_robust])) + + +if __name__ == '__main__': + unittest.main() -- cgit v1.2.3