import unittest from crowbar_reference_compiler import compile_to_ssa, load_declarations, parse_header, parse_implementation, scan from crowbar_reference_compiler.declarations import ArrayType, BasicType, EnumDeclaration, PointerType, \ StructDeclaration, UnionDeclaration, VariableDeclaration class TestDeclarationLoading(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 = load_declarations(parse_tree, []) normal = StructDeclaration('normal', [ VariableDeclaration('fake', BasicType('bool'), None), VariableDeclaration('data', PointerType(ArrayType(BasicType('uint8'), 3)), None), ]) ope = StructDeclaration('ope', None) sample = EnumDeclaration('sample', [('Testing', None)]) robust = UnionDeclaration('robust', VariableDeclaration('tag', BasicType('enum sample'), None), [('Testing', VariableDeclaration('testPassed', BasicType('bool'), None))]) not_robust = UnionDeclaration('not_robust', None, [VariableDeclaration('sample', BasicType('int8'), None), VariableDeclaration('nope', BasicType('bool'), None)]) self.assertListEqual(decls, [normal, ope, sample, robust, not_robust]) if __name__ == '__main__': unittest.main()