import unittest from ast_parser.ast_parser import AstParser class TestParseCode(unittest.TestCase): def test_parse_code(self): input = """ procedure main() returns integer { integer a = 1; a * 42 -> std_output; return 0; } """ parser = AstParser(input) parser.parse() self.assertIsNotNone(parser.xml) self.assertEqual(parser.xml.getroot().tag, "block") def test_unparse_variable_regular(self): input = '' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual(" a ", parser.input) def test_unparse_variable_declaration(self): input = '' parser = AstParser(input, True) parser.input = "" parser._variable_unparse(parser.xml, True) self.assertIsNotNone(parser.input) self.assertEqual("var integer a ", parser.input) def test_unparse_rhs_single(self): input = '' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual(" 1 ", parser.input) def test_unparse_declaration(self): input = '' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual("var integer a = 1 ;\n", parser.input) def test_unparse_stream(self): input = ' ' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual(" a * 42 -> std_output;\n", parser.input) def test_unparse_block(self): input = ' ' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual("{\n var integer a = 1 ;\n a * 42 -> std_output;\n return 0 ;\n}\n\n", parser.input) def test_unparse_operation_single(self): input = ' ' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual(" a * 42 ", parser.input) def test_unparse_return(self): input = ' ' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) self.assertEqual("return 0 ;\n", parser.input) def test_unparse_routine(self): input = '' parser = AstParser(input, True) parser.input = "" parser._unparse_node(parser.xml) self.assertIsNotNone(parser.input) i = ' ' * parser.indentation self.assertEqual("procedure main() returns integer {\n var integer a = 1 ;\n a * 42 -> std_output;\n return 0 ;\n}\n\n", parser.input) def test_unparse_code(self): with open("test.xml", "r") as input: parser = AstParser(input.read(), True) parser.unparse() self.assertIsNotNone(parser.input) with open("input.in", "r") as input: i = input.read() self.assertEqual(i, parser.input) if __name__ == "__main__": unittest.main()