import unittest import sys import os from utils import execute, kill, run_file, run_barebone def flatten(lst): new_lst = [] for f in lst: if isinstance(f, (list, tuple)): new_lst.extend(flatten(f)) else: new_lst.append(f) return new_lst class TestConstructorsModels(unittest.TestCase): def test_constructors_instantiate_bottom(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"output"', '"const"', '3', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['3'], 1)) def test_constructors_instantiate_model(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"Place"', 'true', '"tokens"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"Transition"', 'false', 'false', 'true', '"Association"', '"P2T"', '"Place"', '"Transition"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'true', '"Association"', '"T2P"', '"Transition"', '"Place"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"Place"', '"p1"', 'false', 'true', '"tokens"', '5', 'false', 'true', '"Transition"', '"t1"', 'false', 'false', 'true', '"P2T"', '""', '"p1"', '"t1"', 'false', 'true', '"weight"', '1', 'false', 'true', '"T2P"', '""', '"t1"', '"p1"', 'false', 'true', '"weight"', '2', 'false', 'false', 3, '"output"', '"const"', '3', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['3'], 1)) def test_constructors_retype_model(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"output"', '"const"', '3', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['3'], 1)) def test_constructors_instantiate_model_inheritance(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"A"', 'true', '"a"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"B"', 'true', '"b"', '{"value": "Integer"}', 'false', 'false', 'true', '"Inheritance"', '"b_inherits_from_a"', '"B"', '"A"', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"A"', '"a1"', 'false', 'true', '"a"', '1', 'false', 'true', '"B"', '"b1"', 'false', 'true', '"a"', '2', 'true', '"b"', '3', 'false', 'false', 3, '"output"', '"const"', '3', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['3'], 1)) def test_constructors_conformance_metametamodel(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh_2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"output"', '"call"', '"access"', '"resolve"', '"conformance_scd"', '1', '"const"', 1, 'false', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['OK'], 1)) def test_constructors_conformance_metamodel(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"Place"', 'true', '"tokens"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"Transition"', 'false', 'false', 'true', '"Association"', '"P2T"', '"Place"', '"Transition"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'true', '"Association"', '"T2P"', '"Transition"', '"Place"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'false', 2, '"output"', '"call"', '"access"', '"resolve"', '"conformance_scd"', '1', '"const"', 2, 'false', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['OK'], 1)) def test_constructors_conformance_model(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"Place"', 'true', '"tokens"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"Transition"', 'false', 'false', 'true', '"Association"', '"P2T"', '"Place"', '"Transition"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'true', '"Association"', '"T2P"', '"Transition"', '"Place"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"Place"', '"p1"', 'false', 'true', '"tokens"', '5', 'false', 'true', '"Transition"', '"t1"', 'false', 'false', 'true', '"P2T"', '""', '"p1"', '"t1"', 'false', 'true', '"weight"', '1', 'false', 'true', '"T2P"', '""', '"t1"', '"p1"', 'false', 'true', '"weight"', '2', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"conformance_scd"', '1', '"const"', 3, 'false', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['OK'], 1)) def test_constructors_is_direct_instance(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"A"', 'true', '"a"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"B"', 'true', '"b"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"C"', 'true', '"b"', '{"value": "Integer"}', 'true', '"c"', '{"value": "Integer"}', 'false', 'false', 'true', '"Inheritance"', '"__inh_1"', '"A"', '"B"', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"A"', '"a"', 'false', 'true', '"a"', '1', 'true', '"b"', '1', 'false', 'true', '"B"', '"b"', 'false', 'true', '"b"', '1', 'false', 'true', '"C"', '"c"', 'false', 'true', '"b"', '1', 'true', '"c"', '1', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_direct_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"return"', 'true', '"const"', 'true', ] # Test in order: # a : A --> Yes # a : B --> No # a : C --> No # b : A --> No # b : B --> Yes # b : C --> No # c : A --> No # c : B --> No # c : C --> Yes self.assertTrue(run_barebone(flatten(commands), ['True', 'False', 'False', 'False', 'True', 'False', 'False', 'False', 'True'], 1)) def test_constructors_is_nominal_instance(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"A"', 'true', '"a"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"B"', 'true', '"b"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"C"', 'true', '"b"', '{"value": "Integer"}', 'true', '"c"', '{"value": "Integer"}', 'false', 'false', 'true', '"Inheritance"', '"__inh_1"', '"A"', '"B"', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"A"', '"a"', 'false', 'true', '"a"', '1', 'true', '"b"', '1', 'false', 'true', '"B"', '"b"', 'false', 'true', '"b"', '1', 'false', 'true', '"C"', '"c"', 'false', 'true', '"b"', '1', 'true', '"c"', '1', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_nominal_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"return"', 'true', '"const"', 'true', ] # Test in order: # a : A --> Yes # a : B --> Yes # a : C --> No # b : A --> No # b : B --> Yes # b : C --> No # c : A --> No # c : B --> No # c : C --> Yes self.assertTrue(run_barebone(flatten(commands), ['True', 'True', 'False', 'False', 'True', 'False', 'False', 'False', 'True'], 1)) def test_constructors_is_structural_instance(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"A"', 'true', '"a"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"B"', 'true', '"b"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"C"', 'true', '"b"', '{"value": "Integer"}', 'true', '"c"', '{"value": "Integer"}', 'false', 'false', 'true', '"Inheritance"', '"__inh_1"', '"A"', '"B"', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"A"', '"a"', 'false', 'true', '"a"', '1', 'false', 'true', '"B"', '"b"', 'false', 'true', '"b"', '1', 'false', 'true', '"C"', '"c"', 'false', 'true', '"b"', '1', 'true', '"c"', '1', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"a"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"b"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"A"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"B"', 'false', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"is_structural_instance"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 3, '"const"', '"model"', 'false', '"const"', '"c"', 'false', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"call"', '"access"', '"resolve"', '"dict_read"', '2', '"const"', 2, '"const"', '"model"', 'false', '"const"', '"C"', 'false', 'false', 'true', '"return"', 'true', '"const"', 'true', ] # Test in order: # a : A --> Yes # a : B --> No # a : C --> No # b : A --> No # b : B --> Yes # b : C --> No # c : A --> No # c : B --> Yes # c : C --> Yes self.assertTrue(run_barebone(flatten(commands), ['True', 'False', 'False', 'False', 'True', 'False', 'False', 'True', 'True'], 1)) def test_constructors_readAttribute(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"Place"', 'true', '"tokens"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"Transition"', 'false', 'false', 'true', '"Association"', '"P2T"', '"Place"', '"Transition"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'true', '"Association"', '"T2P"', '"Transition"', '"Place"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"Place"', '"p1"', 'false', 'true', '"tokens"', '5', 'false', 'true', '"Transition"', '"t1"', 'false', 'false', 'true', '"P2T"', '"arc1"', '"p1"', '"t1"', 'false', 'true', '"weight"', '1', 'false', 'true', '"T2P"', '"arc2"', '"t1"', '"p1"', 'false', 'true', '"weight"', '2', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"p1"', 'false', '"const"', '"tokens"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc1"', 'false', '"const"', '"weight"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc2"', 'false', '"const"', '"weight"', 'false', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['5', '1', '2'], 1)) def test_constructors_readAndSetAttribute(self): commands = ['"instantiate_bottom"', '"node"', '"Class"', 'true', '"value"', '"Type"', '{"value": "Type"}', 'true', '"value"', '"__String"', '{"value": "String"}', 'true', '"value"', '"__name"', '"name"', 'true', '"edge"', '"Attribute"', '"Class"', '"Type"', 'true', '"edge"', '"__Name"', '"Attribute"', '"__String"', 'true', '"edge"', '"Association"', '"Class"', '"Class"', 'true', '"edge"', '"Inheritance"', '"Class"', '"Class"', 'true', '"edge"', '"__name_edge"', '"__Name"', '"__name"', 'true', '"edge"', '"__inh_1"', '"Association"', '"Class"', 'true', '"edge"', '"__inh_2"', '"Attribute"', '"Class"', 'true', '"value"', '"__attribute"', '"attribute"', 'true', '"edge"', '"__attribute_edge"', '"Attribute"', '"__attribute"', 'false', 1, '"retype_model"', 1, 1, 1, '"Inheritance"', 'true', '"Class"', '"Class"', 'true', '"Type"', '"Type"', 'true', '"__String"', '"Type"', 'true', '"Attribute"', '"Attribute"', 'true', '"__Name"', '"Attribute"', 'true', '"Association"', '"Association"', 'true', '"Inheritance"', '"Association"', 'true', '"__inh_1"', '"Inheritance"', 'true', '"__inh2"', '"Inheritance"', 'true', '"__name"', '"__String"', 'true', '"__name_edge"', '"__Name"', 'true', '"__attribute"', '"__String"', 'true', '"__attribute_edge"', '"__Name"', 'false', '"instantiate_model"', 1, 1, '"Inheritance"', '"Class"', '"Place"', 'true', '"tokens"', '{"value": "Integer"}', 'false', 'false', 'true', '"Class"', '"Transition"', 'false', 'false', 'true', '"Association"', '"P2T"', '"Place"', '"Transition"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'true', '"Association"', '"T2P"', '"Transition"', '"Place"', 'true', '"weight"', '{"value": "Integer"}', 'false', 'false', 'false', 2, '"instantiate_model"', 2, 1, '"Inheritance"', '"Place"', '"p1"', 'false', 'true', '"tokens"', '5', 'false', 'true', '"Transition"', '"t1"', 'false', 'false', 'true', '"P2T"', '"arc1"', '"p1"', '"t1"', 'false', 'true', '"weight"', '1', 'false', 'true', '"T2P"', '"arc2"', '"t1"', '"p1"', 'false', 'true', '"weight"', '2', 'false', 'false', 3, '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"p1"', 'false', '"const"', '"tokens"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc1"', 'false', '"const"', '"weight"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc2"', 'false', '"const"', '"weight"', 'false', 'true', '"call"', '"access"', '"resolve"', '"setAttribute"', '4', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"p1"', 'false', '"const"', '"tokens"', '"const"', '10', 'true', '"call"', '"access"', '"resolve"', '"setAttribute"', '4', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc1"', 'false', '"const"', '"weight"', '"const"', '16', 'true', '"call"', '"access"', '"resolve"', '"setAttribute"', '4', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc2"', 'false', '"const"', '"weight"', '"const"', '30', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"p1"', 'false', '"const"', '"tokens"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc1"', 'false', '"const"', '"weight"', 'false', 'true', '"output"', '"call"', '"access"', '"resolve"', '"readAttribute"', '3', '"const"', 3, '"call"', '"access"', '"resolve"', '"readElementByName"', '2', '"const"', 3, '"const"', '"arc2"', 'false', '"const"', '"weight"', 'false', 'true', '"return"', 'true', '"const"', 'true', ] self.assertTrue(run_barebone(flatten(commands), ['5', '1', '2', '10', '16', '30'], 1))