test_constructors_models_compiled.py 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import unittest
  2. import sys
  3. import os
  4. from utils import execute, kill, run_file, run_barebone
  5. sys.path.append("interface/HUTN")
  6. from hutn_compiler.compiler import main as do_compile
  7. def model_compile(filename):
  8. return do_compile(filename, "interface/HUTN/grammars/modelling.g", "M")
  9. def conformance_call(operation, model, metamodel):
  10. return [
  11. "output",
  12. "call",
  13. "access", "resolve", str(operation),
  14. 3,
  15. "call", "access", "resolve", "import_node", 1, "const", "models/example_M", False,
  16. "const", str(model),
  17. "const", str(metamodel),
  18. False,
  19. True,
  20. ]
  21. def conformance_check(node):
  22. return [
  23. "output",
  24. "call",
  25. "access", "resolve", "conformance_scd",
  26. 1,
  27. "call", "access", "resolve", "import_node", 1, "const", str(node), False,
  28. False,
  29. True,
  30. ]
  31. class TestConstructorsModelsCompiled(unittest.TestCase):
  32. def test_constructors_petrinets(self):
  33. commands = model_compile("integration/code/petrinets.mvc") + \
  34. ["exit", 1] + conformance_check("models/PetriNets") + ["return", False]
  35. self.assertTrue(run_barebone(commands, ["OK"], 4))
  36. def test_constructors_petrinet_instance(self):
  37. commands = model_compile("integration/code/petrinets.mvc") + \
  38. model_compile("integration/code/my_petrinet.mvc") + \
  39. ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
  40. self.assertTrue(run_barebone(commands, ["OK"], 4))
  41. def test_constructors_petrinet_full(self):
  42. commands = model_compile("integration/code/my_petrinet_with_MM.mvc") + \
  43. ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
  44. self.assertTrue(run_barebone(commands, ["OK"], 4))
  45. def test_constructors_petrinets_constraints(self):
  46. commands = model_compile("integration/code/petrinets_constraints.mvc") + \
  47. ["exit", 1] + conformance_check("models/PetriNets") + ["return", False]
  48. self.assertTrue(run_barebone(commands, ["OK"], 4))
  49. def test_constructors_petrinet_instance_constraints(self):
  50. commands = model_compile("integration/code/petrinets_constraints.mvc") + \
  51. model_compile("integration/code/my_petrinet.mvc") + \
  52. ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
  53. self.assertTrue(run_barebone(commands, ["OK"], 4))
  54. def test_constructors_petrinet_full_constraints(self):
  55. commands = model_compile("integration/code/my_petrinet_with_MM_and_constraints.mvc") + \
  56. ["exit", 1] + conformance_check("models/my_petrinet") + ["return", False]
  57. self.assertTrue(run_barebone(commands, ["OK"], 4))
  58. def test_constructors_petrinet_invalids(self):
  59. commands = model_compile("integration/code/several_petrinets.mvc") + \
  60. ["exit", 1] + \
  61. conformance_check("models/valid_petrinet") + \
  62. conformance_check("models/invalid_petrinet_1") + \
  63. conformance_check("models/invalid_petrinet_2") + \
  64. conformance_check("models/invalid_petrinet_3") + \
  65. conformance_check("models/invalid_petrinet_4") + \
  66. conformance_check("models/invalid_petrinet_5") + \
  67. conformance_check("models/invalid_petrinet_6") + \
  68. conformance_check("models/invalid_petrinet_7") + \
  69. ["return", False]
  70. self.assertTrue(run_barebone(commands, ["OK",
  71. "Natural does not have a positive or zero value at p1.tokens",
  72. "Natural does not have a positive or zero value at p2t.weight",
  73. "Destination of model edge not typed by destination of type: wrong_p2t",
  74. "Source of model edge not typed by source of type: wrong_t2p",
  75. "Lower cardinality violation for outgoing edge of type Place_tokens at p1",
  76. "Lower cardinality violation for outgoing edge of type P2T_weight at p2t",
  77. "Natural has no integer value at p1.tokens"], 4))