ChildFirstOrthogonalReactions.sctunit 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. testclass ChildFirstOrthogonalReactions for statechart executionorder.ChildFirstOrthogonalReactions {
  2. var counter : integer = 0
  3. const checkFail : integer = -1
  4. operation set_up() {
  5. counter = 0
  6. }
  7. operation foo(id : string) : boolean {
  8. return false
  9. }
  10. @Test operation executionOrder() {
  11. set_up
  12. mock check("A") returns ( foo(id) ) // (a_check = (counter+=1)) == checkFail )
  13. mock check("AA") returns ( (aa_check = (counter+=1)) == checkFail )
  14. mock check("AAA") returns ( (aaa_check = (counter+=1)) == checkFail )
  15. mock check("AAC") returns ( (aac_check = (counter+=1)) == checkFail )
  16. mock check("AC") returns ( (ac_check = (counter+=1)) == checkFail )
  17. mock check("C") returns ( (c_check = (counter+=1)) == checkFail )
  18. mock next() returns (counter+=1)
  19. enter
  20. proceed 1 cycle
  21. assert aaa_check == 1
  22. assert aaa_local == 2
  23. assert aac_check == 3
  24. assert aac_local == 4
  25. assert aa_check == 5
  26. assert aa_local == 6
  27. assert ac_check == 7
  28. assert ac_local == 8
  29. assert a_check == 9
  30. assert a_local == 10
  31. assert c_check == 11
  32. assert c_local == 12
  33. assert sm_local == 13
  34. }
  35. @Test operation executionOrderWIthFirstLeafTransition() {
  36. set_up
  37. mock check("A") returns ( (a_check = (counter+=1)) == checkFail )
  38. mock check("AA") returns ( (aa_check = (counter+=1)) == checkFail )
  39. mock check("AAA") returns ( (aaa_check = (counter+=1)) == aaa_check)
  40. mock check("AAC") returns ( (aac_check = (counter+=1)) == checkFail )
  41. mock check("AC") returns ( (ac_check = (counter+=1)) == checkFail )
  42. mock check("C") returns ( (c_check = (counter+=1)) == checkFail )
  43. mock next() returns (counter+=1)
  44. enter
  45. proceed 1 cycle
  46. assert aaa_check == 1
  47. assert aaa_local == 0
  48. assert aac_check == 0
  49. assert aac_local == 0
  50. assert aa_check == 0
  51. assert aa_local == 0
  52. assert ac_check == 0
  53. assert ac_local == 0
  54. assert a_check == 0
  55. assert a_local == 0
  56. assert c_check == 2
  57. assert c_local == 3
  58. assert sm_local == 4
  59. }
  60. @Test operation executionOrderWIthFirstParentTransition() {
  61. set_up
  62. mock check("A") returns ( (a_check = (counter+=1)) == checkFail )
  63. mock check("AA") returns ( (aa_check = (counter+=1)) == aa_check )
  64. mock check("AAA") returns ( (aaa_check = (counter+=1)) == checkFail)
  65. mock check("AAC") returns ( (aac_check = (counter+=1)) == checkFail )
  66. mock check("AC") returns ( (ac_check = (counter+=1)) == checkFail )
  67. mock check("C") returns ( (c_check = (counter+=1)) == checkFail )
  68. mock next() returns ( counter+=1)
  69. enter
  70. proceed 1 cycle
  71. assert aaa_check == 1
  72. assert aaa_local == 2
  73. assert aac_check == 3
  74. assert aac_local == 4
  75. assert aa_check == 5
  76. assert aa_local == 0
  77. assert ac_check == 0
  78. assert ac_local == 0
  79. assert a_check == 0
  80. assert a_local == 0
  81. assert c_check == 6
  82. assert c_local == 7
  83. assert sm_local == 8
  84. }
  85. @Test operation executionOrderWIthFirstGrandParentTransition() {
  86. set_up
  87. mock check("A") returns ( (a_check = (counter+=1)) == a_check )
  88. mock check("AA") returns ( (aa_check = (counter+=1)) == checkFail )
  89. mock check("AAA") returns ( (aaa_check = (counter+=1)) == checkFail)
  90. mock check("AAC") returns ( (aac_check = (counter+=1)) == checkFail )
  91. mock check("AC") returns ( (ac_check = (counter+=1)) == checkFail )
  92. mock check("C") returns ( (c_check = (counter+=1)) == checkFail )
  93. mock next() returns (counter+=1)
  94. enter
  95. proceed 1 cycle
  96. assert aaa_check == 1
  97. assert aaa_local == 2
  98. assert aac_check == 3
  99. assert aac_local == 4
  100. assert aa_check == 5
  101. assert aa_local == 6
  102. assert ac_check == 7
  103. assert ac_local == 8
  104. assert a_check == 9
  105. assert a_local == 0
  106. assert c_check == 10
  107. assert c_local == 11
  108. assert sm_local == 12
  109. }
  110. @Test operation executionOrderWithLastLeafTransition() {
  111. set_up
  112. mock check("A") returns ( (a_check = (counter+=1)) == checkFail )
  113. mock check("AA") returns ( (aa_check = (counter+=1)) == checkFail )
  114. mock check("AAA") returns ( (aaa_check = (counter+=1)) == checkFail)
  115. mock check("AAC") returns ( (aac_check = (counter+=1)) == checkFail )
  116. mock check("AC") returns ( (ac_check = (counter+=1)) == checkFail )
  117. mock check("C") returns ( (c_check = (counter+=1)) == c_check )
  118. mock next() returns (counter+=1)
  119. enter
  120. proceed 1 cycle
  121. assert aaa_check == 1
  122. assert aaa_local == 2
  123. assert aac_check == 3
  124. assert aac_local == 4
  125. assert aa_check == 5
  126. assert aa_local == 6
  127. assert ac_check == 7
  128. assert ac_local == 8
  129. assert a_check == 9
  130. assert a_local == 10
  131. assert c_check == 11
  132. assert c_local == 0
  133. assert sm_local == 12
  134. }
  135. }