import unittest
from ast_parser.gaz_unparser import AstParser
class TestParseCode(unittest.TestCase):
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.unparse_variable(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()