194 lines
6.2 KiB
Python
194 lines
6.2 KiB
Python
import unittest
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from ast_generator.ast_generator import *
|
|
from ast_generator.gazprea_ast_grammar import *
|
|
|
|
|
|
class TestGeneration(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.ast_gen = AstGenerator(GAZPREA_TOP_LEVEL, json.loads("{}"))
|
|
|
|
def test_generate_literal(self):
|
|
out: ET.Element = self.ast_gen.generate_literal()
|
|
|
|
self.assertIsNotNone(out.get("type"))
|
|
|
|
def test_generate_variable(self):
|
|
out: ET.Element = self.ast_gen.generate_variable()
|
|
|
|
self.assertIsNotNone(out.get("type"))
|
|
self.assertIsNotNone(out.get("name"))
|
|
|
|
def test_generate_declaration(self):
|
|
out: ET.Element = self.ast_gen.generate_declaration()
|
|
|
|
self.assertIsNotNone(out.find("variable"))
|
|
self.assertIsNotNone(out.find("rhs"))
|
|
|
|
def test_generate_operation(self):
|
|
out: ET.Element = self.ast_gen.generate_operator()
|
|
|
|
self.assertIsNotNone(out.find("lhs"))
|
|
self.assertIsNotNone(out.find("rhs"))
|
|
|
|
def test_generate_stream(self):
|
|
out: ET.Element = self.ast_gen.generate_stream()
|
|
|
|
self.assertIsNotNone(out.get("type"))
|
|
|
|
def test_generate_routine(self):
|
|
out: ET.Element = self.ast_gen.generate_routine()
|
|
|
|
self.assertIsNotNone(out.find("block"))
|
|
|
|
def test_generate_block(self):
|
|
out: ET.Element = self.ast_gen.generate_block()
|
|
|
|
self.assertIsNotNone(out)
|
|
|
|
def test_generate_main(self):
|
|
out: ET.Element = self.ast_gen.generate_main_routine()
|
|
|
|
self.assertIsNotNone(out)
|
|
self.assertEqual("main", out.get("name"))
|
|
self.assertEqual("int", out.get("return_type"))
|
|
|
|
def test_generate_ast(self):
|
|
out: ET.Element = self.ast_gen.generate_ast()
|
|
|
|
self.assertIsNotNone(out)
|
|
|
|
has_main = False
|
|
for child in out:
|
|
if child.get("name") == "main":
|
|
has_main = True
|
|
break
|
|
|
|
self.assertTrue(has_main)
|
|
|
|
|
|
|
|
|
|
|
|
class TestRoutines(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.ast_gen = AstGenerator(GAZPREA_TOP_LEVEL, json.loads("{}"))
|
|
|
|
def test_populate_function(self):
|
|
with open("xml/routine_1.xml", 'r') as i:
|
|
input_elemnet = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_routine(input_elemnet, 'int', 'blahaj')
|
|
|
|
self.assertEqual('int', out.get("return_type"))
|
|
self.assertEqual('int', out.find("block").find("return").get("type"))
|
|
|
|
def test_generate_return(self):
|
|
out: ET.Element = self.ast_gen.generate_return("int")
|
|
|
|
self.assertEqual('int', out.get("type"))
|
|
|
|
def test_populate_typed_procedure(self):
|
|
with open("xml/routine_2.xml", 'r') as i:
|
|
input_elemnet = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_routine(input_elemnet, 'int', 'blahaj')
|
|
|
|
self.assertEqual('int', out.get("return_type"))
|
|
self.assertEqual('int', out.find("block").find("return").get("type"))
|
|
|
|
def test_populate_void_procedure(self):
|
|
with open("xml/routine_3.xml", 'r') as i:
|
|
input_elemnet = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_routine(input_elemnet, 'void', 'blahaj')
|
|
|
|
self.assertEqual('void', out.get("return_type"))
|
|
self.assertIsNone(out.find("block").find("return"))
|
|
|
|
def test_populate_void_procedure_with_return(self):
|
|
with open("xml/routine_2.xml", 'r') as i:
|
|
input_elemnet = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_routine(input_elemnet, 'void', 'blahaj')
|
|
|
|
self.assertEqual('void', out.get("return_type"))
|
|
self.assertIsNotNone(out.find("block").find("return").get("type"))
|
|
self.assertEqual('void', out.find("block").find("return").get("type"))
|
|
|
|
|
|
def test_populate_nonvoid_procedure_without_return(self):
|
|
with open("xml/routine_3.xml", 'r') as i:
|
|
input_elemnet = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_routine(input_elemnet, 'int', 'blahaj')
|
|
|
|
self.assertEqual('int', out.get("return_type"))
|
|
self.assertIsNotNone(out.find("block").find("return"))
|
|
self.assertEqual('int', out.find("block").find("return").get("type"))
|
|
|
|
|
|
|
|
|
|
# def test_populate_assignment(self):
|
|
# pass
|
|
#
|
|
# def test_populate_top_block(self):
|
|
# pass
|
|
|
|
|
|
# def test_populate_call(self):
|
|
# pass
|
|
|
|
|
|
|
|
|
|
class TestValues(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.ast_gen = AstGenerator(GAZPREA_TOP_LEVEL ,json.loads("{}"))
|
|
|
|
def test_populate_int(self):
|
|
with open("xml/literal_1.xml", 'r') as i:
|
|
input = i.read()
|
|
input_element = ET.fromstring(input)
|
|
out: ET.Element = self.ast_gen.populate_literal(input_element, "int", 42)
|
|
|
|
self.assertEqual("int", out.get("type"))
|
|
self.assertEqual("42", str(out.get("value")))
|
|
|
|
def test_populate_var(self):
|
|
with open("xml/variable_1.xml", 'r') as i:
|
|
input = i.read()
|
|
input_element = ET.fromstring(input)
|
|
out: ET.Element = self.ast_gen.populate_variable(input_element, "var", "float", "bean")
|
|
|
|
self.assertEqual("var", out.get("mut"))
|
|
self.assertEqual("float", out.get("type"))
|
|
self.assertEqual("bean", out.get("name"))
|
|
|
|
def test_populate_operator(self):
|
|
with open("xml/operator_1.xml", 'r') as i:
|
|
input = i.read()
|
|
input_element = ET.fromstring(input)
|
|
out: ET.Element = self.ast_gen.populate_operator(input_element, '*', 'int')
|
|
inner_var = out.find("type")
|
|
|
|
self.assertEqual("int", out.get("type"))
|
|
self.assertEqual("*", out.get("op"))
|
|
self.assertEqual("int", out.find("lhs").find("variable").get("type"))
|
|
self.assertEqual("int", out.find("rhs").find("literal").get("type"))
|
|
|
|
def test_populate_stream(self):
|
|
with open("xml/stream_1.xml", 'r') as i:
|
|
input_element = ET.fromstring(i.read())
|
|
out: ET.Element = self.ast_gen.populate_stream(input_element, "std_output")
|
|
|
|
self.assertEqual("std_output", out.get("type"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|