Axxord-Tests.st 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. Smalltalk createPackage: 'Axxord-Tests'!
  2. TestCase subclass: #AxolatorTest
  3. instanceVariableNames: 'rootModel'
  4. package: 'Axxord-Tests'!
  5. !AxolatorTest methodsFor: 'tests'!
  6. testNontrivialModelGetsAppropriateValueForModification
  7. | isolator result |
  8. result := nil.
  9. isolator := Axolator on: #{ 'foo' -> #('bar' #(1 #(2 5)) 'baz'). 'moo' -> 'zoo' }.
  10. isolator axes: #(foo 2) transform: [:r|result := r].
  11. self assert: #(1 #(2 5)) equals: result
  12. !
  13. testNontrivialModelModifiesAppropriateValue
  14. | isolator result |
  15. result := nil.
  16. isolator := Axolator on: #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
  17. isolator axes: #(foo 2) transform: [:r|#new].
  18. isolator axes: #(foo 2) consume: [:r|result := r].
  19. self assert: #new equals: result.
  20. isolator axes: #() consume: [:r|result := r].
  21. self assert: #{ 'foo' -> #('bar' #new 'baz'). 'moo' -> 'zoo' } equals: result
  22. !
  23. testNontrivialModelReturnsAppropriateValue
  24. | isolator result |
  25. result := nil.
  26. isolator := Axolator on: #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
  27. isolator axes: #(foo 2) consume: [:r|result := r].
  28. self assert: #(1 #(2 3)) equals: result
  29. !
  30. testRootModelExaminesThenModifiesRoot
  31. | isolator result |
  32. result := nil.
  33. isolator := Axolator on: #(1 #(2 3)).
  34. isolator axes: #() transform: [:r|r second].
  35. isolator axes: #() consume: [:r|result := r].
  36. self assert: #(2 3) equals: result
  37. !
  38. testRootModelGetsRootForModification
  39. | isolator result |
  40. result := nil.
  41. isolator := Axolator on: #(2 #(1 0)).
  42. isolator axes: #() transform: [:r|result := r].
  43. self assert: #(2 #(1 0)) equals: result
  44. !
  45. testRootModelModifiesAndDeeplyIsolatesInPlaceModifiedRoot
  46. | isolator result newValue |
  47. result := nil. newValue := nil.
  48. isolator := Axolator on: #(1 #(2 3)).
  49. isolator axes: #() transform: [:r|newValue := r. r at: 1 put: 4. r].
  50. newValue at: 2 put: 'bar'.
  51. isolator axes: #() consume: [:r|result := r].
  52. newValue at: 2 put: 'baz'.
  53. self assert: #(4 #(2 3)) equals: result
  54. !
  55. testRootModelModifiesAndDeeplyIsolatesRoot
  56. | isolator result newValue |
  57. result := nil.
  58. isolator := Axolator on: #(1 #(2 3)).
  59. newValue := #{'foo'->#(4 5 6)}.
  60. isolator axes: #() transform: [:r|newValue].
  61. (newValue at: 'foo') at: 1 put: 'bar'.
  62. isolator axes: #() consume: [:r|result := r].
  63. (newValue at: 'foo') at: 3 put: 'baz'.
  64. self assert: #{'foo'->#(4 5 6)} equals: result
  65. !
  66. testRootModelModifiesAndIsolatesRoot
  67. | isolator result newValue |
  68. result := nil.
  69. isolator := Axolator on: #(1 #(2 3)).
  70. newValue := #{'foo'->#(4 5 6)}.
  71. isolator axes: #() transform: [:r|newValue].
  72. newValue at: 'foo' put: 'bar'.
  73. isolator axes: #() consume: [:r|result := r].
  74. newValue at: 'foo' put: 'baz'.
  75. self assert: #{'foo'->#(4 5 6)} equals: result
  76. !
  77. testRootModelModifiesRoot
  78. | isolator result |
  79. result := nil.
  80. isolator := Axolator on: #(1 #(2 3)).
  81. isolator axes: #() transform: [:r|#{'foo'->#(4 5 6)}].
  82. isolator axes: #() consume: [:r|result := r].
  83. self assert: #{'foo'->#(4 5 6)} equals: result
  84. !
  85. testRootModelReturnsDeeplyIsolatedRoot
  86. | isolator result |
  87. result := nil.
  88. isolator := Axolator on: #(1 #(2 3)).
  89. isolator axes: #() consume: [:r|(r at: 2) at: 1 put: 0].
  90. isolator axes: #() consume: [:r|result := r].
  91. self assert: #(1 #(2 3)) equals: result
  92. !
  93. testRootModelReturnsIsolatedRoot
  94. | isolator result |
  95. result := nil.
  96. isolator := Axolator on: #(1 #(2 4)).
  97. isolator axes: #() consume: [:r|r at: 2 put: nil].
  98. isolator axes: #() consume: [:r|result := r].
  99. self assert: #(1 #(2 4)) equals: result
  100. !
  101. testRootModelReturnsRoot
  102. | isolator result |
  103. result := nil.
  104. isolator := Axolator on: #(1 #(2 3)).
  105. isolator axes: #() consume: [:r|result := r].
  106. self assert: #(1 #(2 3)) equals: result
  107. ! !
  108. TestCase subclass: #PlainConsumeTransformTest
  109. instanceVariableNames: ''
  110. package: 'Axxord-Tests'!
  111. !PlainConsumeTransformTest methodsFor: 'tests'!
  112. testModelTransformSentToAxon
  113. | model result axon |
  114. result := nil.
  115. model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
  116. axon := TestSpyAxon new.
  117. model axxord: axon.
  118. model axes: #(foo 2) transform: [:r | #new].
  119. self assert: axon changedAspectLog equals: #((foo 2))
  120. !
  121. testNontrivialModelGetsAppropriateValueForTransform
  122. | model result |
  123. result := nil.
  124. model := #{ 'foo' -> #('bar' #(1 #(2 5)) 'baz'). 'moo' -> 'zoo' }.
  125. model axes: #(foo 2) transform: [:r | result := r].
  126. self assert: #(1 #(2 5)) equals: result
  127. !
  128. testNontrivialModelReturnsAppropriateValue
  129. | model result |
  130. result := nil.
  131. model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
  132. model axes: #(foo 2) consume: [:r | result := r].
  133. self assert: #(1 #(2 3)) equals: result
  134. !
  135. testNontrivialModelTransformsAppropriateValue
  136. | model result |
  137. result := nil.
  138. model := #{ 'foo' -> #('bar' #(1 #(2 3)) 'baz'). 'moo' -> 'zoo' }.
  139. model axes: #(foo 2) transform: [:r | #new].
  140. model axes: #(foo 2) consume: [:r | result := r].
  141. self assert: #new equals: result.
  142. model axes: #() consume: [:r | result := r].
  143. self assert: #{ 'foo' -> #('bar' #new 'baz'). 'moo' -> 'zoo' } equals: result
  144. !
  145. testRootModelCannotTransform
  146. | model result |
  147. result := nil.
  148. model := #(1 #(2 3)).
  149. self should: [ model axes: #() transform: [:r | #{'foo'->#(4 5 6)}] ] raise: Error
  150. !
  151. testRootModelReturnsDirectRoot
  152. | model result |
  153. result := nil.
  154. model := #(1 #(2 4)).
  155. model axes: #() consume: [:r | r at: 2 put: nil].
  156. model axes: #() consume: [:r | result := r].
  157. self assert: #(1 nil) equals: result
  158. !
  159. testRootModelReturnsRoot
  160. | model result |
  161. result := nil.
  162. model := #(1 #(2 3)).
  163. model axes: #() consume: [:r | result := r].
  164. self assert: #(1 #(2 3)) equals: result
  165. !
  166. testRootTransformBlockIsRun
  167. | model result |
  168. result := nil.
  169. model := #(2 #(1 0)).
  170. [model axes: #() transform: [:r | result := r. model]] on: Error do: [].
  171. self assert: result equals: model
  172. !
  173. testRootTransformFailsOnActualChange
  174. | model |
  175. model := #(2 #(1 0)).
  176. self should: [model axes: #() transform: [:r | #new]] raise: Error
  177. ! !
  178. Axon subclass: #TestSpyAxon
  179. instanceVariableNames: 'changedAspectLog'
  180. package: 'Axxord-Tests'!
  181. !TestSpyAxon commentStamp!
  182. I am an axon that logs changed aspects. I am useful in tests.!
  183. !TestSpyAxon methodsFor: 'accessing'!
  184. changedAspectLog
  185. ^ changedAspectLog
  186. !
  187. changedAspectLog: anObject
  188. changedAspectLog := anObject
  189. ! !
  190. !TestSpyAxon methodsFor: 'action'!
  191. changed: anAspect
  192. changedAspectLog add: anAspect
  193. ! !
  194. !TestSpyAxon methodsFor: 'initialization'!
  195. initialize
  196. super initialize.
  197. changedAspectLog := #()
  198. ! !