2
0

SUnit-Tests.st 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. Smalltalk current createPackage: 'SUnit-Tests' properties: #{}!
  2. TestCase subclass: #SUnitAsyncTest
  3. instanceVariableNames: 'flag'
  4. package: 'SUnit-Tests'!
  5. !SUnitAsyncTest methodsFor: 'private'!
  6. sortedSelectors: aCollection
  7. ^(aCollection collect: [:each | each selector]) sorted
  8. ! !
  9. !SUnitAsyncTest methodsFor: 'running'!
  10. setUp
  11. flag := 'ok'
  12. !
  13. tearDown
  14. self assert: 'ok' equals: flag
  15. ! !
  16. !SUnitAsyncTest methodsFor: 'tests'!
  17. fakeError
  18. flag := 'bad'.
  19. self graceTime: 10.
  20. flag := (self async: [ flag := 'ok'. self error: 'Intentional' ]) valueWithTimeout: 5
  21. !
  22. fakeErrorFailingInTearDown
  23. flag := 'bad'.
  24. self graceTime: 10.
  25. flag := (self async: [ self error: 'Intentional' ]) valueWithTimeout: 5
  26. !
  27. fakeFailure
  28. flag := 'bad'.
  29. self graceTime: 10.
  30. flag := (self async: [ flag := 'ok'. self assert: false ]) valueWithTimeout: 5
  31. !
  32. fakeMultipleGraceTimeFailing
  33. self graceTime: 100.
  34. (self async: [
  35. self graceTime: 5.
  36. (self async: [ self finished ]) valueWithTimeout: 10
  37. ]) valueWithTimeout: 5
  38. !
  39. fakeMultipleGraceTimePassing
  40. self graceTime: 10.
  41. (self async: [
  42. self graceTime: 20.
  43. (self async: [ self finished ]) valueWithTimeout: 10
  44. ]) valueWithTimeout: 5
  45. !
  46. fakeTimeout
  47. self graceTime: 4.
  48. (self async: [ self finished ]) valueWithTimeout: 5
  49. !
  50. testAsyncErrorsAndFailuresWork
  51. | suite runner result assertBlock |
  52. suite := #('fakeError' 'fakeErrorFailingInTearDown' 'fakeFailure' 'testPass') collect: [ :each | self class selector: each ].
  53. runner := TestSuiteRunner on: suite.
  54. self graceTime: 200.
  55. result := runner result.
  56. assertBlock := self async: [
  57. self assert: #('fakeError') equals: (self sortedSelectors: result errors).
  58. self assert: #('fakeErrorFailingInTearDown' 'fakeFailure') equals: (self sortedSelectors: result failures).
  59. self finished
  60. ].
  61. runner announcer on: ResultAnnouncement do: [:ann |
  62. ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ]].
  63. runner run
  64. !
  65. testAsyncNeedsGraceTime
  66. self should: [ self async: [ ] ] raise: Error.
  67. self graceTime: 0.
  68. self shouldnt: [ self async: [ ] ] raise: Error.
  69. self finished
  70. !
  71. testFinishedNeedsGraceTime
  72. self should: [ self finished ] raise: Error.
  73. self graceTime: 0.
  74. self shouldnt: [ self finished ] raise: Error.
  75. !
  76. testIsAsyncReturnsCorrectValues
  77. self deny: self isAsync.
  78. self graceTime: 0.
  79. self assert: self isAsync.
  80. self finished.
  81. self deny: self isAsync
  82. !
  83. testPass
  84. flag := 'bad'.
  85. self graceTime: 10.
  86. flag := (self async: [ self assert: true. self finished. flag := 'ok' ]) valueWithTimeout: 5
  87. !
  88. testTimeoutsWork
  89. | suite runner result assertBlock |
  90. suite := #('fakeTimeout' 'fakeMultipleGraceTimeFailing' 'fakeMultipleGraceTimePassing' 'testPass') collect: [ :each | self class selector: each ].
  91. runner := TestSuiteRunner on: suite.
  92. self graceTime: 200.
  93. result := runner result.
  94. assertBlock := self async: [
  95. self assert: result errors isEmpty.
  96. self assert: #('fakeMultipleGraceTimeFailing' 'fakeTimeout') equals: (self sortedSelectors: result failures).
  97. self finished
  98. ].
  99. runner announcer on: ResultAnnouncement do: [:ann |
  100. ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ]].
  101. runner run
  102. !
  103. testTwoAsyncPassesWithFinishedOnlyOneIsRun
  104. | x |
  105. flag := 'bad'.
  106. self graceTime: 10.
  107. x := 0.
  108. flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: 1 equals: x ]) valueWithTimeout: 0.
  109. flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: 1 equals: x ]) valueWithTimeout: 0.
  110. ! !