import unittest import sys import os from utils import execute, kill, run_file, run_barebone bottom = [ "model", "instantiate_bottom", "1", "add_node", "1", "Element", "add_node", "1", "Class", "add_node", "1", "AttributeValue", "add_node", "1", "String", "add_value", "1", "name_value", "name", "add_edge", "1", "Association", "Class", "Class", "add_edge", "1", "Inheritance", "Element", "Element", "add_edge", "1", "Attribute", "Element", "AttributeValue", "add_edge", "1", "attr_name", "Attribute", "String", "add_edge", "1", "attr_name_name", "attr_name", "name_value", "add_edge", "1", "class_inh_element", "Class", "Element", "add_edge", "1", "attributevalue_inh_element", "AttributeValue", "Element", "add_edge", "1", "association_inh_class", "Association", "Class", "add_edge", "1", "attribute_inh_attributevalue", "Attribute", "AttributeValue", "retype_model", "1", "1", "retype", "1", "Element", "Class", "retype", "1", "Class", "Class", "retype", "1", "AttributeValue", "Class", "retype", "1", "String", "AttributeValue", "retype", "1", "name_value", "String", "retype", "1", "Association", "Association", "retype", "1", "Inheritance", "Association", "retype", "1", "Attribute", "Association", "retype", "1", "attr_name", "Attribute", "retype", "1", "attr_name_name", "attr_name", "retype", "1", "class_inh_element", "Inheritance", "retype", "1", "attributevalue_inh_element", "Inheritance", "retype", "1", "association_inh_class", "Inheritance", "retype", "1", "attribute_inh_attributevalue", "Inheritance", "instantiate_node", "1", "AttributeValue", "PrimitiveType", "instantiate_node", "1", "AttributeValue", "Natural", "instantiate_node", "1", "AttributeValue", "Boolean", "instantiate_link", "1", "Attribute", "attr_optional", "Attribute", "Boolean", "instantiate_attribute", "1", "attr_optional", "name", "optional", "instantiate_attribute", "1", "attr_optional", "optional", False, "instantiate_attribute", "1", "attr_name", "optional", False, "model_define_attribute", "1", "Class", "lower_cardinality", True, "Natural", "model_define_attribute", "1", "Class", "upper_cardinality", True, "Natural", "model_define_attribute", "1", "Class", "source_lower_cardinality", True, "Natural", "model_define_attribute", "1", "Class", "source_upper_cardinality", True, "Natural", "model_define_attribute", "1", "Class", "target_lower_cardinality", True, "Natural", "model_define_attribute", "1", "Class", "target_upper_cardinality", True, "Natural", "instantiate_link", "1", "Inheritance", "", "Natural", "PrimitiveType", "instantiate_link", "1", "Inheritance", "", "Boolean", "PrimitiveType", "instantiate_link", "1", "Inheritance", "", "String", "PrimitiveType", "export_node", "1", "models/SimpleClassDiagrams_new", "exit", ] action_language = [ "model", "instantiate_node", "1", "AttributeValue", "Action", "instantiate_link", "1", "Inheritance", "", "Action", "PrimitiveType", "instantiate_node", "1", "AttributeValue", "Statement", "instantiate_node", "1", "AttributeValue", "Expression", "instantiate_node", "1", "AttributeValue", "funcdef", "instantiate_node", "1", "AttributeValue", "param", "instantiate_node", "1", "AttributeValue", "if", "instantiate_node", "1", "AttributeValue", "break", "instantiate_node", "1", "AttributeValue", "while", "instantiate_node", "1", "AttributeValue", "continue", "instantiate_node", "1", "AttributeValue", "assign", "instantiate_node", "1", "AttributeValue", "return", "instantiate_node", "1", "AttributeValue", "output", "instantiate_node", "1", "AttributeValue", "declare", "instantiate_node", "1", "AttributeValue", "global", "instantiate_node", "1", "AttributeValue", "access", "instantiate_node", "1", "AttributeValue", "constant", "instantiate_node", "1", "AttributeValue", "input", "instantiate_node", "1", "AttributeValue", "resolve", "instantiate_node", "1", "AttributeValue", "call", "instantiate_link", "1", "Attribute", "dict_link", "Action", "PrimitiveType", "instantiate_attribute", "1", "dict_link", "name", "dictionary_link", "instantiate_attribute", "1", "dict_link", "optional", True, "model_define_attribute", "1", "dict_link", "name", False, "String", "instantiate_link", "1", "Inheritance", "", "Action", "Element", "instantiate_link", "1", "Inheritance", "", "funcdef", "Action", "instantiate_link", "1", "Inheritance", "", "param", "Action", "instantiate_link", "1", "Inheritance", "", "Statement", "Action", "instantiate_link", "1", "Inheritance", "", "Expression", "Action", "instantiate_link", "1", "Inheritance", "", "resolve", "Statement", "instantiate_link", "1", "Inheritance", "", "if", "Statement", "instantiate_link", "1", "Inheritance", "", "break", "Statement", "instantiate_link", "1", "Inheritance", "", "continue", "Statement", "instantiate_link", "1", "Inheritance", "", "global", "Statement", "instantiate_link", "1", "Inheritance", "", "while", "Statement", "instantiate_link", "1", "Inheritance", "", "assign", "Statement", "instantiate_link", "1", "Inheritance", "", "return", "Statement", "instantiate_link", "1", "Inheritance", "", "call", "Statement", "instantiate_link", "1", "Inheritance", "", "declare", "Statement", "instantiate_link", "1", "Inheritance", "", "call", "Expression", "instantiate_link", "1", "Inheritance", "", "access", "Expression", "instantiate_link", "1", "Inheritance", "", "constant", "Expression", "instantiate_link", "1", "Inheritance", "", "input", "Expression", "model_define_attribute", "1", "Statement", "next", True, "Statement", "model_define_attribute", "1", "if", "cond", False, "Expression", "model_define_attribute", "1", "if", "true", False, "Statement", "model_define_attribute", "1", "if", "false", True, "Statement", "model_define_attribute", "1", "while", "cond", False, "Expression", "model_define_attribute", "1", "while", "body", False, "Statement", "model_define_attribute", "1", "assign", "var", False, "resolve", "model_define_attribute", "1", "assign", "value", False, "Expression", "model_define_attribute", "1", "break", "while", False, "while", "model_define_attribute", "1", "continue", "while", False, "while", "model_define_attribute", "1", "return", "value", True, "Expression", "model_define_attribute", "1", "resolve", "var", False, "String", "model_define_attribute", "1", "access", "var", False, "resolve", "model_define_attribute", "1", "constant", "node", False, "PrimitiveType", "model_define_attribute", "1", "output", "node", False, "Expression", "model_define_attribute", "1", "global", "var", False, "String", "model_define_attribute", "1", "param", "name", False, "String", "model_define_attribute", "1", "param", "value", False, "Expression", "model_define_attribute", "1", "param", "next_param", True, "param", "model_define_attribute", "1", "funcdef", "body", False, "Statement", "model_define_attribute", "1", "call", "func", False, "Expression", "model_define_attribute", "1", "call", "params", True, "param", "model_define_attribute", "1", "call", "last_param", True, "param", "instantiate_link", "1", "Inheritance", "", "Statement_next", "dict_link", "instantiate_link", "1", "Inheritance", "", "if_cond", "dict_link", "instantiate_link", "1", "Inheritance", "", "if_true", "dict_link", "instantiate_link", "1", "Inheritance", "", "if_false", "dict_link", "instantiate_link", "1", "Inheritance", "", "while_cond", "dict_link", "instantiate_link", "1", "Inheritance", "", "while_body", "dict_link", "instantiate_link", "1", "Inheritance", "", "assign_var", "dict_link", "instantiate_link", "1", "Inheritance", "", "assign_value", "dict_link", "instantiate_link", "1", "Inheritance", "", "break_while", "dict_link", "instantiate_link", "1", "Inheritance", "", "continue_while", "dict_link", "instantiate_link", "1", "Inheritance", "", "return_value", "dict_link", "instantiate_link", "1", "Inheritance", "", "resolve_var", "dict_link", "instantiate_link", "1", "Inheritance", "", "access_var", "dict_link", "instantiate_link", "1", "Inheritance", "", "constant_node", "dict_link", "instantiate_link", "1", "Inheritance", "", "output_node", "dict_link", "instantiate_link", "1", "Inheritance", "", "global_var", "dict_link", "instantiate_link", "1", "Inheritance", "", "param_name", "dict_link", "instantiate_link", "1", "Inheritance", "", "param_value", "dict_link", "instantiate_link", "1", "Inheritance", "", "param_next_param", "dict_link", "instantiate_link", "1", "Inheritance", "", "funcdef_body", "dict_link", "instantiate_link", "1", "Inheritance", "", "call_func", "dict_link", "instantiate_link", "1", "Inheritance", "", "call_params", "dict_link", "instantiate_link", "1", "Inheritance", "", "call_last_param", "dict_link", "model_define_attribute", "1", "Class", "constraint", True, "funcdef", "exit", ] bottom_attributes = [ "model", "exit", ] def add_constraints(model): return [ "model", "add_constraint", str(model), "Integer", "funcdef", "constraint", 2, str(model*100), str(model*100+1), "if", "call", "access", "resolve", "is_physical_int", 1, "call", "access", "resolve", "dict_read", 2, "call", "access", "resolve", "dict_read", 2, "access", "resolve", str(model*100), "const", "model", False, "access", "resolve", str(model*100+1), False, False, "return", True, "const", "OK", True, "return", True, "const", "Integer instance is not an integer.", False, False, "exit", ] instantiate_scd = [ "model", "instantiate_model", "1", "2", "instantiate_node", "2", "Class", "Place", "instantiate_node", "2", "Class", "Transition", "instantiate_node", "2", "Class", "Integer", "instantiate_link", "2", "Association", "P2T", "Place", "Transition", "instantiate_link", "2", "Association", "T2P", "Transition", "Place", "instantiate_link", "2", "Association", "Place_tokens", "Place", "Integer", "instantiate_attribute", "2", "Place_tokens", "name", "tokens", "instantiate_link", "2", "Association", "P2T_weight", "P2T", "Integer", "instantiate_attribute", "2", "P2T_weight", "name", "weight", "instantiate_link", "2", "Association", "T2P_weight", "T2P", "Integer", "instantiate_attribute", "2", "T2P_weight", "name", "weight", "export_node", "2", "models/PetriNets_new", "exit", ] instantiate_pn = [ "model", "instantiate_model", "2", "3", "instantiate_node", "3", "Place", "p1", "instantiate_node", "3", "Place", "p2", "instantiate_node", "3", "Transition", "t1", "instantiate_node", "3", "Transition", "t2", "instantiate_link", "3", "P2T", "p1_t1", "p1", "t1", "instantiate_link", "3", "T2P", "t1_p2", "t1", "p2", "instantiate_link", "3", "P2T", "p2_t2", "p2", "t2", "instantiate_link", "3", "T2P", "t2_p1", "t2", "p1", "instantiate_attribute", "3", "p1_t1", "weight", 1, "instantiate_attribute", "3", "t1_p2", "weight", 2, "instantiate_attribute", "3", "p2_t2", "weight", 3, "instantiate_attribute", "3", "t2_p1", "weight", 4, "instantiate_attribute", "3", "p1", "tokens", 5, "instantiate_attribute", "3", "p2", "tokens", 6, "export_node", "3", "models/PN_instance", "exit", ] instantiate_example = [ "model", "instantiate_model", "1", "2", "instantiate_node", "2", "Class", "A", "instantiate_node", "2", "Class", "B", "instantiate_node", "2", "Class", "C", "instantiate_link", "2", "Inheritance", "b_inherits_a", "B", "A", "instantiate_link", "2", "Association", "A_tokens", "A", "B", "instantiate_attribute", "2", "A_tokens", "name", "tokens", "instantiate_link", "2", "Association", "C_tokens", "C", "B", "instantiate_attribute", "2", "C_tokens", "name", "tokens", "export_node", "2", "models/example_MM", "exit", "model", "instantiate_model", "2", "3", "instantiate_node", "3", "A", "a", "instantiate_attribute", "3", "a", "tokens", "b", "instantiate_node", "3", "B", "b", "instantiate_node", "3", "C", "c", "instantiate_attribute", "3", "c", "tokens", "b", "export_node", "3", "models/example_M", "exit", ] def conformance_call(operation, model, metamodel): return [ "output", "call", "access", "resolve", str(operation), 3, "call", "access", "resolve", "import_node", 1, "const", "models/example_M", False, "const", str(model), "const", str(metamodel), False, True, ] is_direct_instance = \ conformance_call("is_direct_instance", "a", "A") + \ conformance_call("is_direct_instance", "b", "A") + \ conformance_call("is_direct_instance", "c", "A") + \ conformance_call("is_direct_instance", "a", "B") + \ conformance_call("is_direct_instance", "b", "B") + \ conformance_call("is_direct_instance", "c", "B") + \ conformance_call("is_direct_instance", "a", "C") + \ conformance_call("is_direct_instance", "b", "C") + \ conformance_call("is_direct_instance", "c", "C") is_nominal_instance = \ conformance_call("is_nominal_instance", "a", "A") + \ conformance_call("is_nominal_instance", "b", "A") + \ conformance_call("is_nominal_instance", "c", "A") + \ conformance_call("is_nominal_instance", "a", "B") + \ conformance_call("is_nominal_instance", "b", "B") + \ conformance_call("is_nominal_instance", "c", "B") + \ conformance_call("is_nominal_instance", "a", "C") + \ conformance_call("is_nominal_instance", "b", "C") + \ conformance_call("is_nominal_instance", "c", "C") def conformance_check(node): return [ "output", "call", "access", "resolve", "conformance_scd", 1, "call", "access", "resolve", "import_node", 1, "const", str(node), False, False, True, ] class TestConstructorsModels(unittest.TestCase): def test_constructors_instantiate_bottom(self): commands = bottom + bottom_attributes + conformance_check("models/SimpleClassDiagrams_new") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_action_language(self): commands = bottom + action_language + bottom_attributes + conformance_check("models/SimpleClassDiagrams_new") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_constraints(self): commands = bottom + action_language + bottom_attributes + add_constraints(1) + conformance_check("models/SimpleClassDiagrams_new") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_constraints_executed(self): commands = bottom + action_language + bottom_attributes + add_constraints(1) + instantiate_scd + add_constraints(2) + instantiate_pn + conformance_check("models/PN_instance") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_instantiate_scd(self): commands = bottom + bottom_attributes + instantiate_scd + conformance_check("models/PetriNets_new") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_instantiate_pn(self): commands = bottom + bottom_attributes + instantiate_scd + instantiate_pn + conformance_check("models/PN_instance") + ["return", False] self.assertTrue(run_barebone(commands, ["OK"], 1)) def test_constructors_instantiate_example(self): commands = bottom + bottom_attributes + instantiate_example + conformance_check("models/example_MM") + conformance_check("models/example_M") + ["return", False] self.assertTrue(run_barebone(commands, ["OK", "OK"], 1)) def test_constructors_is_direct_instance(self): commands = bottom + bottom_attributes + instantiate_example + is_direct_instance + ["return", False] expected = [True, False, False, False, True, False, False, False, True] self.assertTrue(run_barebone(commands, expected, 1)) def test_constructors_is_nominal_instance(self): commands = bottom + bottom_attributes + instantiate_example + is_nominal_instance + ["return", False] expected = [True, True, False, False, True, False, False, False, True] self.assertTrue(run_barebone(commands, expected, 1))