test_mvc.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. import unittest
  2. from utils import *
  3. import sys
  4. sys.path.append("wrappers")
  5. from modelverse import *
  6. expected_model_list = set([("SimpleClassDiagrams", "SimpleClassDiagrams"),
  7. ("CoreFormalism", "SimpleClassDiagrams"),
  8. ("ManualOperation", "SimpleClassDiagrams"),
  9. ("ActionLanguage", "SimpleClassDiagrams"),
  10. ("ProcessModel", "SimpleClassDiagrams"),
  11. ("Tracability", "SimpleClassDiagrams"),
  12. ("core", "CoreFormalism")])
  13. expected_model_full_list = set([("SimpleClassDiagrams", "SimpleClassDiagrams", "admin", "admin", "221"),
  14. ("CoreFormalism", "SimpleClassDiagrams", "admin", "admin", "221"),
  15. ("ManualOperation", "SimpleClassDiagrams", "admin", "admin", "221"),
  16. ("ActionLanguage", "SimpleClassDiagrams", "admin", "admin", "221"),
  17. ("ProcessModel", "SimpleClassDiagrams", "admin", "admin", "221"),
  18. ("Tracability", "SimpleClassDiagrams", "admin", "admin", "221"),
  19. ("core", "CoreFormalism", "admin", "admin", "200")])
  20. class TestModelverseCore(unittest.TestCase):
  21. @classmethod
  22. def setup_class(self):
  23. self.proc, self.address = start_mvc()
  24. init(self.address)
  25. login("admin", "admin")
  26. @classmethod
  27. def teardown_class(self):
  28. kill(self.proc)
  29. def test_list(self):
  30. assert model_list() == expected_model_list
  31. def test_list_full(self):
  32. assert model_list_full() == expected_model_full_list
  33. def test_model_add_empty(self):
  34. model_add("Empty", "SimpleClassDiagrams")
  35. assert model_list() == set(list(expected_model_list) + [("Empty", "SimpleClassDiagrams")])
  36. assert model_list_full() == set(list(expected_model_full_list) + [("Empty", "SimpleClassDiagrams", "admin", "nobody", "200")])
  37. def test_model_empty_instantiate(self):
  38. model_add("Empty", "SimpleClassDiagrams")
  39. assert model_list() == set(list(expected_model_list) + [("Empty", "SimpleClassDiagrams")])
  40. assert model_list_full() == set(list(expected_model_full_list) + [("Empty", "SimpleClassDiagrams", "admin", "nobody", "200")])
  41. assert element_list("Empty") == set([])
  42. instantiate("Empty", "Class", ID="A")
  43. assert element_list("Empty") == set([("A", "Class")])
  44. assert model_list() == set(list(expected_model_list) + [("Empty", "SimpleClassDiagrams")])
  45. assert model_list_full() == set(list(expected_model_full_list) + [("Empty", "SimpleClassDiagrams", "admin", "nobody", "200")])
  46. def test_model_overwrite(self):
  47. model_add("Empty", "SimpleClassDiagrams")
  48. assert model_list() == set(list(expected_model_list) + [("Empty", "SimpleClassDiagrams")])
  49. assert model_list_full() == set(list(expected_model_full_list) + [("Empty", "SimpleClassDiagrams", "admin", "nobody", "200")])
  50. assert element_list("Empty") == set([])
  51. instantiate("Empty", "Class", ID="A")
  52. assert element_list("Empty") == set([("A", "Class")])
  53. model_overwrite("Empty")
  54. assert element_list("Empty") == set([])
  55. assert model_list() == set(list(expected_model_list) + [("Empty", "SimpleClassDiagrams")])
  56. assert model_list_full() == set(list(expected_model_full_list) + [("Empty", "SimpleClassDiagrams", "admin", "nobody", "200")])
  57. instantiate("Empty", "Class", ID="B")
  58. assert element_list("Empty") == set([("B", "Class")])
  59. def test_transform_add_MT_language(self):
  60. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/petrinets.mvc", "r").read())
  61. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams")])
  62. transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
  63. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  64. ("PetriNet_RAM", "SimpleClassDiagrams"),
  65. ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
  66. def test_transform_add_MT_instance(self):
  67. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/petrinets.mvc", "r").read())
  68. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams")])
  69. transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
  70. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  71. ("PetriNet_RAM", "SimpleClassDiagrams"),
  72. ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
  73. transformation_add_MT("PetriNet_RAM", ["PetriNet"], [], "print_pn", open("integration/code/pn_print.mvc").read())
  74. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  75. ("PetriNet_RAM", "SimpleClassDiagrams"),
  76. ("__merged_PetriNet_RAM", "SimpleClassDiagrams"),
  77. ("print_pn", "PetriNet_RAM")])
  78. assert transformation_list() == set([("ModelTransformation", "print_pn")])
  79. def test_transform_add_MT_pn_print_exec(self):
  80. log = []
  81. def callback(value):
  82. log.append(value)
  83. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_runtime.mvc", "r").read())
  84. model_add("my_pn", "PetriNet", open("integration/code/pn_runtime_model.mvc", "r").read())
  85. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  86. ("my_pn", "PetriNet")])
  87. transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
  88. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  89. ("my_pn", "PetriNet"),
  90. ("PetriNet_RAM", "SimpleClassDiagrams"),
  91. ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
  92. transformation_add_MT("PetriNet_RAM", ["PetriNet"], [], "print_pn", open("integration/code/pn_print.mvc").read())
  93. assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
  94. ("my_pn", "PetriNet"),
  95. ("PetriNet_RAM", "SimpleClassDiagrams"),
  96. ("__merged_PetriNet_RAM", "SimpleClassDiagrams"),
  97. ("print_pn", "PetriNet_RAM")])
  98. assert transformation_list() == set([("ModelTransformation", "print_pn")])
  99. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  100. assert set(log) == set(['"p1" --> 1',
  101. '"p2" --> 2',
  102. '"p3" --> 3'])
  103. def test_transform_add_MT_pn_simulate(self):
  104. """
  105. This method tests the execution of a somewhat realistic use of the Modelverse and its core functions, through the use of a simple Petri nets example.
  106. First, Petri net metamodels are created for both the design language and the runtime language.
  107. Both languages only differ marginally from each other, with the runtime language only adding information on the currently selected transition for execution.
  108. Afterwards, a trivial Petri net model is created in the design language.
  109. This part tests the domain-specific and meta-modelling concepts of the Modelverse.
  110. After all models are created, transformations are defined to map between both languages: from design to runtime, and vice versa.
  111. Additional transformations are created for in-place model simulation and the printing of a Petri net model.
  112. This tests the modification of models, through the use of model transformations.
  113. Due to the use of a separate design and runtime language, we test exogenous transformations.
  114. The simulation transformation takes a single step in the Petri net model, by firing one of the applicable transitions, and therefore tests endogenous transformations.
  115. """
  116. log = []
  117. def callback(value):
  118. log.append(value)
  119. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
  120. model_add("PetriNet_Runtime", "SimpleClassDiagrams", open("integration/code/pn_runtime.mvc", "r").read())
  121. model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
  122. transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
  123. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
  124. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
  125. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
  126. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
  127. transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
  128. transformation_add_MT("PetriNet_RAM", ["PetriNet"], [], "print_pn", open("integration/code/pn_print.mvc").read())
  129. transformation_add_MT("PetriNet_RAM", ["PetriNet"], ["PetriNet_Runtime"], "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read())
  130. transformation_add_MT("PetriNet_RAM", ["PetriNet_Runtime"], ["PetriNet_Runtime"], "pn_simulate", open("integration/code/pn_simulate.mvc").read())
  131. transformation_add_MT("PetriNet_RAM", ["PetriNet_Runtime"], ["PetriNet"], "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
  132. log = []
  133. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  134. assert set(log) == set(['"p1" --> 1',
  135. '"p2" --> 2',
  136. '"p3" --> 3'])
  137. assert transformation_execute_MT("pn_design_to_runtime", {"PetriNet": "my_pn"}, {"PetriNet_Runtime": "my_pn_RT"}) == True
  138. assert transformation_execute_MT("pn_simulate", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet_Runtime": "my_pn_RT"}) == True
  139. assert transformation_execute_MT("pn_runtime_to_design", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet": "my_pn"}) == True
  140. log = []
  141. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  142. assert set(log) == set(['"p1" --> 0',
  143. '"p2" --> 1',
  144. '"p3" --> 5'])
  145. def test_transform_add_AL_pn_simulate(self):
  146. log = []
  147. def callback(value):
  148. log.append(value)
  149. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
  150. model_add("PetriNet_Runtime", "SimpleClassDiagrams", open("integration/code/pn_runtime.mvc", "r").read())
  151. model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
  152. transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
  153. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
  154. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
  155. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
  156. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
  157. transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
  158. transformation_add_MT("PetriNet_RAM", ["PetriNet"], [], "print_pn", open("integration/code/pn_print.mvc").read())
  159. transformation_add_MT("PetriNet_RAM", ["PetriNet"], ["PetriNet_Runtime"], "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read())
  160. transformation_add_AL(["PetriNet_Runtime"], ["PetriNet_Runtime"], "pn_simulate", open("integration/code/pn_simulate.alc").read())
  161. transformation_add_MT("PetriNet_RAM", ["PetriNet_Runtime"], ["PetriNet"], "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
  162. log = []
  163. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  164. assert set(log) == set(['"p1" --> 1',
  165. '"p2" --> 2',
  166. '"p3" --> 3'])
  167. assert transformation_execute_MT("pn_design_to_runtime", {"PetriNet": "my_pn"}, {"PetriNet_Runtime": "my_pn_RT"}) == True
  168. assert transformation_execute_AL("pn_simulate", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet_Runtime": "my_pn_RT"}) == True
  169. assert transformation_execute_MT("pn_runtime_to_design", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet": "my_pn"}) == True
  170. log = []
  171. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  172. assert set(log) == set(['"p1" --> 0',
  173. '"p2" --> 1',
  174. '"p3" --> 5'])
  175. def test_transform_add_MANUAL_pn_simulate(self):
  176. log = []
  177. def callback(value):
  178. log.append(value)
  179. def manual_callback():
  180. p1 = instantiate(None, "PetriNet_Runtime/Place")
  181. attr_assign(None, p1, "tokens", 1)
  182. attr_assign(None, p1, "name", "p1")
  183. p2 = instantiate(None, "PetriNet_Runtime/Place")
  184. attr_assign(None, p2, "tokens", 2)
  185. attr_assign(None, p2, "name", "p2")
  186. p3 = instantiate(None, "PetriNet_Runtime/Place")
  187. attr_assign(None, p3, "tokens", 3)
  188. attr_assign(None, p3, "name", "p3")
  189. t1 = instantiate(None, "PetriNet_Runtime/Transition")
  190. attr_assign(None, t1, "name", "t1")
  191. attr_assign(None, t1, "executing", False)
  192. p2t1 = instantiate(None, "PetriNet_Runtime/P2T", (p1, t1))
  193. attr_assign(None, p2t1, "weight", 1)
  194. p2t2 = instantiate(None, "PetriNet_Runtime/P2T", (p2, t1))
  195. attr_assign(None, p2t2, "weight", 1)
  196. t2p1 = instantiate(None, "PetriNet_Runtime/T2P", (t1, p3))
  197. attr_assign(None, t2p1, "weight", 2)
  198. model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
  199. model_add("PetriNet_Runtime", "SimpleClassDiagrams", open("integration/code/pn_runtime.mvc", "r").read())
  200. model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
  201. transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
  202. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
  203. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
  204. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
  205. instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
  206. transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
  207. transformation_add_MT("PetriNet_RAM", ["PetriNet"], [], "print_pn", open("integration/code/pn_print.mvc").read())
  208. transformation_add_MANUAL(["PetriNet"], ["PetriNet_Runtime"], "pn_design_to_runtime")
  209. transformation_add_AL(["PetriNet_Runtime"], ["PetriNet_Runtime"], "pn_simulate", open("integration/code/pn_simulate.alc").read())
  210. transformation_add_MT("PetriNet_RAM", ["PetriNet_Runtime"], ["PetriNet"], "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
  211. log = []
  212. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  213. assert set(log) == set(['"p1" --> 1',
  214. '"p2" --> 2',
  215. '"p3" --> 3'])
  216. assert transformation_execute_MANUAL("pn_design_to_runtime", {"PetriNet": "my_pn"}, {"PetriNet_Runtime": "my_pn_RT"}, manual_callback) == True
  217. assert transformation_execute_AL("pn_simulate", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet_Runtime": "my_pn_RT"}) == True
  218. assert transformation_execute_MT("pn_runtime_to_design", {"PetriNet_Runtime": "my_pn_RT"}, {"PetriNet": "my_pn"}) == True
  219. log = []
  220. assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
  221. assert set(log) == set(['"p1" --> 0',
  222. '"p2" --> 1',
  223. '"p3" --> 5'])
  224. def test_process_model_trivial_pn(self):
  225. self.assertTrue(run_file(all_files,
  226. [ "admin", "admin", "admin",
  227. "model_add",
  228. "SimpleClassDiagrams",
  229. "PetriNet",
  230. ] + get_model_constructor(open("integration/code/pn_design.mvc", "r").read()) + [
  231. "model_add",
  232. "SimpleClassDiagrams",
  233. "ReachabilityGraph",
  234. ] + get_model_constructor(open("integration/code/reachability_graph.mvc", "r").read()) + [
  235. "model_list",
  236. "transformation_add_MT_language",
  237. "PetriNet",
  238. "",
  239. "PetriNet_RAM",
  240. "transformation_add_MT_language",
  241. "ReachabilityGraph",
  242. "",
  243. "ReachabilityGraph_RAM",
  244. "transformation_add_MT",
  245. "PetriNet_RAM",
  246. "",
  247. "PetriNet",
  248. "",
  249. "initialize_PN",
  250. ] + get_model_constructor(open("integration/code/initialize_PN.mvc", "r").read()) + [
  251. "transformation_add_MANUAL",
  252. "PetriNet",
  253. "",
  254. "PetriNet",
  255. "",
  256. "refine_PN",
  257. "transformation_add_AL",
  258. "PetriNet",
  259. "",
  260. "ReachabilityGraph",
  261. "",
  262. "reachability",
  263. ] + get_constructor(open("integration/code/reachability.alc", "r").read()) + [
  264. "transformation_add_MT",
  265. "ReachabilityGraph_RAM",
  266. "ReachabilityGraph",
  267. "",
  268. "",
  269. "reachability_print",
  270. ] + get_model_constructor(open("integration/code/reachabilitygraph_print.mvc", "r").read()) + [
  271. "model_add",
  272. "ProcessModel",
  273. "pn_reachability",
  274. ] + get_model_constructor(open("integration/code/pm_pn_reachability.mvc", "r").read()) + [
  275. "model_list",
  276. "process_execute",
  277. "pn_reachability",
  278. "my_",
  279. "instantiate",
  280. "PetriNet/Place",
  281. "p1",
  282. "attr_add",
  283. "p1",
  284. "name",
  285. "p1",
  286. "attr_add",
  287. "p1",
  288. "tokens",
  289. 1,
  290. "instantiate",
  291. "PetriNet/Transition",
  292. "t1",
  293. "attr_add",
  294. "t1",
  295. "name",
  296. "t1",
  297. "instantiate",
  298. "PetriNet/P2T",
  299. "p2t",
  300. "p1",
  301. "t1",
  302. "attr_add",
  303. "p2t",
  304. "weight",
  305. 1,
  306. "exit",
  307. "model_list",
  308. ],
  309. [ # bootup phase
  310. "Desired username for admin user?",
  311. "Desired password for admin user?",
  312. "Please repeat the password",
  313. "Passwords match!",
  314. "Welcome to the Model Management Interface v2.0!",
  315. "Use the 'help' command for a list of possible commands",
  316. "Ready for command...",
  317. # model_add
  318. "Creating new model!",
  319. "Model type?",
  320. "Model name?",
  321. "Waiting for model constructors...",
  322. "Model upload success!",
  323. "Ready for command...",
  324. # model_add
  325. "Creating new model!",
  326. "Model type?",
  327. "Model name?",
  328. "Waiting for model constructors...",
  329. "Model upload success!",
  330. "Ready for command...",
  331. # model_list
  332. set(model_list) |
  333. set([
  334. " PetriNet : SimpleClassDiagrams",
  335. " ReachabilityGraph : SimpleClassDiagrams",]),
  336. "Ready for command...",
  337. # transformation_add_MT_language
  338. "Formalisms to include (terminate with empty string)?",
  339. "Name of the RAMified transformation metamodel?",
  340. "Ready for command...",
  341. # transformation_add_MT_language
  342. "Formalisms to include (terminate with empty string)?",
  343. "Name of the RAMified transformation metamodel?",
  344. "Ready for command...",
  345. # transformation_add_MT
  346. "RAMified metamodel to use?",
  347. "Supported metamodels:",
  348. set([" PetriNet",]),
  349. "Which metamodels do you want to use as source for the operation (empty string to finish)?",
  350. "Which metamodels do you want to use as target for the operation (empty string to finish)?",
  351. "Name of new operation?",
  352. "Waiting for model constructors...",
  353. "Ready for command...",
  354. # transformation_add_MANUAL
  355. "Which metamodels do you want to use as source for the operation (empty string to finish)?",
  356. "Which metamodels do you want to use as target for the operation (empty string to finish)?",
  357. "Name of operation model?",
  358. "Ready for command...",
  359. # transformation_add_AL
  360. "Which metamodels do you want to use as source for the operation (empty string to finish)?",
  361. "Which metamodels do you want to use as target for the operation (empty string to finish)?",
  362. "Name of operation model?",
  363. "Waiting for model constructors...",
  364. "Ready for command...",
  365. # transformation_add_MT
  366. "RAMified metamodel to use?",
  367. "Supported metamodels:",
  368. set([" ReachabilityGraph",]),
  369. "Which metamodels do you want to use as source for the operation (empty string to finish)?",
  370. "Which metamodels do you want to use as target for the operation (empty string to finish)?",
  371. "Name of new operation?",
  372. "Waiting for model constructors...",
  373. "Ready for command...",
  374. # model_add
  375. "Creating new model!",
  376. "Model type?",
  377. "Model name?",
  378. "Waiting for model constructors...",
  379. "Model upload success!",
  380. "Ready for command...",
  381. # model_list
  382. set(model_list) |
  383. set([
  384. " PetriNet : SimpleClassDiagrams",
  385. " ReachabilityGraph : SimpleClassDiagrams",
  386. " initialize_PN : PetriNet_RAM",
  387. " refine_PN : ManualOperation",
  388. " reachability : ActionLanguage",
  389. " reachability_print : ReachabilityGraph_RAM",
  390. " pn_reachability : ProcessModel",
  391. " PetriNet_RAM : SimpleClassDiagrams",
  392. " ReachabilityGraph_RAM : SimpleClassDiagrams",
  393. " __merged_PetriNet_RAM : SimpleClassDiagrams",
  394. " __merged_ReachabilityGraph_RAM : SimpleClassDiagrams",
  395. " __merged_refine_PN : SimpleClassDiagrams",
  396. " __merged_reachability : SimpleClassDiagrams",
  397. ]),
  398. "Ready for command...",
  399. # process_execute
  400. "Which process model do you want to execute?",
  401. "Model prefix to use?",
  402. "Please perform manual operation \"refine_PN\"",
  403. "Model loaded, ready for commands!",
  404. "Mode: r/w",
  405. "Use 'help' command for a list of possible commands",
  406. "Please give your command.",
  407. # instantiate p1
  408. "Type to instantiate?",
  409. "Name of new element?",
  410. "Instantiation successful!",
  411. None,
  412. "Please give your command.",
  413. "Which element do you want to assign an attribute to?",
  414. "Which attribute do you wish to assign?",
  415. "Value of attribute?",
  416. "Added attribute!",
  417. "Please give your command.",
  418. "Which element do you want to assign an attribute to?",
  419. "Which attribute do you wish to assign?",
  420. "Value of attribute?",
  421. "Added attribute!",
  422. "Please give your command.",
  423. # instantiate t1
  424. "Type to instantiate?",
  425. "Name of new element?",
  426. "Instantiation successful!",
  427. None,
  428. "Please give your command.",
  429. "Which element do you want to assign an attribute to?",
  430. "Which attribute do you wish to assign?",
  431. "Value of attribute?",
  432. "Added attribute!",
  433. "Please give your command.",
  434. # instantiate p2t
  435. "Type to instantiate?",
  436. "Name of new element?",
  437. "Source name?",
  438. "Destination name?",
  439. "Instantiation successful!",
  440. None,
  441. "Please give your command.",
  442. "Which element do you want to assign an attribute to?",
  443. "Which attribute do you wish to assign?",
  444. "Value of attribute?",
  445. "Added attribute!",
  446. "Please give your command.",
  447. set(['"0": {"p1": 1, }',
  448. '"1": {"p1": 0, }',
  449. ]),
  450. set(['"0" --["t1"]--> "1"',
  451. ]),
  452. "Ready for command...",
  453. # model_list
  454. set(model_list) |
  455. set([
  456. " PetriNet : SimpleClassDiagrams",
  457. " ReachabilityGraph : SimpleClassDiagrams",
  458. " initialize_PN : PetriNet_RAM",
  459. " refine_PN : ManualOperation",
  460. " reachability : ActionLanguage",
  461. " reachability_print : ReachabilityGraph_RAM",
  462. " pn_reachability : ProcessModel",
  463. " PetriNet_RAM : SimpleClassDiagrams",
  464. " ReachabilityGraph_RAM : SimpleClassDiagrams",
  465. " my_pn : PetriNet",
  466. " my_reachability : ReachabilityGraph",
  467. " __merged_PetriNet_RAM : SimpleClassDiagrams",
  468. " __merged_ReachabilityGraph_RAM : SimpleClassDiagrams",
  469. " __merged_refine_PN : SimpleClassDiagrams",
  470. " __merged_reachability : SimpleClassDiagrams",
  471. ]),
  472. "Ready for command...",
  473. ]))
  474. def test_render(self):
  475. model_add("CausalBlockDiagrams", "SimpleClassDiagrams", open("integration/code/cbd_design.mvc", 'r').read())
  476. model_add("MM_rendered_graphical", "SimpleClassDiagrams", open("models/MM_rendered_graphical.mvc", 'r').read())
  477. model_add("my_CBD", "CausalBlockDiagrams", open("integration/code/my_cbd.mvc", 'r').read())
  478. transformation_add_MT_language(["CausalBlockDiagrams", "MM_rendered_graphical"], "CBD_RAM")
  479. instantiate("__merged_CBD_RAM", "Association", ("CausalBlockDiagrams/Block", "MM_rendered_graphical/Group"), ID="TracabilityLink")
  480. transformation_RAMify("__merged_CBD_RAM", "CBD_RAM")
  481. transformation_add_MT("CBD_RAM", ["CausalBlockDiagrams", "MM_rendered_graphical"], ["MM_rendered_graphical"], "render_graphical_CBD", open("models/CBD_mapper.mvc", 'r').read())
  482. model_render("my_CBD", "render_graphical_CBD")