Commit | Line | Data |
---|---|---|
171bbab3 | 1 | (in-package :ps-test) |
eb17f15c HH |
2 | ;; Tests of everything in the reference. |
3 | ;; File is generated automatically from the text in reference.lisp by | |
4 | ;; the function make-reference-tests-dot-lisp in ref2test.lisp | |
5 | ;; so do not edit this file. | |
86cb6d98 LC |
6 | (eval-when (:compile-toplevel :load-toplevel :execute) |
7 | (def-suite ref-tests)) | |
eb17f15c HH |
8 | (in-suite ref-tests) |
9 | ||
94a05cdf LC |
10 | (test-ps-js statements-and-expressions-1 |
11 | (+ i (if 1 2 3)) | |
eb17f15c HH |
12 | "i + (1 ? 2 : 3)") |
13 | ||
94a05cdf LC |
14 | (test-ps-js statements-and-expressions-2 |
15 | (if 1 2 3) | |
eb17f15c HH |
16 | "if (1) { |
17 | 2; | |
18 | } else { | |
19 | 3; | |
20 | }") | |
21 | ||
94a05cdf | 22 | (test-ps-js symbol-conversion-1 |
3b238048 HH |
23 | !?#@% |
24 | "bangwhathashatpercent") | |
eb17f15c | 25 | |
94a05cdf LC |
26 | (test-ps-js symbol-conversion-2 |
27 | bla-foo-bar | |
eb17f15c HH |
28 | "blaFooBar") |
29 | ||
94a05cdf LC |
30 | (test-ps-js symbol-conversion-3 |
31 | *array | |
eb17f15c HH |
32 | "Array") |
33 | ||
94a05cdf LC |
34 | (test-ps-js symbol-conversion-6 |
35 | *global-array* | |
eb17f15c HH |
36 | "GLOBALARRAY") |
37 | ||
94a05cdf LC |
38 | (test-ps-js symbol-conversion-7 |
39 | *global-array*.length | |
eb17f15c HH |
40 | "GLOBALARRAY.length") |
41 | ||
94a05cdf LC |
42 | (test-ps-js number-literals-1 |
43 | 1 | |
eb17f15c HH |
44 | "1") |
45 | ||
94a05cdf LC |
46 | (test-ps-js number-literals-2 |
47 | 123.123 | |
eb17f15c HH |
48 | "123.123") |
49 | ||
94a05cdf LC |
50 | (test-ps-js number-literals-3 |
51 | #x10 | |
eb17f15c HH |
52 | "16") |
53 | ||
94a05cdf LC |
54 | (test-ps-js string-literals-1 |
55 | "foobar" | |
7a7d6c73 HH |
56 | "'foobar'") |
57 | ||
94a05cdf LC |
58 | (test-ps-js string-literals-2 |
59 | "bratzel bub" | |
7a7d6c73 HH |
60 | "'bratzel bub'") |
61 | ||
94a05cdf LC |
62 | (test-ps-js array-literals-1 |
63 | (array) | |
7a7d6c73 | 64 | "[ ]") |
eb17f15c | 65 | |
94a05cdf LC |
66 | (test-ps-js array-literals-2 |
67 | (array 1 2 3) | |
eb17f15c HH |
68 | "[ 1, 2, 3 ]") |
69 | ||
94a05cdf | 70 | (test-ps-js array-literals-3 |
eb17f15c | 71 | (array (array 2 3) |
94a05cdf | 72 | (array "foobar" "bratzel bub")) |
eb17f15c HH |
73 | "[ [ 2, 3 ], [ 'foobar', 'bratzel bub' ] ]") |
74 | ||
94a05cdf LC |
75 | (test-ps-js array-literals-4 |
76 | (make-array) | |
eb17f15c HH |
77 | "new Array()") |
78 | ||
94a05cdf LC |
79 | (test-ps-js array-literals-5 |
80 | (make-array 1 2 3) | |
eb17f15c HH |
81 | "new Array(1, 2, 3)") |
82 | ||
94a05cdf | 83 | (test-ps-js array-literals-6 |
eb17f15c HH |
84 | (make-array |
85 | (make-array 2 3) | |
94a05cdf | 86 | (make-array "foobar" "bratzel bub")) |
eb17f15c HH |
87 | "new Array(new Array(2, 3), new Array('foobar', 'bratzel bub'))") |
88 | ||
94a05cdf LC |
89 | (test-ps-js object-literals-1 |
90 | (create :foo "bar" :blorg 1) | |
91 | "{ foo : 'bar', | |
eb17f15c HH |
92 | blorg : 1 }") |
93 | ||
94a05cdf | 94 | (test-ps-js object-literals-2 |
eb17f15c HH |
95 | (create :foo "hihi" |
96 | :blorg (array 1 2 3) | |
94a05cdf LC |
97 | :another-object (create :schtrunz 1)) |
98 | "{ foo : 'hihi', | |
99 | blorg : [ 1, 2, 3 ], | |
eb17f15c HH |
100 | anotherObject : { schtrunz : 1 } }") |
101 | ||
94a05cdf LC |
102 | (test-ps-js object-literals-3 |
103 | (slot-value an-object 'foo) | |
eb17f15c HH |
104 | "anObject.foo") |
105 | ||
94a05cdf LC |
106 | (test-ps-js object-literals-4 |
107 | an-object.foo | |
eb17f15c HH |
108 | "anObject.foo") |
109 | ||
94a05cdf | 110 | (test-ps-js object-literals-5 |
eb17f15c | 111 | (with-slots (a b c) this |
94a05cdf | 112 | (+ a b c)) |
eb0befe2 | 113 | "(this).a + (this).b + (this).c;") |
eb17f15c | 114 | |
94a05cdf | 115 | (test-ps-js regular-expression-literals-1 |
ca4fb762 HH |
116 | (regex "foobar") |
117 | "/foobar/") | |
118 | ||
119 | (test-ps-js regular-expression-literals-2 | |
94a05cdf | 120 | (regex "/foobar/i") |
eb17f15c HH |
121 | "/foobar/i") |
122 | ||
94a05cdf LC |
123 | (test-ps-js literal-symbols-1 |
124 | T | |
7a7d6c73 HH |
125 | "true") |
126 | ||
94a05cdf LC |
127 | (test-ps-js literal-symbols-2 |
128 | FALSE | |
7a7d6c73 HH |
129 | "false") |
130 | ||
94a05cdf LC |
131 | (test-ps-js literal-symbols-3 |
132 | NIL | |
eb17f15c HH |
133 | "null") |
134 | ||
94a05cdf LC |
135 | (test-ps-js literal-symbols-4 |
136 | UNDEFINED | |
eb17f15c HH |
137 | "undefined") |
138 | ||
94a05cdf LC |
139 | (test-ps-js literal-symbols-5 |
140 | THIS | |
eb17f15c HH |
141 | "this") |
142 | ||
94a05cdf LC |
143 | (test-ps-js variables-1 |
144 | variable | |
eb17f15c HH |
145 | "variable") |
146 | ||
94a05cdf LC |
147 | (test-ps-js variables-2 |
148 | a-variable | |
eb17f15c HH |
149 | "aVariable") |
150 | ||
94a05cdf LC |
151 | (test-ps-js variables-3 |
152 | *math | |
eb17f15c HH |
153 | "Math") |
154 | ||
94a05cdf LC |
155 | (test-ps-js variables-4 |
156 | *math.floor | |
eb17f15c HH |
157 | "Math.floor") |
158 | ||
94a05cdf LC |
159 | (test-ps-js function-calls-and-method-calls-1 |
160 | (blorg 1 2) | |
eb17f15c HH |
161 | "blorg(1, 2)") |
162 | ||
94a05cdf LC |
163 | (test-ps-js function-calls-and-method-calls-2 |
164 | (foobar (blorg 1 2) (blabla 3 4) (array 2 3 4)) | |
eb17f15c HH |
165 | "foobar(blorg(1, 2), blabla(3, 4), [ 2, 3, 4 ])") |
166 | ||
94a05cdf LC |
167 | (test-ps-js function-calls-and-method-calls-3 |
168 | ((aref foo i) 1 2) | |
eb17f15c HH |
169 | "foo[i](1, 2)") |
170 | ||
94a05cdf LC |
171 | (test-ps-js function-calls-and-method-calls-4 |
172 | (.blorg this 1 2) | |
eb17f15c HH |
173 | "this.blorg(1, 2)") |
174 | ||
94a05cdf LC |
175 | (test-ps-js function-calls-and-method-calls-5 |
176 | (this.blorg 1 2) | |
eb17f15c HH |
177 | "this.blorg(1, 2)") |
178 | ||
94a05cdf LC |
179 | (test-ps-js function-calls-and-method-calls-6 |
180 | (.blorg (aref foobar 1) NIL T) | |
eb17f15c HH |
181 | "foobar[1].blorg(null, true)") |
182 | ||
94a05cdf LC |
183 | (test-ps-js operator-expressions-1 |
184 | (* 1 2) | |
eb17f15c HH |
185 | "1 * 2") |
186 | ||
94a05cdf LC |
187 | (test-ps-js operator-expressions-2 |
188 | (= 1 2) | |
eb17f15c HH |
189 | "1 == 2") |
190 | ||
94a05cdf LC |
191 | (test-ps-js operator-expressions-3 |
192 | (eql 1 2) | |
eb17f15c HH |
193 | "1 == 2") |
194 | ||
94a05cdf LC |
195 | (test-ps-js operator-expressions-5 |
196 | (* 1 (+ 2 3 4) 4 (/ 6 7)) | |
eb17f15c HH |
197 | "1 * (2 + 3 + 4) * 4 * (6 / 7)") |
198 | ||
94a05cdf LC |
199 | (test-ps-js operator-expressions-6 |
200 | (++ i) | |
eb17f15c HH |
201 | "i++") |
202 | ||
94a05cdf LC |
203 | (test-ps-js operator-expressions-7 |
204 | (-- i) | |
eb17f15c HH |
205 | "i--") |
206 | ||
94a05cdf LC |
207 | (test-ps-js operator-expressions-8 |
208 | (incf i) | |
eb17f15c HH |
209 | "++i") |
210 | ||
94a05cdf LC |
211 | (test-ps-js operator-expressions-9 |
212 | (decf i) | |
eb17f15c HH |
213 | "--i") |
214 | ||
94a05cdf LC |
215 | (test-ps-js operator-expressions-10 |
216 | (1- i) | |
eb17f15c HH |
217 | "i - 1") |
218 | ||
94a05cdf LC |
219 | (test-ps-js operator-expressions-11 |
220 | (1+ i) | |
eb17f15c HH |
221 | "i + 1") |
222 | ||
94a05cdf LC |
223 | (test-ps-js operator-expressions-12 |
224 | (not (< i 2)) | |
eb17f15c HH |
225 | "i >= 2") |
226 | ||
94a05cdf LC |
227 | (test-ps-js operator-expressions-13 |
228 | (not (eql i 2)) | |
eb17f15c HH |
229 | "i != 2") |
230 | ||
94a05cdf LC |
231 | (test-ps-js body-forms-1 |
232 | (progn (blorg i) (blafoo i)) | |
eb17f15c HH |
233 | "blorg(i); |
234 | blafoo(i);") | |
235 | ||
94a05cdf LC |
236 | (test-ps-js body-forms-2 |
237 | (+ i (progn (blorg i) (blafoo i))) | |
eb17f15c HH |
238 | "i + (blorg(i), blafoo(i))") |
239 | ||
94a05cdf | 240 | (test-ps-js function-definition-1 |
eb17f15c | 241 | (defun a-function (a b) |
94a05cdf | 242 | (return (+ a b))) |
eb17f15c HH |
243 | "function aFunction(a, b) { |
244 | return a + b; | |
245 | }") | |
246 | ||
94a05cdf LC |
247 | (test-ps-js function-definition-2 |
248 | (lambda (a b) (return (+ a b))) | |
eb17f15c HH |
249 | "function (a, b) { |
250 | return a + b; | |
251 | }") | |
252 | ||
94a05cdf LC |
253 | (test-ps-js assignment-1 |
254 | (setf a 1) | |
72332f2a | 255 | "a = 1;") |
eb17f15c | 256 | |
94a05cdf LC |
257 | (test-ps-js assignment-2 |
258 | (setf a 2 b 3 c 4 x (+ a b c)) | |
eb17f15c HH |
259 | "a = 2; |
260 | b = 3; | |
261 | c = 4; | |
262 | x = a + b + c;") | |
263 | ||
94a05cdf LC |
264 | (test-ps-js assignment-3 |
265 | (setf a (1+ a)) | |
72332f2a | 266 | "a++;") |
eb17f15c | 267 | |
94a05cdf | 268 | (test-ps-js assignment-4 |
8dcd51d2 | 269 | (setf a (+ a 2 3 4 a)) |
72332f2a | 270 | "a += 2 + 3 + 4 + a;") |
eb17f15c | 271 | |
94a05cdf LC |
272 | (test-ps-js assignment-5 |
273 | (setf a (- 1 a)) | |
72332f2a | 274 | "a = 1 - a;") |
eb17f15c | 275 | |
94a05cdf LC |
276 | (test-ps-js single-argument-statements-1 |
277 | (return 1) | |
eb17f15c HH |
278 | "return 1") |
279 | ||
94a05cdf LC |
280 | (test-ps-js single-argument-statements-2 |
281 | (throw "foobar") | |
eb17f15c HH |
282 | "throw 'foobar'") |
283 | ||
94a05cdf LC |
284 | (test-ps-js single-argument-expression-1 |
285 | (delete (new (*foobar 2 3 4))) | |
eb17f15c HH |
286 | "delete new Foobar(2, 3, 4)") |
287 | ||
94a05cdf | 288 | (test-ps-js single-argument-expression-2 |
eb17f15c HH |
289 | (if (= (typeof blorg) *string) |
290 | (alert (+ "blorg is a string: " blorg)) | |
94a05cdf | 291 | (alert "blorg is not a string")) |
eb17f15c HH |
292 | "if (typeof blorg == String) { |
293 | alert('blorg is a string: ' + blorg); | |
294 | } else { | |
295 | alert('blorg is not a string'); | |
296 | }") | |
297 | ||
94a05cdf | 298 | (test-ps-js conditional-statements-1 |
eb17f15c HH |
299 | (if (blorg.is-correct) |
300 | (progn (carry-on) (return i)) | |
94a05cdf | 301 | (alert "blorg is not correct!")) |
eb17f15c HH |
302 | "if (blorg.isCorrect()) { |
303 | carryOn(); | |
304 | return i; | |
305 | } else { | |
306 | alert('blorg is not correct!'); | |
307 | }") | |
308 | ||
94a05cdf LC |
309 | (test-ps-js conditional-statements-2 |
310 | (+ i (if (blorg.add-one) 1 2)) | |
eb17f15c HH |
311 | "i + (blorg.addOne() ? 1 : 2)") |
312 | ||
94a05cdf | 313 | (test-ps-js conditional-statements-3 |
eb17f15c HH |
314 | (when (blorg.is-correct) |
315 | (carry-on) | |
94a05cdf | 316 | (return i)) |
eb17f15c HH |
317 | "if (blorg.isCorrect()) { |
318 | carryOn(); | |
319 | return i; | |
320 | }") | |
321 | ||
94a05cdf | 322 | (test-ps-js conditional-statements-4 |
eb17f15c | 323 | (unless (blorg.is-correct) |
94a05cdf | 324 | (alert "blorg is not correct!")) |
eb17f15c HH |
325 | "if (!blorg.isCorrect()) { |
326 | alert('blorg is not correct!'); | |
327 | }") | |
328 | ||
94a05cdf LC |
329 | (test-ps-js variable-declaration-1 |
330 | (defvar *a* (array 1 2 3)) | |
7a7d6c73 | 331 | "var A = [ 1, 2, 3 ];") |
eb17f15c | 332 | |
94a05cdf | 333 | (test-ps-js variable-declaration-2 |
eb17f15c HH |
334 | (if (= i 1) |
335 | (progn (defvar blorg "hallo") | |
336 | (alert blorg)) | |
337 | (progn (defvar blorg "blitzel") | |
94a05cdf | 338 | (alert blorg))) |
eb17f15c HH |
339 | "if (i == 1) { |
340 | var blorg = 'hallo'; | |
341 | alert(blorg); | |
342 | } else { | |
343 | var blorg = 'blitzel'; | |
344 | alert(blorg); | |
345 | }") | |
346 | ||
94a05cdf | 347 | (test-ps-js variable-declaration-3 |
eb17f15c HH |
348 | (if (= i 1) |
349 | (let ((blorg "hallo")) | |
350 | (alert blorg)) | |
351 | (let ((blorg "blitzel")) | |
94a05cdf | 352 | (alert blorg))) |
eb17f15c HH |
353 | "if (i == 1) { |
354 | var blorg = 'hallo'; | |
355 | alert(blorg); | |
356 | } else { | |
357 | var blorg = 'blitzel'; | |
358 | alert(blorg); | |
359 | }") | |
360 | ||
94a05cdf | 361 | (test-ps-js iteration-constructs-1 |
eb17f15c HH |
362 | (do ((i 0 (1+ i)) |
363 | (l (aref blorg i) (aref blorg i))) | |
364 | ((or (= i blorg.length) | |
365 | (eql l "Fumitastic"))) | |
94a05cdf LC |
366 | (document.write (+ "L is " l))) |
367 | "for (var i = 0, l = blorg[i]; | |
7a7d6c73 | 368 | !(i == blorg.length || l == 'Fumitastic'); |
eb17f15c HH |
369 | i = i + 1, l = blorg[i]) { |
370 | document.write('L is ' + l); | |
371 | }") | |
372 | ||
94a05cdf | 373 | (test-ps-js iteration-constructs-2 |
eb17f15c | 374 | (dotimes (i blorg.length) |
94a05cdf | 375 | (document.write (+ "L is " (aref blorg i)))) |
7a7d6c73 | 376 | "for (var i = 0; i < blorg.length; i = i + 1) { |
eb17f15c HH |
377 | document.write('L is ' + blorg[i]); |
378 | }") | |
379 | ||
94a05cdf | 380 | (test-ps-js iteration-constructs-3 |
eb17f15c | 381 | (dolist (l blorg) |
94a05cdf | 382 | (document.write (+ "L is " l))) |
7a7d6c73 HH |
383 | "{ |
384 | var tmpArr1 = blorg; | |
385 | for (var tmpI2 = 0; tmpI2 < tmpArr1.length; | |
386 | tmpI2 = tmpI2 + 1) { | |
387 | var l = tmpArr1[tmpI2]; | |
388 | document.write('L is ' + l); | |
379978f8 | 389 | }; |
eb17f15c HH |
390 | }") |
391 | ||
94a05cdf | 392 | (test-ps-js iteration-constructs-4 |
eb17f15c | 393 | (doeach (i object) |
94a05cdf | 394 | (document.write (+ i " is " (aref object i)))) |
eb17f15c HH |
395 | "for (var i in object) { |
396 | document.write(i + ' is ' + object[i]); | |
397 | }") | |
398 | ||
94a05cdf | 399 | (test-ps-js iteration-constructs-5 |
eb17f15c | 400 | (while (film.is-not-finished) |
94a05cdf | 401 | (this.eat (new *popcorn))) |
eb17f15c HH |
402 | "while (film.isNotFinished()) { |
403 | this.eat(new Popcorn); | |
404 | }") | |
405 | ||
94a05cdf | 406 | (test-ps-js the-case-statement-1 |
eb17f15c | 407 | (case (aref blorg i) |
3c393e09 | 408 | ((1 "one") (alert "one")) |
eb17f15c | 409 | (2 (alert "two")) |
3c393e09 | 410 | (t (alert "default clause"))) |
eb17f15c | 411 | "switch (blorg[i]) { |
3c393e09 HH |
412 | case 1: ; |
413 | case 'one': | |
414 | alert('one'); | |
415 | break; | |
416 | case 2: | |
417 | alert('two'); | |
418 | break; | |
eb17f15c HH |
419 | default: alert('default clause'); |
420 | }") | |
421 | ||
3c393e09 HH |
422 | (test-ps-js the-case-statement-2 |
423 | (switch (aref blorg i) | |
424 | (1 (alert "If I get here")) | |
425 | (2 (alert "I also get here")) | |
426 | (default (alert "I always get here"))) | |
427 | "switch (blorg[i]) { | |
428 | case 1: alert('If I get here'); | |
429 | case 2: alert('I also get here'); | |
430 | default: alert('I always get here'); | |
431 | }") | |
432 | ||
94a05cdf | 433 | (test-ps-js the-with-statement-1 |
5d9cdcad | 434 | (with (create :foo "foo" :i "i") |
94a05cdf LC |
435 | (alert (+ "i is now intermediary scoped: " i))) |
436 | "with ({ foo : 'foo', | |
eb17f15c HH |
437 | i : 'i' }) { |
438 | alert('i is now intermediary scoped: ' + i); | |
439 | }") | |
440 | ||
94a05cdf LC |
441 | (test-ps-js the-try-statement-1 |
442 | (try (throw "i") | |
eb17f15c HH |
443 | (:catch (error) |
444 | (alert (+ "an error happened: " error))) | |
445 | (:finally | |
94a05cdf | 446 | (alert "Leaving the try form"))) |
eb17f15c HH |
447 | "try { |
448 | throw 'i'; | |
449 | } catch (error) { | |
450 | alert('an error happened: ' + error); | |
451 | } finally { | |
452 | alert('Leaving the try form'); | |
453 | }") | |
454 | ||
94a05cdf LC |
455 | (test-ps-js the-html-generator-1 |
456 | (html ((:a :href "foobar") "blorg")) | |
7a7d6c73 | 457 | "'<a href=\"foobar\">blorg</a>'") |
eb17f15c | 458 | |
94a05cdf LC |
459 | (test-ps-js the-html-generator-2 |
460 | (html ((:a :href (generate-a-link)) "blorg")) | |
7a7d6c73 | 461 | "'<a href=\"' + generateALink() + '\">blorg</a>'") |
eb17f15c | 462 | |
94a05cdf | 463 | (test-ps-js the-html-generator-3 |
eb17f15c | 464 | (document.write |
7a7d6c73 | 465 | (html ((:a :href "#" |
94a05cdf | 466 | :onclick (js-inline (transport))) "link"))) |
7a7d6c73 HH |
467 | "document.write |
468 | ('<a href=\"#\" onclick=\"' + 'javascript:transport();' + '\">link</a>')") | |
eb17f15c | 469 | |
94a05cdf | 470 | (test-ps-js the-html-generator-4 |
b8fa1a27 HH |
471 | (let ((disabled nil) |
472 | (authorized t)) | |
473 | (setf element.inner-h-t-m-l | |
474 | (html ((:textarea (or disabled (not authorized)) :disabled "disabled") | |
475 | "Edit me")))) | |
476 | " { | |
477 | var disabled = null; | |
478 | var authorized = true; | |
479 | element.innerHTML = | |
480 | '<textarea' | |
481 | + (disabled || !authorized ? ' disabled=\"' + 'disabled' + '\"' : '') | |
482 | + '>Edit me</textarea>'; | |
483 | }") | |
484 | ||
485 | (test-ps-js the-html-generator-5 | |
28967ee4 | 486 | (css-inline :color "red" |
94a05cdf | 487 | :font-size "x-small") |
28967ee4 HH |
488 | "'color:red;font-size:x-small'") |
489 | ||
b8fa1a27 | 490 | (test-ps-js the-html-generator-6 |
28967ee4 HH |
491 | (defun make-color-div(color-name) |
492 | (return (html ((:div :style (css-inline :color color-name)) | |
94a05cdf | 493 | color-name " looks like this.")))) |
28967ee4 HH |
494 | "function makeColorDiv(colorName) { |
495 | return '<div style=\"' + ('color:' + colorName) + '\">' + colorName | |
496 | + ' looks like this.</div>'; | |
497 | }") | |
498 |