AmberVM 0.0.19 → 0.0.20

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.
@@ -1,415 +0,0 @@
1
- $: << 'lib'
2
- require 'amber'
3
- require 'amber/languages'
4
- require 'amber/languages/ecma_fuku'
5
-
6
- describe AmberVM::Languages::ECMA_Fuku do
7
- before(:each) do
8
- @compiler = AmberVM::Languages::ECMA_Fuku.new
9
- @env = {}
10
- end
11
-
12
- def run code
13
- @compiler.compile(code).execute(@env)
14
- end
15
-
16
- describe "literals" do
17
- describe "strings" do
18
- it "should handle string literals" do
19
- res = run <<-EOC
20
- "Hallo!"
21
- EOC
22
- res.should == "Hallo!"
23
- end
24
-
25
- it "should handle newline replacements" do
26
- res = run '"\n"'
27
- res.should == "\n"
28
- end
29
-
30
- it "should handle newline replacements" do
31
- res = run <<-'EOC'
32
- "\t"
33
- EOC
34
- res.should == "\t"
35
- end
36
- it "should handle newline replacements" do
37
- res = run <<-'EOC'
38
- "\n"
39
- EOC
40
- res.should == "\n"
41
- end
42
-
43
- it "should handle double escapes" do
44
- res = run <<-'EOC'
45
- "\\t"
46
- EOC
47
- res.should == "\\t"
48
- end
49
-
50
- it "should handle double escapes followed by single escapes" do
51
- res = run <<-'EOF'
52
- "\\\t"
53
- EOF
54
- res.should == "\\\t"
55
- end
56
- end
57
-
58
- it "should handle number literals" do
59
- res = run <<-EOC
60
- 42
61
- EOC
62
- res.should == 42
63
- end
64
-
65
- describe "array" do
66
- it "should handle array literals with no elements" do
67
- res = run <<-EOC
68
- []
69
- EOC
70
- res.should == []
71
- end
72
-
73
- it "should handle array literals with one element" do
74
- res = run <<-EOC
75
- ["Kekse!"]
76
- EOC
77
- res.should == ["Kekse!"]
78
- end
79
-
80
- it "should handle array literals with arrays in it" do
81
- res = run <<-EOC
82
- [["Kekse!",2],1]
83
- EOC
84
- res.should == [["Kekse!",2],1]
85
- end
86
-
87
- it "should handle array literals with multiple elements" do
88
- res = run <<-EOC
89
- [42, "Kekse!"]
90
- EOC
91
- res.should == [42, "Kekse!"]
92
- end
93
-
94
- it "should allow to set array elements" do
95
- res = run <<-EOC
96
- array = [];
97
- array[0] = 42;
98
- array;
99
- EOC
100
- res.should == [42]
101
- end
102
- end
103
-
104
- describe "Objects array" do
105
- it "should handle an empty object" do
106
- res = run <<-EOC
107
- a = {}
108
- EOC
109
- @env['a'].should be_instance_of(OpenStruct)
110
- end
111
-
112
- it "should handle an object with variables" do
113
- res = run <<-EOC
114
- {a: 1}
115
- EOC
116
- res.should be_instance_of(OpenStruct)
117
- res.a.should == 1
118
- end
119
- it "should handle an object with functions" do
120
- res = run <<-EOC
121
- {f: function(){1;}}
122
- EOC
123
- res.should be_instance_of(OpenStruct)
124
- res.f.should be
125
- res.f.call.should == :undefined
126
- end
127
- end
128
-
129
- it "should handle true literals" do
130
- res = run <<-EOC
131
- true
132
- EOC
133
- res.should be_true
134
- end
135
-
136
- it "should handle false literals" do
137
- res = run <<-EOC
138
- false
139
- EOC
140
- res.should_not be_true
141
- end
142
- end
143
-
144
- describe "array" do
145
- it "should allow accessing elements" do
146
- @env['a'] = [1,2,3]
147
- res = run <<-EOC
148
- a[0]
149
- EOC
150
- res.should == 1
151
- end
152
-
153
- it "should allow setting elements" do
154
- @env['a'] = [1,2,3]
155
- res = run <<-EOC
156
- a[0] = 42;
157
- EOC
158
- res.should == 42
159
- @env['a'][0].should == 42
160
- end
161
- it "should allow accessing the length" do
162
- @env['a'] = [1,2,3]
163
- res = run <<-EOC
164
- a.length
165
- EOC
166
- res.should == 3
167
- end
168
- end
169
-
170
- describe "variables" do
171
- it "should recognize simple assignments" do
172
- res = run <<-EOC
173
- variable = 'value';
174
- EOC
175
- res.should == 'value'
176
- @env['variable'].should == 'value'
177
- end
178
-
179
- it "should recognize local assignments" do
180
- res = run <<-EOC
181
- var variable = 'value';
182
- EOC
183
- res.should == 'value'
184
- @env['variable'].should == 'value'
185
- end
186
-
187
- it "should recognize multiple local assignments" do
188
- res = run <<-EOC
189
- var i = 'a', j = 'b';
190
- EOC
191
- res.should == 'b'
192
- @env['i'].should == 'a'
193
- @env['j'].should == 'b'
194
- end
195
-
196
- it "should scope global assignments correctly" do
197
- res = run <<-EOC
198
- variable = 'outer scope';
199
- {
200
- var variable = 'inner scope';
201
- }
202
- EOC
203
- res.should == 'inner scope'
204
- @env['variable'].should == 'inner scope'
205
- end
206
- end
207
-
208
- describe "conditions" do
209
- describe "true condition" do
210
- describe "without blocks" do
211
-
212
- it "should handle loops without else" do
213
- res = run <<-EOC
214
- if (true)
215
- 42
216
- EOC
217
- res.should == 42
218
- end
219
-
220
- it "should handle loops with else" do
221
- res = run <<-EOC
222
- if (true)
223
- 42;
224
- else
225
- 23
226
- EOC
227
- res.should == 42
228
- end
229
-
230
- it "should handle loops with else and ugly ';'" do
231
- res = run <<-EOC
232
- if (true)
233
- 42;
234
- else
235
- 23
236
- EOC
237
- res.should == 42
238
- end
239
- end
240
-
241
- describe "with blocks" do
242
- it "should handle condition without else" do
243
- res = run <<-EOC
244
- if (true) {
245
- 42;
246
- }
247
- EOC
248
- res.should == 42
249
- end
250
- it "should handle condition with else" do
251
- res = run <<-EOC
252
- if (true) {
253
- 42;
254
- } else {
255
- 23;
256
- }
257
- EOC
258
- res.should == 42
259
- end
260
- end
261
- end
262
- describe "false condition" do
263
- describe "without blocks" do
264
- it "should handle condition without else" do
265
- res = run <<-EOC
266
- if (false)
267
- 42;
268
- EOC
269
- res.should == nil
270
- end
271
- it "should handle condition with else" do
272
- res = run <<-EOC
273
- if (false)
274
- 42;
275
- else
276
- 23;
277
- EOC
278
- res.should == 23
279
- end
280
- end
281
- describe "with blocks" do
282
- it "should handle condition without else" do
283
- res = run <<-EOC
284
- if (false) {
285
- 42;
286
- }
287
- EOC
288
- res.should be_nil
289
- end
290
- it "should handle condition with else" do
291
- res = run <<-EOC
292
- if (false) {
293
- 42;
294
- } else {
295
- 23;
296
- }
297
- EOC
298
- res.should == 23
299
- end
300
- end
301
- end
302
- end
303
-
304
- describe "loops" do
305
- it "should handle for loops" do
306
- res = run <<-EOC
307
- variable = "";
308
- for (i = 0; i <= 3; i = i + 1) {
309
- variable = variable + i;
310
- }
311
- EOC
312
- @env['variable'].should == '0123'
313
- end
314
-
315
- it "should handle for loops (bug prevention)" do
316
- code = <<-EOC
317
- function test() {for (var i = 1; i <= 2; i+=1) {};};
318
- test();
319
- EOC
320
- proc { run(code) }.should_not raise_error
321
- end
322
-
323
- it "should handle while loops" do
324
- res = run <<-EOC
325
- variable = "";
326
- i = 0;
327
- while (i < 3) {
328
- i = i + 1;
329
- variable = variable + i;
330
- }
331
- EOC
332
- @env['variable'].should == '123'
333
- end
334
-
335
- it "should handle do while loops" do
336
- res = run <<-EOC
337
- variable = "";
338
- i = 0;
339
- do {
340
- i = i + 1;
341
- variable = variable + i;
342
- } while (i < 3)
343
- EOC
344
- @env['variable'].should == '123'
345
- end
346
- end
347
- it "should execute do while loops at least once" do
348
- res = run <<-EOC
349
- variable = "";
350
- i = 0;
351
- do {
352
- i = i + 1;
353
- variable = variable + i;
354
- } while (i < 0)
355
- EOC
356
- res.should be_nil
357
- @env['variable'].should == '1'
358
- end
359
-
360
- describe "objects" do
361
- it "should handle object variables" do
362
- obj = mock('object mock')
363
- obj.should_receive(:test).with(no_args).and_return('ok')
364
- @env['obj'] = obj
365
- res = run <<-EOC
366
- obj.test;
367
- EOC
368
- res.should == 'ok'
369
- end
370
-
371
- it "should handle object functions" do
372
- obj = mock('object mock')
373
- function = mock('function mock')
374
- obj.should_receive(:test).with(no_args).and_return(function)
375
- function.should_receive(:call).once.with(no_args).and_return('ok')
376
- @env['obj'] = obj
377
- res = run <<-EOC
378
- obj.test();
379
- EOC
380
- res.should == 'ok'
381
- end
382
- end
383
-
384
-
385
- describe "opperators" do
386
- it "should recognize ++" do
387
- @env['i'] = 41
388
- res = run <<-EOC
389
- i++;
390
- EOC
391
- res.should == 41
392
- end
393
- it "should recognize --" do
394
- @env['i'] = 43
395
- res = run <<-EOC
396
- i--;
397
- EOC
398
- res.should == 43
399
- end
400
- it "should recognize +=" do
401
- @env['i'] = 40
402
- res = run <<-EOC
403
- i += 2;
404
- EOC
405
- res.should == 42
406
- end
407
- it "should recognize -=" do
408
- @env['i'] = 44
409
- res = run <<-EOC
410
- i -= 2;
411
- EOC
412
- res.should == 42
413
- end
414
- end
415
- end
@@ -1,33 +0,0 @@
1
- $: << 'lib'
2
- require 'amber'
3
- require 'amber/languages'
4
- require 'amber/languages/ecma_fuku'
5
-
6
- describe AmberVM::Languages::ECMA_Fuku do
7
- before(:each) do
8
- @env = {}
9
- @compiler = AmberVM::Languages::ECMA_Fuku.new
10
- end
11
-
12
- def run code
13
- @compiler.compile(code).execute(@env)
14
- end
15
-
16
- describe "arithmetic" do
17
- it "should handle >>>" do
18
- result = run <<-CODE
19
- -1766 >>> 12
20
- CODE
21
- result.should == 1048575
22
- end
23
- it "should handle >>>=" do
24
- result = run <<-CODE
25
- a = -8345;
26
- a >>>= 4;
27
- a
28
- CODE
29
- result.should == 268434934
30
- end
31
- end
32
-
33
- end
@@ -1,52 +0,0 @@
1
- $: << 'lib'
2
- require 'amber'
3
- require 'amber/languages'
4
- require 'amber/languages/ecma_fuku'
5
-
6
- describe AmberVM::Languages::ECMA_Fuku do
7
- before(:each) do
8
- @env = {}
9
- @compiler = AmberVM::Languages::ECMA_Fuku.new
10
- end
11
-
12
- def run code
13
- @compiler.compile(code).execute(@env)
14
- end
15
-
16
- describe "variables" do
17
- it "should get variables" do
18
- @env['test'] = 42
19
- result = run <<-CODE
20
- test
21
- CODE
22
- result.should == 42
23
- end
24
-
25
- it "should allow to assign literals to variables" do
26
- result = run <<-CODE
27
- test = 23
28
- CODE
29
- result.should == 23
30
- @env['test'].should == 23
31
- end
32
-
33
- it "should autocast strings when using <var>++" do
34
- result = run <<-CODE
35
- test = '1.2';
36
- test++
37
- CODE
38
- result.should == 1.2
39
- @env['test'].should == 2.2
40
- end
41
- end
42
-
43
- describe '+ operator' do
44
- it 'should behave like ECMA' do
45
- result = run <<-CODE
46
- 1 + "3"
47
- CODE
48
- result.should == "13"
49
- end
50
- end
51
-
52
- end