SyncJoin.sctunit 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. testclass SyncJoin for statechart SyncJoin {
  2. // test syncJoin_C2_Waits 'test intention' {
  3. @Test
  4. operation syncJoin_C2_Waits(){
  5. enter
  6. assert active (SyncJoin.main_region.B)
  7. assert active (SyncJoin.main_region.B.r1.C1)
  8. assert active (SyncJoin.main_region.B.r2.D1)
  9. // state configuration assertion: assert active (SyncJoin.main_region.B, SyncJoin.main_region.B.r1.C1, SyncJoin.main_region.B.r2.D1)
  10. raise e
  11. proceed 1 cycle
  12. assert active (SyncJoin.main_region.B.r1.C2)
  13. assert active (SyncJoin.main_region.B.r2.D1)
  14. // require configuration C2Waits
  15. raise jc
  16. proceed 1 cycle
  17. assert active (SyncJoin.main_region.B.r1.C2)
  18. assert active (SyncJoin.main_region.B.r2.D1)
  19. raise jd
  20. proceed 1 cycle
  21. assert active (SyncJoin.main_region.B.r1.C2)
  22. assert active (SyncJoin.main_region.B.r2.D1)
  23. // 'If all required triggers exist' 'but the lower priority state is not active no join transition must be taken.'
  24. raise jc
  25. raise jd
  26. proceed 1 cycle
  27. assert active (SyncJoin.main_region.B.r1.C2)
  28. assert active (SyncJoin.main_region.B.r2.D1)
  29. raise f
  30. proceed 1 cycle
  31. assert active (SyncJoin.main_region.B.r1.C2)
  32. assert active (SyncJoin.main_region.B.r2.D2)
  33. raise jc
  34. proceed 1 cycle
  35. assert active (SyncJoin.main_region.B.r1.C2)
  36. assert active (SyncJoin.main_region.B.r2.D2)
  37. raise jd
  38. proceed 1 cycle
  39. assert active (SyncJoin.main_region.B.r1.C2)
  40. assert active (SyncJoin.main_region.B.r2.D2)
  41. raise jc
  42. raise jd
  43. proceed 1 cycle
  44. assert active (SyncJoin.main_region.A)
  45. }
  46. @Test
  47. operation syncJoin_D2_Waits(){
  48. enter
  49. assert active (SyncJoin.main_region.B)
  50. assert active (SyncJoin.main_region.B.r1.C1)
  51. assert active (SyncJoin.main_region.B.r2.D1)
  52. raise f
  53. proceed 1 cycle
  54. assert active (SyncJoin.main_region.B.r1.C1)
  55. assert active (SyncJoin.main_region.B.r2.D2)
  56. raise jc
  57. proceed 1 cycle
  58. assert active (SyncJoin.main_region.B.r1.C1)
  59. assert active (SyncJoin.main_region.B.r2.D2)
  60. raise jd
  61. proceed 1 cycle
  62. assert active (SyncJoin.main_region.B.r1.C1)
  63. assert active (SyncJoin.main_region.B.r2.D2)
  64. // 'If all required triggers exist' 'but the lower priority state is not active no join transition must be taken.'
  65. raise jc
  66. raise jd
  67. proceed 1 cycle
  68. assert active (SyncJoin.main_region.B.r1.C1)
  69. assert active (SyncJoin.main_region.B.r2.D2)
  70. raise e
  71. proceed 1 cycle
  72. assert active (SyncJoin.main_region.B.r1.C2)
  73. assert active (SyncJoin.main_region.B.r2.D2)
  74. }
  75. /* Entry actions of a join target should only be called once.
  76. *
  77. * There was a bug that lead to a multiple entry action call depending on the number of joined transitions.
  78. */
  79. @Test
  80. operation doubleEntryActionBug(){
  81. enter
  82. raise e
  83. raise f
  84. proceed 1 cycle
  85. raise jc
  86. raise jd
  87. proceed 1 cycle
  88. assert active (SyncJoin.main_region.A)
  89. assert x == 1
  90. }
  91. }