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