|
1 "{ Package: 'stx:libbasic3/tests' }" |
|
2 |
|
3 "{ NameSpace: Smalltalk }" |
|
4 |
|
5 TestCase subclass:#MessageTracerTests |
|
6 instanceVariableNames:'methods' |
|
7 classVariableNames:'' |
|
8 poolDictionaries:'' |
|
9 category:'System-Debugging-Support-Tests' |
|
10 ! |
|
11 |
|
12 |
|
13 !MessageTracerTests methodsFor:'change & update'! |
|
14 |
|
15 update: aspect with: param from: sender |
|
16 aspect == #methodTrap ifTrue:[ |
|
17 methods add: (param changeClass >> param changeSelector) |
|
18 ]. |
|
19 |
|
20 "Created: / 28-08-2017 / 17:45:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
21 ! ! |
|
22 |
|
23 !MessageTracerTests methodsFor:'private'! |
|
24 |
|
25 add: x to: y |
|
26 ^ x + y |
|
27 |
|
28 "Created: / 28-08-2017 / 15:59:53 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
29 ! ! |
|
30 |
|
31 !MessageTracerTests methodsFor:'running'! |
|
32 |
|
33 setUp |
|
34 Smalltalk addDependent: self. |
|
35 methods := Set new. |
|
36 |
|
37 "Created: / 28-08-2017 / 17:41:53 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
38 ! |
|
39 |
|
40 tearDown |
|
41 Smalltalk removeDependent: self. |
|
42 methods do:[:method | MessageTracer unwrapMethod: method ] |
|
43 |
|
44 "Created: / 28-08-2017 / 16:01:28 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
45 "Modified: / 28-08-2017 / 17:42:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
46 ! ! |
|
47 |
|
48 !MessageTracerTests methodsFor:'tests - mocking'! |
|
49 |
|
50 test_mock_01a |
|
51 |
|
52 self assert: (self add: 1 to: 1) == 2. |
|
53 MessageTracer mock: #add:to: in: self class do: [ 0 ]. |
|
54 self assert: (self add: 1 to: 1) == 0. |
|
55 |
|
56 "Created: / 28-08-2017 / 16:02:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
57 ! |
|
58 |
|
59 test_mock_01b |
|
60 |
|
61 self assert: (self add: 1 to: 1) == 2. |
|
62 MessageTracer mock: #add:to: in: self class do: [ :r :x :y | r ]. |
|
63 self assert: (self add: 1 to: 1) == self. |
|
64 |
|
65 "Created: / 28-08-2017 / 16:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
66 ! |
|
67 |
|
68 test_mock_01c |
|
69 |
|
70 self assert: (self add: 1 to: 1) == 2. |
|
71 MessageTracer mock: #add:to: in: self class do: [ :r :x :y | x - y ]. |
|
72 self assert: (self add: 1 to: 2) == -1. |
|
73 |
|
74 "Created: / 28-08-2017 / 16:04:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
75 ! |
|
76 |
|
77 test_mock_01d |
|
78 |
|
79 self assert: (self add: 1 to: 1) == 2. |
|
80 MessageTracer mock: #add:to: in: self class do: [ :r :x :y :m | (m valueWithReceiver: r arguments: { x . y }) + 10 ]. |
|
81 self assert: (self add: 1 to: 3) == 14. |
|
82 |
|
83 "Created: / 28-08-2017 / 16:05:59 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
84 ! |
|
85 |
|
86 test_mock_02a |
|
87 | blocker value | |
|
88 |
|
89 self assert: (self add: 1 to: 1) == 2. |
|
90 |
|
91 MessageTracer mock: #add:to: in: self class do:[ 0 ]. |
|
92 blocker := Semaphore new: 0. |
|
93 [ |
|
94 value := self add: 10 to: -5. |
|
95 blocker signal. |
|
96 ] fork. |
|
97 blocker wait. |
|
98 self assert: value == 0. |
|
99 |
|
100 "Created: / 28-08-2017 / 16:08:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
101 ! |
|
102 |
|
103 test_mock_02b |
|
104 | blocker1 blocker2 value | |
|
105 |
|
106 self assert: (self add: 1 to: 1) == 2. |
|
107 |
|
108 MessageTracer mock: #add:to: in: self class do:[ 0 ]. |
|
109 blocker1 := Semaphore new: 0. |
|
110 [ |
|
111 blocker2 := Semaphore new: 0. |
|
112 [ |
|
113 value := self add: 10 to: -5. |
|
114 blocker2 signal. |
|
115 ] fork. |
|
116 blocker2 wait. |
|
117 blocker1 signal. |
|
118 ] fork. |
|
119 blocker1 wait. |
|
120 self assert: value == 0. |
|
121 |
|
122 "Created: / 28-08-2017 / 16:10:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
123 ! |
|
124 |
|
125 test_mock_03a |
|
126 | blocker1 blocker2 threads | |
|
127 |
|
128 |
|
129 threads := Set new. |
|
130 |
|
131 MessageTracer mock: #newProcess in: Block do:[:r :m | |
|
132 | p | |
|
133 |
|
134 p := m valueWithReceiver: r arguments: #(). |
|
135 threads add: p. |
|
136 p |
|
137 ]. |
|
138 ObjectMemory flushCaches. |
|
139 blocker1 := Semaphore new: 0. |
|
140 [ |
|
141 blocker2 := Semaphore new: 0. |
|
142 [ |
|
143 blocker2 signal. |
|
144 ] fork. |
|
145 blocker2 wait. |
|
146 blocker1 signal. |
|
147 ] fork. |
|
148 blocker1 wait. |
|
149 self assert: threads size == 2. |
|
150 |
|
151 "Created: / 28-08-2017 / 16:24:35 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
152 ! ! |
|
153 |
|
154 !MessageTracerTests class methodsFor:'documentation'! |
|
155 |
|
156 version_HG |
|
157 |
|
158 ^ '$Changeset: <not expanded> $' |
|
159 ! ! |
|
160 |