resin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +52 -0
- data/amber/css/amber.css +519 -0
- data/amber/css/documentation.css +84 -0
- data/amber/css/profstef.css +75 -0
- data/amber/css/style.css +313 -0
- data/amber/images/amber.png +0 -0
- data/amber/images/amber_small.png +0 -0
- data/amber/images/off.png +0 -0
- data/amber/images/offHover.png +0 -0
- data/amber/images/presentation.png +0 -0
- data/amber/images/profstef.png +0 -0
- data/amber/images/sprite.png +0 -0
- data/amber/images/tinylogo.png +0 -0
- data/amber/images/twitterwall.png +0 -0
- data/amber/js/Additional-Examples.deploy.js +15 -0
- data/amber/js/Additional-Examples.js +21 -0
- data/amber/js/Benchfib.deploy.js +132 -0
- data/amber/js/Benchfib.js +167 -0
- data/amber/js/Canvas.deploy.js +1304 -0
- data/amber/js/Canvas.js +1885 -0
- data/amber/js/Compiler.deploy.js +1871 -0
- data/amber/js/Compiler.js +2616 -0
- data/amber/js/Documentation.deploy.js +961 -0
- data/amber/js/Documentation.js +1376 -0
- data/amber/js/Examples.deploy.js +53 -0
- data/amber/js/Examples.js +73 -0
- data/amber/js/IDE.deploy.js +3468 -0
- data/amber/js/IDE.js +4883 -0
- data/amber/js/Kernel-Announcements.deploy.js +107 -0
- data/amber/js/Kernel-Announcements.js +152 -0
- data/amber/js/Kernel-Classes.deploy.js +675 -0
- data/amber/js/Kernel-Classes.js +956 -0
- data/amber/js/Kernel-Collections.deploy.js +3273 -0
- data/amber/js/Kernel-Collections.js +4644 -0
- data/amber/js/Kernel-Exceptions.deploy.js +244 -0
- data/amber/js/Kernel-Exceptions.js +349 -0
- data/amber/js/Kernel-Methods.deploy.js +510 -0
- data/amber/js/Kernel-Methods.js +739 -0
- data/amber/js/Kernel-Objects.deploy.js +2698 -0
- data/amber/js/Kernel-Objects.js +3858 -0
- data/amber/js/Kernel-Tests.deploy.js +1419 -0
- data/amber/js/Kernel-Tests.js +1929 -0
- data/amber/js/Kernel-Transcript.deploy.js +142 -0
- data/amber/js/Kernel-Transcript.js +202 -0
- data/amber/js/SUnit.deploy.js +351 -0
- data/amber/js/SUnit.js +501 -0
- data/amber/js/amber.js +250 -0
- data/amber/js/boot.js +587 -0
- data/amber/js/compat.js +22 -0
- data/amber/js/init.js +8 -0
- data/amber/js/lib/CodeMirror/LICENSE +19 -0
- data/amber/js/lib/CodeMirror/amber.css +21 -0
- data/amber/js/lib/CodeMirror/codemirror.css +67 -0
- data/amber/js/lib/CodeMirror/codemirror.js +2144 -0
- data/amber/js/lib/CodeMirror/smalltalk.js +134 -0
- data/amber/js/lib/jQuery/jquery-1.4.4.min.js +167 -0
- data/amber/js/lib/jQuery/jquery-1.6.4.min.js +4 -0
- data/amber/js/lib/jQuery/jquery-ui-1.8.16.custom.min.js +791 -0
- data/amber/js/lib/jQuery/jquery.textarea.js +267 -0
- data/amber/js/lib/peg-0.6.2.min.js +2 -0
- data/amber/js/lib/showdown.js +419 -0
- data/amber/js/parser.js +4005 -0
- data/amber/js/parser.pegjs +220 -0
- data/amber/st/Benchfib.st +124 -0
- data/amber/st/Canvas.st +556 -0
- data/amber/st/Compiler.st +1425 -0
- data/amber/st/Documentation.st +758 -0
- data/amber/st/Examples.st +38 -0
- data/amber/st/IDE.st +2336 -0
- data/amber/st/Kernel-Announcements.st +61 -0
- data/amber/st/Kernel-Classes.st +403 -0
- data/amber/st/Kernel-Collections.st +1673 -0
- data/amber/st/Kernel-Exceptions.st +124 -0
- data/amber/st/Kernel-Methods.st +287 -0
- data/amber/st/Kernel-Objects.st +1489 -0
- data/amber/st/Kernel-Tests.st +892 -0
- data/amber/st/Kernel-Transcript.st +70 -0
- data/amber/st/SUnit.st +172 -0
- data/bin/runresin +12 -0
- data/lib/resin.rb +0 -0
- data/lib/resin/app/app.rb +121 -0
- data/lib/resin/app/views/index.haml +10 -0
- metadata +216 -0
@@ -0,0 +1,892 @@
|
|
1
|
+
Smalltalk current createPackage: 'Kernel-Tests' properties: #{}!
|
2
|
+
TestCase subclass: #StringTest
|
3
|
+
instanceVariableNames: ''
|
4
|
+
category: 'Kernel-Tests'!
|
5
|
+
|
6
|
+
!StringTest methodsFor: 'tests'!
|
7
|
+
|
8
|
+
testJoin
|
9
|
+
self assert: 'hello,world' equals: (',' join: #('hello' 'world'))
|
10
|
+
!
|
11
|
+
|
12
|
+
testStreamContents
|
13
|
+
self
|
14
|
+
assert: 'hello world'
|
15
|
+
equals: (String streamContents: [:aStream| aStream
|
16
|
+
nextPutAll: 'hello'; space;
|
17
|
+
nextPutAll: 'world'])
|
18
|
+
!
|
19
|
+
|
20
|
+
testIncludesSubString
|
21
|
+
self assert: ('amber' includesSubString: 'ber').
|
22
|
+
self deny: ('amber' includesSubString: 'zork').
|
23
|
+
!
|
24
|
+
|
25
|
+
testEquality
|
26
|
+
self assert: 'hello' = 'hello'.
|
27
|
+
self deny: 'hello' = 'world'.
|
28
|
+
|
29
|
+
self assert: 'hello' = 'hello' yourself.
|
30
|
+
self assert: 'hello' yourself = 'hello'.
|
31
|
+
|
32
|
+
"test JS falsy value"
|
33
|
+
self deny: '' = 0
|
34
|
+
!
|
35
|
+
|
36
|
+
testCopyWithoutAll
|
37
|
+
self
|
38
|
+
assert: 'hello world'
|
39
|
+
equals: ('*hello* *world*' copyWithoutAll: '*')
|
40
|
+
!
|
41
|
+
|
42
|
+
testAt
|
43
|
+
self assert: ('hello' at: 1) = 'h'.
|
44
|
+
self assert: ('hello' at: 5) = 'o'.
|
45
|
+
self assert: ('hello' at: 6 ifAbsent: [nil]) = nil
|
46
|
+
!
|
47
|
+
|
48
|
+
testAtPut
|
49
|
+
"String instances are read-only"
|
50
|
+
self should: ['hello' at: 1 put: 'a'] raise: Error
|
51
|
+
!
|
52
|
+
|
53
|
+
testSize
|
54
|
+
self assert: 'smalltalk' size equals: 9.
|
55
|
+
self assert: '' size equals: 0
|
56
|
+
!
|
57
|
+
|
58
|
+
testAddRemove
|
59
|
+
self should: ['hello' add: 'a'] raise: Error.
|
60
|
+
self should: ['hello' remove: 'h'] raise: Error
|
61
|
+
! !
|
62
|
+
|
63
|
+
TestCase subclass: #DictionaryTest
|
64
|
+
instanceVariableNames: ''
|
65
|
+
category: 'Kernel-Tests'!
|
66
|
+
|
67
|
+
!DictionaryTest methodsFor: 'tests'!
|
68
|
+
|
69
|
+
testPrintString
|
70
|
+
self
|
71
|
+
assert: 'a Dictionary(''firstname'' -> ''James'' , ''lastname'' -> ''Bond'')'
|
72
|
+
equals: (Dictionary new
|
73
|
+
at:'firstname' put: 'James';
|
74
|
+
at:'lastname' put: 'Bond';
|
75
|
+
printString)
|
76
|
+
!
|
77
|
+
|
78
|
+
testEquality
|
79
|
+
| d1 d2 |
|
80
|
+
|
81
|
+
self assert: Dictionary new = Dictionary new.
|
82
|
+
|
83
|
+
d1 := Dictionary new at: 1 put: 2; yourself.
|
84
|
+
d2 := Dictionary new at: 1 put: 2; yourself.
|
85
|
+
self assert: d1 = d2.
|
86
|
+
|
87
|
+
d2 := Dictionary new at: 1 put: 3; yourself.
|
88
|
+
self deny: d1 = d2.
|
89
|
+
|
90
|
+
d2 := Dictionary new at: 2 put: 2; yourself.
|
91
|
+
self deny: d1 = d2.
|
92
|
+
|
93
|
+
d2 := Dictionary new at: 1 put: 2; at: 3 put: 4; yourself.
|
94
|
+
self deny: d1 = d2.
|
95
|
+
!
|
96
|
+
|
97
|
+
testDynamicDictionaries
|
98
|
+
self assert: #{'hello' -> 1} asDictionary = (Dictionary with: 'hello' -> 1)
|
99
|
+
!
|
100
|
+
|
101
|
+
testAccessing
|
102
|
+
| d |
|
103
|
+
|
104
|
+
d := Dictionary new.
|
105
|
+
|
106
|
+
d at: 'hello' put: 'world'.
|
107
|
+
self assert: (d at: 'hello') = 'world'.
|
108
|
+
self assert: (d at: 'hello' ifAbsent: [nil]) = 'world'.
|
109
|
+
self deny: (d at: 'foo' ifAbsent: [nil]) = 'world'.
|
110
|
+
|
111
|
+
d at: 1 put: 2.
|
112
|
+
self assert: (d at: 1) = 2.
|
113
|
+
|
114
|
+
d at: 1@3 put: 3.
|
115
|
+
self assert: (d at: 1@3) = 3
|
116
|
+
!
|
117
|
+
|
118
|
+
testSize
|
119
|
+
| d |
|
120
|
+
|
121
|
+
d := Dictionary new.
|
122
|
+
self assert: d size = 0.
|
123
|
+
|
124
|
+
d at: 1 put: 2.
|
125
|
+
self assert: d size = 1.
|
126
|
+
|
127
|
+
d at: 2 put: 3.
|
128
|
+
self assert: d size = 2.
|
129
|
+
!
|
130
|
+
|
131
|
+
testValues
|
132
|
+
| d |
|
133
|
+
|
134
|
+
d := Dictionary new.
|
135
|
+
d at: 1 put: 2.
|
136
|
+
d at: 2 put: 3.
|
137
|
+
d at: 3 put: 4.
|
138
|
+
|
139
|
+
self assert: d values = #(2 3 4)
|
140
|
+
!
|
141
|
+
|
142
|
+
testKeys
|
143
|
+
| d |
|
144
|
+
|
145
|
+
d := Dictionary new.
|
146
|
+
d at: 1 put: 2.
|
147
|
+
d at: 2 put: 3.
|
148
|
+
d at: 3 put: 4.
|
149
|
+
|
150
|
+
self assert: d keys = #(1 2 3)
|
151
|
+
! !
|
152
|
+
|
153
|
+
TestCase subclass: #BooleanTest
|
154
|
+
instanceVariableNames: ''
|
155
|
+
category: 'Kernel-Tests'!
|
156
|
+
|
157
|
+
!BooleanTest methodsFor: 'tests'!
|
158
|
+
|
159
|
+
testLogic
|
160
|
+
|
161
|
+
"Trivial logic table"
|
162
|
+
self assert: (true & true); deny: (true & false); deny: (false & true); deny: (false & false).
|
163
|
+
self assert: (true | true); assert: (true | false); assert: (false | true); deny: (false | false).
|
164
|
+
"Checking that expressions work fine too"
|
165
|
+
self assert: (true & (1 > 0)); deny: ((1 > 0) & false); deny: ((1 > 0) & (1 > 2)).
|
166
|
+
self assert: (false | (1 > 0)); assert: ((1 > 0) | false); assert: ((1 > 0) | (1 > 2))
|
167
|
+
!
|
168
|
+
|
169
|
+
testEquality
|
170
|
+
"We're on top of JS...just be sure to check the basics!!"
|
171
|
+
|
172
|
+
self deny: 0 = false.
|
173
|
+
self deny: false = 0.
|
174
|
+
self deny: '' = false.
|
175
|
+
self deny: false = ''.
|
176
|
+
|
177
|
+
self assert: true = true.
|
178
|
+
self deny: false = true.
|
179
|
+
self deny: true = false.
|
180
|
+
self assert: false = false.
|
181
|
+
|
182
|
+
"JS may do some type coercing after sending a message"
|
183
|
+
self assert: true yourself = true.
|
184
|
+
self assert: true yourself = true yourself
|
185
|
+
!
|
186
|
+
|
187
|
+
testLogicKeywords
|
188
|
+
|
189
|
+
"Trivial logic table"
|
190
|
+
self
|
191
|
+
assert: (true and: [ true]);
|
192
|
+
deny: (true and: [ false ]);
|
193
|
+
deny: (false and: [ true ]);
|
194
|
+
deny: (false and: [ false ]).
|
195
|
+
self
|
196
|
+
assert: (true or: [ true ]);
|
197
|
+
assert: (true or: [ false ]);
|
198
|
+
assert: (false or: [ true ]);
|
199
|
+
deny: (false or: [ false ]).
|
200
|
+
|
201
|
+
"Checking that expressions work fine too"
|
202
|
+
self
|
203
|
+
assert: (true and: [ 1 > 0 ]);
|
204
|
+
deny: ((1 > 0) and: [ false ]);
|
205
|
+
deny: ((1 > 0) and: [ 1 > 2 ]).
|
206
|
+
self
|
207
|
+
assert: (false or: [ 1 > 0 ]);
|
208
|
+
assert: ((1 > 0) or: [ false ]);
|
209
|
+
assert: ((1 > 0) or: [ 1 > 2 ])
|
210
|
+
!
|
211
|
+
|
212
|
+
testIfTrueIfFalse
|
213
|
+
|
214
|
+
self assert: (true ifTrue: ['alternative block']) = 'alternative block'.
|
215
|
+
self assert: (true ifFalse: ['alternative block']) = nil.
|
216
|
+
|
217
|
+
self assert: (false ifTrue: ['alternative block']) = nil.
|
218
|
+
self assert: (false ifFalse: ['alternative block']) = 'alternative block'.
|
219
|
+
|
220
|
+
self assert: (false ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block2'.
|
221
|
+
self assert: (false ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block'.
|
222
|
+
|
223
|
+
self assert: (true ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block'.
|
224
|
+
self assert: (true ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block2'.
|
225
|
+
! !
|
226
|
+
|
227
|
+
TestCase subclass: #NumberTest
|
228
|
+
instanceVariableNames: ''
|
229
|
+
category: 'Kernel-Tests'!
|
230
|
+
|
231
|
+
!NumberTest methodsFor: 'tests'!
|
232
|
+
|
233
|
+
testPrintShowingDecimalPlaces
|
234
|
+
self assert: '23.00' equals: (23 printShowingDecimalPlaces: 2).
|
235
|
+
self assert: '23.57' equals: (23.5698 printShowingDecimalPlaces: 2).
|
236
|
+
self assert: '-234.56700' equals:( 234.567 negated printShowingDecimalPlaces: 5).
|
237
|
+
self assert: '23' equals: (23.4567 printShowingDecimalPlaces: 0).
|
238
|
+
self assert: '24' equals: (23.5567 printShowingDecimalPlaces: 0).
|
239
|
+
self assert: '-23' equals: (23.4567 negated printShowingDecimalPlaces: 0).
|
240
|
+
self assert: '-24' equals: (23.5567 negated printShowingDecimalPlaces: 0).
|
241
|
+
self assert: '100000000.0' equals: (100000000 printShowingDecimalPlaces: 1).
|
242
|
+
self assert: '0.98000' equals: (0.98 printShowingDecimalPlaces: 5).
|
243
|
+
self assert: '-0.98' equals: (0.98 negated printShowingDecimalPlaces: 2).
|
244
|
+
self assert: '2.57' equals: (2.567 printShowingDecimalPlaces: 2).
|
245
|
+
self assert: '-2.57' equals: (-2.567 printShowingDecimalPlaces: 2).
|
246
|
+
self assert: '0.00' equals: (0 printShowingDecimalPlaces: 2).
|
247
|
+
!
|
248
|
+
|
249
|
+
testEquality
|
250
|
+
self assert: 1 = 1.
|
251
|
+
self assert: 0 = 0.
|
252
|
+
self deny: 1 = 0.
|
253
|
+
|
254
|
+
self assert: 1 yourself = 1.
|
255
|
+
self assert: 1 = 1 yourself.
|
256
|
+
self assert: 1 yourself = 1 yourself.
|
257
|
+
|
258
|
+
self deny: 0 = false.
|
259
|
+
self deny: false = 0.
|
260
|
+
self deny: '' = 0.
|
261
|
+
self deny: 0 = ''
|
262
|
+
!
|
263
|
+
|
264
|
+
testArithmetic
|
265
|
+
|
266
|
+
"We rely on JS here, so we won't test complex behavior, just check if
|
267
|
+
message sends are corrects"
|
268
|
+
|
269
|
+
self assert: 1.5 + 1 = 2.5.
|
270
|
+
self assert: 2 - 1 = 1.
|
271
|
+
self assert: -2 - 1 = -3.
|
272
|
+
self assert: 12 / 2 = 6.
|
273
|
+
self assert: 3 * 4 = 12.
|
274
|
+
|
275
|
+
"Simple parenthesis and execution order"
|
276
|
+
|
277
|
+
self assert: 1 + 2 * 3 = 9.
|
278
|
+
self assert: 1 + (2 * 3) = 7
|
279
|
+
!
|
280
|
+
|
281
|
+
testRounded
|
282
|
+
|
283
|
+
self assert: 3 rounded = 3.
|
284
|
+
self assert: 3.212 rounded = 3.
|
285
|
+
self assert: 3.51 rounded = 4
|
286
|
+
!
|
287
|
+
|
288
|
+
testNegated
|
289
|
+
self assert: 3 negated = -3.
|
290
|
+
self assert: -3 negated = 3
|
291
|
+
!
|
292
|
+
|
293
|
+
testComparison
|
294
|
+
|
295
|
+
self assert: 3 > 2.
|
296
|
+
self assert: 2 < 3.
|
297
|
+
|
298
|
+
self deny: 3 < 2.
|
299
|
+
self deny: 2 > 3.
|
300
|
+
|
301
|
+
self assert: 3 >= 3.
|
302
|
+
self assert: 3.1 >= 3.
|
303
|
+
self assert: 3 <= 3.
|
304
|
+
self assert: 3 <= 3.1
|
305
|
+
!
|
306
|
+
|
307
|
+
testTruncated
|
308
|
+
|
309
|
+
self assert: 3 truncated = 3.
|
310
|
+
self assert: 3.212 truncated = 3.
|
311
|
+
self assert: 3.51 truncated = 3
|
312
|
+
!
|
313
|
+
|
314
|
+
testCopying
|
315
|
+
self assert: 1 copy == 1.
|
316
|
+
self assert: 1 deepCopy == 1
|
317
|
+
!
|
318
|
+
|
319
|
+
testMinMax
|
320
|
+
|
321
|
+
self assert: (2 max: 5) equals: 5.
|
322
|
+
self assert: (2 min: 5) equals: 2
|
323
|
+
!
|
324
|
+
|
325
|
+
testIdentity
|
326
|
+
self assert: 1 == 1.
|
327
|
+
self assert: 0 == 0.
|
328
|
+
self deny: 1 == 0.
|
329
|
+
|
330
|
+
self assert: 1 yourself == 1.
|
331
|
+
self assert: 1 == 1 yourself.
|
332
|
+
self assert: 1 yourself == 1 yourself.
|
333
|
+
|
334
|
+
self deny: 1 == 2
|
335
|
+
!
|
336
|
+
|
337
|
+
testSqrt
|
338
|
+
|
339
|
+
self assert: 4 sqrt = 2.
|
340
|
+
self assert: 16 sqrt = 4
|
341
|
+
!
|
342
|
+
|
343
|
+
testSquared
|
344
|
+
|
345
|
+
self assert: 4 squared = 16
|
346
|
+
!
|
347
|
+
|
348
|
+
testTimesRepeat
|
349
|
+
| i |
|
350
|
+
|
351
|
+
i := 0.
|
352
|
+
0 timesRepeat: [i := i + 1].
|
353
|
+
self assert: i equals: 0.
|
354
|
+
|
355
|
+
5 timesRepeat: [i := i + 1].
|
356
|
+
self assert: i equals: 5
|
357
|
+
!
|
358
|
+
|
359
|
+
testTo
|
360
|
+
self assert: (1 to: 5) equals: #(1 2 3 4 5)
|
361
|
+
!
|
362
|
+
|
363
|
+
testToBy
|
364
|
+
self assert: (0 to: 6 by: 2) equals: #(0 2 4 6).
|
365
|
+
|
366
|
+
self should: [1 to: 4 by: 0] raise: Error
|
367
|
+
! !
|
368
|
+
|
369
|
+
TestCase subclass: #JSObjectProxyTest
|
370
|
+
instanceVariableNames: ''
|
371
|
+
category: 'Kernel-Tests'!
|
372
|
+
|
373
|
+
!JSObjectProxyTest methodsFor: 'accessing'!
|
374
|
+
|
375
|
+
jsObject
|
376
|
+
<return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}>
|
377
|
+
! !
|
378
|
+
|
379
|
+
!JSObjectProxyTest methodsFor: 'tests'!
|
380
|
+
|
381
|
+
testMethodWithArguments
|
382
|
+
self deny: ('body' asJQuery hasClass: 'amber').
|
383
|
+
|
384
|
+
'body' asJQuery addClass: 'amber'.
|
385
|
+
self assert: ('body' asJQuery hasClass: 'amber').
|
386
|
+
|
387
|
+
'body' asJQuery removeClass: 'amber'.
|
388
|
+
self deny: ('body' asJQuery hasClass: 'amber').
|
389
|
+
!
|
390
|
+
|
391
|
+
testYourself
|
392
|
+
|body|
|
393
|
+
body := 'body' asJQuery
|
394
|
+
addClass: 'amber';
|
395
|
+
yourself.
|
396
|
+
|
397
|
+
self assert: (body hasClass: 'amber').
|
398
|
+
|
399
|
+
body removeClass: 'amber'.
|
400
|
+
self deny: (body hasClass: 'amber').
|
401
|
+
!
|
402
|
+
|
403
|
+
testPropertyThatReturnsEmptyString
|
404
|
+
<document.location.hash = ''>.
|
405
|
+
self assert: '' equals: document location hash.
|
406
|
+
|
407
|
+
document location hash: 'test'.
|
408
|
+
self assert: '#test' equals: document location hash.
|
409
|
+
!
|
410
|
+
|
411
|
+
testDNU
|
412
|
+
self should: [self jsObject foo] raise: MessageNotUnderstood
|
413
|
+
!
|
414
|
+
|
415
|
+
testMessageSend
|
416
|
+
|
417
|
+
self assert: self jsObject a equals: 1.
|
418
|
+
self assert: self jsObject b equals: 2.
|
419
|
+
self assert: (self jsObject c: 3) equals: 3
|
420
|
+
!
|
421
|
+
|
422
|
+
testPrinting
|
423
|
+
self assert: self jsObject printString = '[object Object]'
|
424
|
+
! !
|
425
|
+
|
426
|
+
TestCase subclass: #PackageTest
|
427
|
+
instanceVariableNames: 'zorkPackage grulPackage backUpCommitPathJs backUpCommitPathSt'
|
428
|
+
category: 'Kernel-Tests'!
|
429
|
+
|
430
|
+
!PackageTest methodsFor: 'running'!
|
431
|
+
|
432
|
+
setUp
|
433
|
+
backUpCommitPathJs := Package defaultCommitPathJs.
|
434
|
+
backUpCommitPathSt := Package defaultCommitPathSt.
|
435
|
+
|
436
|
+
Package resetCommitPaths.
|
437
|
+
|
438
|
+
zorkPackage := Package new name: 'Zork'.
|
439
|
+
grulPackage := Package new
|
440
|
+
name: 'Grul';
|
441
|
+
commitPathJs: 'server/grul/js';
|
442
|
+
commitPathSt: 'grul/st';
|
443
|
+
yourself
|
444
|
+
!
|
445
|
+
|
446
|
+
tearDown
|
447
|
+
Package
|
448
|
+
defaultCommitPathJs: backUpCommitPathJs;
|
449
|
+
defaultCommitPathSt: backUpCommitPathSt
|
450
|
+
! !
|
451
|
+
|
452
|
+
!PackageTest methodsFor: 'tests'!
|
453
|
+
|
454
|
+
testGrulCommitPathStShouldBeGrulSt
|
455
|
+
self assert: 'grul/st' equals: grulPackage commitPathSt
|
456
|
+
!
|
457
|
+
|
458
|
+
testZorkCommitPathStShouldBeSt
|
459
|
+
self assert: 'st' equals: zorkPackage commitPathSt
|
460
|
+
!
|
461
|
+
|
462
|
+
testZorkCommitPathJsShouldBeJs
|
463
|
+
self assert: 'js' equals: zorkPackage commitPathJs
|
464
|
+
!
|
465
|
+
|
466
|
+
testGrulCommitPathJsShouldBeServerGrulJs
|
467
|
+
self assert: 'server/grul/js' equals: grulPackage commitPathJs
|
468
|
+
! !
|
469
|
+
|
470
|
+
PackageTest subclass: #PackageWithDefaultCommitPathChangedTest
|
471
|
+
instanceVariableNames: ''
|
472
|
+
category: 'Kernel-Tests'!
|
473
|
+
|
474
|
+
!PackageWithDefaultCommitPathChangedTest methodsFor: 'running'!
|
475
|
+
|
476
|
+
setUp
|
477
|
+
super setUp.
|
478
|
+
|
479
|
+
Package
|
480
|
+
defaultCommitPathJs: 'javascripts/';
|
481
|
+
defaultCommitPathSt: 'smalltalk/'.
|
482
|
+
! !
|
483
|
+
|
484
|
+
!PackageWithDefaultCommitPathChangedTest methodsFor: 'tests'!
|
485
|
+
|
486
|
+
testGrulCommitPathJsShouldBeServerGrulJs
|
487
|
+
self assert: 'server/grul/js' equals: grulPackage commitPathJs
|
488
|
+
!
|
489
|
+
|
490
|
+
testGrulCommitPathStShouldBeGrulSt
|
491
|
+
self assert: 'grul/st' equals: grulPackage commitPathSt
|
492
|
+
!
|
493
|
+
|
494
|
+
testZorkCommitPathJsShouldBeJavascript
|
495
|
+
self assert: 'javascripts/' equals: zorkPackage commitPathJs
|
496
|
+
!
|
497
|
+
|
498
|
+
testZorkCommitPathStShouldBeSmalltalk
|
499
|
+
self assert: 'smalltalk/' equals: zorkPackage commitPathSt
|
500
|
+
! !
|
501
|
+
|
502
|
+
!PackageWithDefaultCommitPathChangedTest class methodsFor: 'accessing'!
|
503
|
+
|
504
|
+
shouldInheritSelectors
|
505
|
+
^ false
|
506
|
+
! !
|
507
|
+
|
508
|
+
TestCase subclass: #BlockClosureTest
|
509
|
+
instanceVariableNames: ''
|
510
|
+
category: 'Kernel-Tests'!
|
511
|
+
|
512
|
+
!BlockClosureTest methodsFor: 'tests'!
|
513
|
+
|
514
|
+
testValue
|
515
|
+
self assert: ([1+1] value) equals: 2.
|
516
|
+
self assert: ([:x | x +1] value: 2) equals: 3.
|
517
|
+
self assert: ([:x :y | x*y] value: 2 value: 4) equals: 8.
|
518
|
+
|
519
|
+
"Arguments are optional in Amber. This isn't ANSI compliant."
|
520
|
+
|
521
|
+
self assert: ([:a :b :c | 1] value) equals: 1
|
522
|
+
!
|
523
|
+
|
524
|
+
testOnDo
|
525
|
+
self assert: ([Error new signal] on: Error do: [:ex | true])
|
526
|
+
!
|
527
|
+
|
528
|
+
testEnsure
|
529
|
+
self assert: ([Error new] ensure: [true])
|
530
|
+
!
|
531
|
+
|
532
|
+
testNumArgs
|
533
|
+
self assert: [] numArgs equals: 0.
|
534
|
+
self assert: [:a :b | ] numArgs equals: 2
|
535
|
+
!
|
536
|
+
|
537
|
+
testValueWithPossibleArguments
|
538
|
+
self assert: ([1] valueWithPossibleArguments: #(3 4)) equals: 1.
|
539
|
+
self assert: ([:a | a + 4] valueWithPossibleArguments: #(3 4)) equals: 7.
|
540
|
+
self assert: ([:a :b | a + b] valueWithPossibleArguments: #(3 4 5)) equals: 7.
|
541
|
+
!
|
542
|
+
|
543
|
+
testWhileTrue
|
544
|
+
| i |
|
545
|
+
i := 0.
|
546
|
+
[i < 5] whileTrue: [i := i + 1].
|
547
|
+
self assert: i equals: 5.
|
548
|
+
|
549
|
+
i := 0.
|
550
|
+
[i := i + 1. i < 5] whileTrue.
|
551
|
+
self assert: i equals: 5
|
552
|
+
!
|
553
|
+
|
554
|
+
testWhileFalse
|
555
|
+
| i |
|
556
|
+
i := 0.
|
557
|
+
[i > 5] whileFalse: [i := i + 1].
|
558
|
+
self assert: i equals: 6.
|
559
|
+
|
560
|
+
i := 0.
|
561
|
+
[i := i + 1. i > 5] whileFalse.
|
562
|
+
self assert: i equals: 6
|
563
|
+
!
|
564
|
+
|
565
|
+
testCompiledSource
|
566
|
+
self assert: ([1+1] compiledSource includesSubString: 'function')
|
567
|
+
! !
|
568
|
+
|
569
|
+
TestCase subclass: #ObjectTest
|
570
|
+
instanceVariableNames: ''
|
571
|
+
category: 'Kernel-Tests'!
|
572
|
+
|
573
|
+
!ObjectTest methodsFor: 'tests'!
|
574
|
+
|
575
|
+
testEquality
|
576
|
+
| o |
|
577
|
+
o := Object new.
|
578
|
+
self deny: o = Object new.
|
579
|
+
self assert: o = o.
|
580
|
+
self assert: o yourself = o.
|
581
|
+
self assert: o = o yourself
|
582
|
+
!
|
583
|
+
|
584
|
+
testIdentity
|
585
|
+
| o |
|
586
|
+
o := Object new.
|
587
|
+
self deny: o == Object new.
|
588
|
+
self assert: o == o
|
589
|
+
!
|
590
|
+
|
591
|
+
testHalt
|
592
|
+
self should: [Object new halt] raise: Error
|
593
|
+
!
|
594
|
+
|
595
|
+
testBasicAccess
|
596
|
+
| o |
|
597
|
+
o := Object new.
|
598
|
+
o basicAt: 'a' put: 1.
|
599
|
+
self assert: (o basicAt: 'a') equals: 1.
|
600
|
+
self assert: (o basicAt: 'b') equals: nil
|
601
|
+
!
|
602
|
+
|
603
|
+
testNilUndefined
|
604
|
+
"nil in Smalltalk is the undefined object in JS"
|
605
|
+
|
606
|
+
self assert: nil = undefined
|
607
|
+
!
|
608
|
+
|
609
|
+
testidentityHash
|
610
|
+
| o1 o2 |
|
611
|
+
|
612
|
+
o1 := Object new.
|
613
|
+
o2 := Object new.
|
614
|
+
|
615
|
+
self assert: o1 identityHash == o1 identityHash.
|
616
|
+
self deny: o1 identityHash == o2 identityHash
|
617
|
+
!
|
618
|
+
|
619
|
+
testBasicPerform
|
620
|
+
| o |
|
621
|
+
o := Object new.
|
622
|
+
o basicAt: 'func' put: ['hello'].
|
623
|
+
o basicAt: 'func2' put: [:a | a + 1].
|
624
|
+
|
625
|
+
self assert: (o basicPerform: 'func') equals: 'hello'.
|
626
|
+
self assert: (o basicPerform: 'func2' withArguments: #(3)) equals: 4
|
627
|
+
!
|
628
|
+
|
629
|
+
testIfNil
|
630
|
+
self deny: Object new isNil.
|
631
|
+
self deny: (Object new ifNil: [true]) = true.
|
632
|
+
self assert: (Object new ifNotNil: [true]) = true.
|
633
|
+
|
634
|
+
self assert: (Object new ifNil: [false] ifNotNil: [true]) = true.
|
635
|
+
self assert: (Object new ifNotNil: [true] ifNil: [false]) = true
|
636
|
+
!
|
637
|
+
|
638
|
+
testInstVars
|
639
|
+
| o |
|
640
|
+
o := ObjectMock new.
|
641
|
+
self assert: (o instVarAt: #foo) equals: nil.
|
642
|
+
|
643
|
+
o instVarAt: #foo put: 1.
|
644
|
+
self assert: (o instVarAt: #foo) equals: 1.
|
645
|
+
self assert: (o instVarAt: 'foo') equals: 1
|
646
|
+
!
|
647
|
+
|
648
|
+
testYourself
|
649
|
+
| o |
|
650
|
+
o := ObjectMock new.
|
651
|
+
self assert: o yourself == o
|
652
|
+
!
|
653
|
+
|
654
|
+
testDNU
|
655
|
+
self should: [Object new foo] raise: MessageNotUnderstood
|
656
|
+
! !
|
657
|
+
|
658
|
+
TestCase subclass: #SymbolTest
|
659
|
+
instanceVariableNames: ''
|
660
|
+
category: 'Kernel-Tests'!
|
661
|
+
|
662
|
+
!SymbolTest methodsFor: 'tests'!
|
663
|
+
|
664
|
+
testEquality
|
665
|
+
self assert: #hello = #hello.
|
666
|
+
self deny: #hello = #world.
|
667
|
+
|
668
|
+
self assert: #hello = #hello yourself.
|
669
|
+
self assert: #hello yourself = #hello.
|
670
|
+
|
671
|
+
self deny: #hello = 'hello'.
|
672
|
+
self deny: 'hello' = #hello.
|
673
|
+
!
|
674
|
+
|
675
|
+
testAt
|
676
|
+
self assert: (#hello at: 1) = 'h'.
|
677
|
+
self assert: (#hello at: 5) = 'o'.
|
678
|
+
self assert: (#hello at: 6 ifAbsent: [nil]) = nil
|
679
|
+
!
|
680
|
+
|
681
|
+
testAtPut
|
682
|
+
"Symbol instances are read-only"
|
683
|
+
self should: ['hello' at: 1 put: 'a'] raise: Error
|
684
|
+
!
|
685
|
+
|
686
|
+
testIdentity
|
687
|
+
self assert: #hello == #hello.
|
688
|
+
self deny: #hello == #world.
|
689
|
+
|
690
|
+
self assert: #hello = #hello yourself.
|
691
|
+
self assert: #hello yourself = #hello asString asSymbol
|
692
|
+
!
|
693
|
+
|
694
|
+
testComparing
|
695
|
+
self assert: #ab > #aa.
|
696
|
+
self deny: #ab > #ba.
|
697
|
+
|
698
|
+
self assert: #ab < #ba.
|
699
|
+
self deny: #bb < #ba.
|
700
|
+
|
701
|
+
self assert: #ab >= #aa.
|
702
|
+
self deny: #ab >= #ba.
|
703
|
+
|
704
|
+
self assert: #ab <= #ba.
|
705
|
+
self deny: #bb <= #ba
|
706
|
+
!
|
707
|
+
|
708
|
+
testSize
|
709
|
+
self assert: #a size equals: 1.
|
710
|
+
self assert: #aaaaa size equals: 5
|
711
|
+
!
|
712
|
+
|
713
|
+
testAsString
|
714
|
+
self assert: #hello asString equals: 'hello'
|
715
|
+
!
|
716
|
+
|
717
|
+
testAsSymbol
|
718
|
+
self assert: #hello == #hello asSymbol
|
719
|
+
!
|
720
|
+
|
721
|
+
testCopying
|
722
|
+
self assert: #hello copy == #hello.
|
723
|
+
self assert: #hello deepCopy == #hello
|
724
|
+
!
|
725
|
+
|
726
|
+
testIsSymbolIsString
|
727
|
+
self assert: #hello isSymbol.
|
728
|
+
self deny: 'hello' isSymbol.
|
729
|
+
self deny: #hello isString.
|
730
|
+
self assert: 'hello' isString
|
731
|
+
! !
|
732
|
+
|
733
|
+
Object subclass: #ObjectMock
|
734
|
+
instanceVariableNames: 'foo bar'
|
735
|
+
category: 'Kernel-Tests'!
|
736
|
+
|
737
|
+
!ObjectMock methodsFor: 'not yet classified'!
|
738
|
+
|
739
|
+
foo
|
740
|
+
^foo
|
741
|
+
!
|
742
|
+
|
743
|
+
foo: anObject
|
744
|
+
foo := anObject
|
745
|
+
! !
|
746
|
+
|
747
|
+
TestCase subclass: #UndefinedTest
|
748
|
+
instanceVariableNames: ''
|
749
|
+
category: 'Kernel-Tests'!
|
750
|
+
|
751
|
+
!UndefinedTest methodsFor: 'tests'!
|
752
|
+
|
753
|
+
testIsNil
|
754
|
+
self assert: nil isNil.
|
755
|
+
self deny: nil notNil.
|
756
|
+
!
|
757
|
+
|
758
|
+
testIfNil
|
759
|
+
self assert: (nil ifNil: [true]) equals: true.
|
760
|
+
self deny: (nil ifNotNil: [true]) = true.
|
761
|
+
self assert: (nil ifNil: [true] ifNotNil: [false]) equals: true.
|
762
|
+
self deny: (nil ifNotNil: [true] ifNil: [false]) = true
|
763
|
+
!
|
764
|
+
|
765
|
+
testCopying
|
766
|
+
self assert: nil copy equals: nil
|
767
|
+
!
|
768
|
+
|
769
|
+
testDeepCopy
|
770
|
+
self assert: nil deepCopy = nil
|
771
|
+
! !
|
772
|
+
|
773
|
+
TestCase subclass: #PointTest
|
774
|
+
instanceVariableNames: ''
|
775
|
+
category: 'Kernel-Tests'!
|
776
|
+
|
777
|
+
!PointTest methodsFor: 'tests'!
|
778
|
+
|
779
|
+
testAccessing
|
780
|
+
self assert: (Point x: 3 y: 4) x equals: 3.
|
781
|
+
self assert: (Point x: 3 y: 4) y equals: 4.
|
782
|
+
self assert: (Point new x: 3) x equals: 3.
|
783
|
+
self assert: (Point new y: 4) y equals: 4
|
784
|
+
!
|
785
|
+
|
786
|
+
testAt
|
787
|
+
self assert: 3@4 equals: (Point x: 3 y: 4)
|
788
|
+
!
|
789
|
+
|
790
|
+
testEgality
|
791
|
+
self assert: 3@4 = (3@4).
|
792
|
+
self deny: 3@5 = (3@6)
|
793
|
+
!
|
794
|
+
|
795
|
+
testArithmetic
|
796
|
+
self assert: 3@4 * (3@4 ) equals: (Point x: 9 y: 16).
|
797
|
+
self assert: 3@4 + (3@4 ) equals: (Point x: 6 y: 8).
|
798
|
+
self assert: 3@4 - (3@4 ) equals: (Point x: 0 y: 0).
|
799
|
+
self assert: 6@8 / (3@4 ) equals: (Point x: 2 y: 2)
|
800
|
+
! !
|
801
|
+
|
802
|
+
TestCase subclass: #RandomTest
|
803
|
+
instanceVariableNames: ''
|
804
|
+
category: 'Kernel-Tests'!
|
805
|
+
|
806
|
+
!RandomTest methodsFor: 'tests'!
|
807
|
+
|
808
|
+
textNext
|
809
|
+
|
810
|
+
10000 timesRepeat: [
|
811
|
+
| current next |
|
812
|
+
next := Random new next.
|
813
|
+
self assert: (next >= 0).
|
814
|
+
self assert: (next < 1).
|
815
|
+
self deny: current = next.
|
816
|
+
next = current]
|
817
|
+
! !
|
818
|
+
|
819
|
+
TestCase subclass: #ClassBuilderTest
|
820
|
+
instanceVariableNames: 'builder theClass'
|
821
|
+
category: 'Kernel-Tests'!
|
822
|
+
|
823
|
+
!ClassBuilderTest methodsFor: 'running'!
|
824
|
+
|
825
|
+
setUp
|
826
|
+
builder := ClassBuilder new
|
827
|
+
!
|
828
|
+
|
829
|
+
tearDown
|
830
|
+
theClass ifNotNil: [Smalltalk current removeClass: theClass. theClass := nil]
|
831
|
+
!
|
832
|
+
|
833
|
+
testClassCopy
|
834
|
+
theClass := builder copyClass: ObjectMock named: 'ObjectMock2'.
|
835
|
+
self assert: theClass superclass == ObjectMock superclass.
|
836
|
+
self assert: theClass instanceVariableNames == ObjectMock instanceVariableNames.
|
837
|
+
self assert: theClass name equals: 'ObjectMock2'.
|
838
|
+
self assert: theClass package == ObjectMock package.
|
839
|
+
self assert: theClass methodDictionary keys equals: ObjectMock methodDictionary keys
|
840
|
+
!
|
841
|
+
|
842
|
+
testInstanceVariableNames
|
843
|
+
self assert: (builder instanceVariableNamesFor: ' hello world ') equals: #('hello' 'world')
|
844
|
+
! !
|
845
|
+
|
846
|
+
TestCase subclass: #SetTest
|
847
|
+
instanceVariableNames: ''
|
848
|
+
category: 'Kernel-Tests'!
|
849
|
+
|
850
|
+
!SetTest methodsFor: 'tests'!
|
851
|
+
|
852
|
+
testUnicity
|
853
|
+
| set |
|
854
|
+
set := Set new.
|
855
|
+
set add: 21.
|
856
|
+
set add: 'hello'.
|
857
|
+
|
858
|
+
set add: 21.
|
859
|
+
self assert: set size = 2.
|
860
|
+
|
861
|
+
set add: 'hello'.
|
862
|
+
self assert: set size = 2.
|
863
|
+
|
864
|
+
self assert: set asArray equals: #(21 'hello')
|
865
|
+
!
|
866
|
+
|
867
|
+
testAt
|
868
|
+
self should: [Set new at: 1 put: 2] raise: Error
|
869
|
+
!
|
870
|
+
|
871
|
+
testAddRemove
|
872
|
+
| set |
|
873
|
+
set := Set new.
|
874
|
+
|
875
|
+
self assert: set isEmpty.
|
876
|
+
|
877
|
+
set add: 3.
|
878
|
+
self assert: (set includes: 3).
|
879
|
+
|
880
|
+
set add: 5.
|
881
|
+
self assert: (set includes: 5).
|
882
|
+
|
883
|
+
set remove: 3.
|
884
|
+
self deny: (set includes: 3)
|
885
|
+
!
|
886
|
+
|
887
|
+
testSize
|
888
|
+
self assert: Set new size equals: 0.
|
889
|
+
self assert: (Set withAll: #(1 2 3 4)) size equals: 4.
|
890
|
+
self assert: (Set withAll: #(1 1 1 1)) size equals: 1
|
891
|
+
! !
|
892
|
+
|