resin 0.2.1 → 0.2.2

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