(in-package :ps-test) ;; Tests of everything in the reference. ;; File is generated automatically from the text in reference.lisp by ;; the function make-reference-tests-dot-lisp in ref2test.lisp ;; so do not edit this file. (eval-when (:compile-toplevel :load-toplevel :execute) (def-suite ref-tests)) (in-suite ref-tests) (test-ps-js statements-and-expressions-1 (+ i (if 1 2 3)) "i + (1 ? 2 : 3)") (test-ps-js statements-and-expressions-2 (if 1 2 3) "if (1) { 2; } else { 3; }") (test-ps-js symbol-conversion-1 !?#@% "bangwhathashatpercent") (test-ps-js symbol-conversion-2 bla-foo-bar "blaFooBar") (test-ps-js symbol-conversion-3 *array "Array") (test-ps-js symbol-conversion-6 *global-array* "GLOBALARRAY") (test-ps-js symbol-conversion-7 *global-array*.length "GLOBALARRAY.length") (test-ps-js number-literals-1 1 "1") (test-ps-js number-literals-2 123.123 "123.123") (test-ps-js number-literals-3 #x10 "16") (test-ps-js string-literals-1 "foobar" "'foobar'") (test-ps-js string-literals-2 "bratzel bub" "'bratzel bub'") (test-ps-js array-literals-1 (array) "[ ]") (test-ps-js array-literals-2 (array 1 2 3) "[ 1, 2, 3 ]") (test-ps-js array-literals-3 (array (array 2 3) (array "foobar" "bratzel bub")) "[ [ 2, 3 ], [ 'foobar', 'bratzel bub' ] ]") (test-ps-js array-literals-4 (make-array) "new Array()") (test-ps-js array-literals-5 (make-array 1 2 3) "new Array(1, 2, 3)") (test-ps-js array-literals-6 (make-array (make-array 2 3) (make-array "foobar" "bratzel bub")) "new Array(new Array(2, 3), new Array('foobar', 'bratzel bub'))") (test-ps-js object-literals-1 (create :foo "bar" :blorg 1) "{ foo : 'bar', blorg : 1 }") (test-ps-js object-literals-2 (create :foo "hihi" :blorg (array 1 2 3) :another-object (create :schtrunz 1)) "{ foo : 'hihi', blorg : [ 1, 2, 3 ], anotherObject : { schtrunz : 1 } }") (test-ps-js object-literals-3 (slot-value an-object 'foo) "anObject.foo") (test-ps-js object-literals-4 an-object.foo "anObject.foo") (test-ps-js object-literals-5 (with-slots (a b c) this (+ a b c)) "this.a + this.b + this.c;") (test-ps-js regular-expression-literals-1 (regex "foobar") "/foobar/") (test-ps-js regular-expression-literals-2 (regex "/foobar/i") "/foobar/i") (test-ps-js literal-symbols-1 T "true") (test-ps-js literal-symbols-2 FALSE "false") (test-ps-js literal-symbols-3 F "false") (test-ps-js literal-symbols-4 NIL "null") (test-ps-js literal-symbols-5 UNDEFINED "undefined") (test-ps-js literal-symbols-6 THIS "this") (test-ps-js variables-1 variable "variable") (test-ps-js variables-2 a-variable "aVariable") (test-ps-js variables-3 *math "Math") (test-ps-js variables-4 *math.floor "Math.floor") (test-ps-js function-calls-and-method-calls-1 (blorg 1 2) "blorg(1, 2)") (test-ps-js function-calls-and-method-calls-2 (foobar (blorg 1 2) (blabla 3 4) (array 2 3 4)) "foobar(blorg(1, 2), blabla(3, 4), [ 2, 3, 4 ])") (test-ps-js function-calls-and-method-calls-3 ((slot-value this 'blorg) 1 2) "this.blorg(1, 2)") (test-ps-js function-calls-and-method-calls-4 ((aref foo i) 1 2) "foo[i](1, 2)") (test-ps-js function-calls-and-method-calls-5 ((slot-value (aref foobar 1) 'blorg) NIL T) "foobar[1].blorg(null, true)") (test-ps-js function-calls-and-method-calls-6 (this.blorg 1 2) "this.blorg(1, 2)") (test-ps-js operator-expressions-1 (* 1 2) "1 * 2") (test-ps-js operator-expressions-2 (= 1 2) "1 == 2") (test-ps-js operator-expressions-3 (eql 1 2) "1 == 2") (test-ps-js operator-expressions-4 (* 1 (+ 2 3 4) 4 (/ 6 7)) "1 * (2 + 3 + 4) * 4 * (6 / 7)") (test-ps-js operator-expressions-5 (incf i) "++i") (test-ps-js operator-expressions-6 (decf i) "--i") (test-ps-js operator-expressions-7 (1- i) "i - 1") (test-ps-js operator-expressions-8 (1+ i) "i + 1") (test-ps-js operator-expressions-9 (not (< i 2)) "i >= 2") (test-ps-js operator-expressions-10 (not (eql i 2)) "i != 2") (test-ps-js body-forms-1 (progn (blorg i) (blafoo i)) "blorg(i); blafoo(i);") (test-ps-js body-forms-2 (+ i (progn (blorg i) (blafoo i))) "i + (blorg(i), blafoo(i))") (test-ps-js function-definition-1 (defun a-function (a b) (return (+ a b))) "function aFunction(a, b) { return a + b; }") (test-ps-js function-definition-2 (lambda (a b) (return (+ a b))) "function (a, b) { return a + b; }") (test-ps-js assignment-1 (setf a 1) "a = 1;") (test-ps-js assignment-2 (setf a 2 b 3 c 4 x (+ a b c)) "a = 2; b = 3; c = 4; x = a + b + c;") (test-ps-js assignment-3 (setf a (+ a 2 3 4 a)) "a += 2 + 3 + 4 + a;") (test-ps-js assignment-4 (setf a (- 1 a)) "a = 1 - a;") (test-ps-js assignment-5 (let* ((a 1) (b 2)) (psetf a b b a)) "var a = 1; var b = 2; var _js1 = b; var _js2 = a; a = _js1; b = _js2;") (test-ps-js assignment-6 (setq a 1) "a = 1;") (test-ps-js assignment-8 (defun (setf color) (new-color el) (setf (slot-value (slot-value el 'style) 'color) new-color)) "function __setf_color(newColor, el) { el.style.color = newColor; };") (test-ps-js assignment-9 (setf (color some-div) (+ 23 "em")) "var _js2 = someDiv; var _js1 = 23 + 'em'; __setf_color(_js1, _js2);") (test-ps-js assignment-10 (defsetf left (el) (offset) `(setf (slot-value (slot-value ,el 'style) 'left) ,offset)) "null") (test-ps-js assignment-11 (setf (left some-div) (+ 123 "px")) "var _js2 = someDiv; var _js1 = 123 + 'px'; _js2.style.left = _js1;") (test-ps-js assignment-12 (progn (defmacro left (el) `(slot-value ,el 'offset-left)) (left some-div)) "someDiv.offsetLeft;") (test-ps-js single-argument-statements-1 (return 1) "return 1") (test-ps-js single-argument-statements-2 (throw "foobar") "throw 'foobar'") (test-ps-js single-argument-expression-1 (delete (new (*foobar 2 3 4))) "delete new Foobar(2, 3, 4)") (test-ps-js single-argument-expression-2 (if (= (typeof blorg) *string) (alert (+ "blorg is a string: " blorg)) (alert "blorg is not a string")) "if (typeof blorg == String) { alert('blorg is a string: ' + blorg); } else { alert('blorg is not a string'); }") (test-ps-js conditional-statements-1 (if (blorg.is-correct) (progn (carry-on) (return i)) (alert "blorg is not correct!")) "if (blorg.isCorrect()) { carryOn(); return i; } else { alert('blorg is not correct!'); }") (test-ps-js conditional-statements-2 (+ i (if (blorg.add-one) 1 2)) "i + (blorg.addOne() ? 1 : 2)") (test-ps-js conditional-statements-3 (when (blorg.is-correct) (carry-on) (return i)) "if (blorg.isCorrect()) { carryOn(); return i; }") (test-ps-js conditional-statements-4 (unless (blorg.is-correct) (alert "blorg is not correct!")) "if (!blorg.isCorrect()) { alert('blorg is not correct!'); }") (test-ps-js variable-declaration-1 (defvar *a* (array 1 2 3)) "var A = [ 1, 2, 3 ]") (test-ps-js variable-declaration-2 (simple-let* ((a 0) (b 1)) (alert (+ a b))) "var a = 0; var b = 1; alert(a + b);") (test-ps-js variable-declaration-3 (simple-let* ((a "World") (b "Hello")) (simple-let ((a b) (b a)) (alert (+ a b)))) "var a = 'World'; var b = 'Hello'; var _js_a1 = b; var _js_b2 = a; var a = _js_a1; var b = _js_b2; delete _js_a1; delete _js_b2; alert(a + b);") (test-ps-js variable-declaration-4 (simple-let* ((a 0) (b 1)) (lexical-let* ((a 9) (b 8)) (alert (+ a b))) (alert (+ a b))) "var a = 0; var b = 1; (function () { var a = 9; var b = 8; alert(a + b); })(); alert(a + b);") (test-ps-js variable-declaration-5 (simple-let* ((a "World") (b "Hello")) (lexical-let ((a b) (b a)) (alert (+ a b))) (alert (+ a b))) "var a = 'World'; var b = 'Hello'; (function (a, b) { alert(a + b); })(b, a); alert(a + b);") (test-ps-js iteration-constructs-1 (do* ((a) b (c (array "a" "b" "c" "d" "e")) (d 0 (1+ d)) (e (aref c d) (aref c d))) ((or (= d c.length) (eql e "x"))) (setf a d b e) (document.write (+ "a: " a " b: " b "
"))) "for (var a = null, b = null, c = ['a', 'b', 'c', 'd', 'e'], d = 0, e = c[d]; !(d == c.length || e == 'x'); d += 1, e = c[d]) { a = d; b = e; document.write('a: ' + a + ' b: ' + b + '
'); };") (test-ps-js iteration-constructs-2 (do ((i 0 (1+ i)) (s 0 (+ s i (1+ i)))) ((> i 10)) (document.write (+ "i: " i " s: " s "
"))) "var _js_i1 = 0; var _js_s2 = 0; var i = _js_i1; var s = _js_s2; delete _js_i1; delete _js_s2; for (; i <= 10; ) { document.write('i: ' + i + ' s: ' + s + '
'); var _js3 = i + 1; var _js4 = s + i + (i + 1); i = _js3; s = _js4; };") (test-ps-js iteration-constructs-3 (do* ((i 0 (1+ i)) (s 0 (+ s i (1- i)))) ((> i 10)) (document.write (+ "i: " i " s: " s "
"))) "for (var i = 0, s = 0; i <= 10; i += 1, s += i + (i - 1)) { document.write('i: ' + i + ' s: ' + s + '
'); };") (test-ps-js iteration-constructs-4 (let* ((arr (array "a" "b" "c" "d" "e"))) (dotimes (i arr.length) (document.write (+ "i: " i " arr[i]: " (aref arr i) "
")))) "var arr = ['a', 'b', 'c', 'd', 'e']; for (var i = 0; i < arr.length; i += 1) { document.write('i: ' + i + ' arr[i]: ' + arr[i] + '
'); };") (test-ps-js iteration-constructs-5 (let* ((res 0)) (alert (+ "Summation to 10 is " (dotimes (i 10 res) (incf res (1+ i)))))) "var res = 0; alert('Summation to 10 is ' + (function () { for (var i = 0; i < 10; i += 1) { res += i + 1; }; return res; })());") (test-ps-js iteration-constructs-6 (let* ((l (list 1 2 4 8 16 32))) (dolist (c l) (document.write (+ "c: " c "
")))) "var l = [1, 2, 4, 8, 16, 32]; for (var c = null, _js_arrvar2 = l, _js_idx1 = 0; _js_idx1 < _js_arrvar2.length; _js_idx1 += 1) { c = _js_arrvar2[_js_idx1]; document.write('c: ' + c + '
'); };") (test-ps-js iteration-constructs-7 (let* ((l (list 1 2 4 8 16 32)) (s 0)) (alert (+ "Sum of " l " is: " (dolist (c l s) (incf s c))))) "var l = [1, 2, 4, 8, 16, 32]; var s = 0; alert('Sum of ' + l + ' is: ' + (function () { for (var c = null, _js_arrvar2 = l, _js_idx1 = 0; _js_idx1 < _js_arrvar2.length; _js_idx1 += 1) { c = _js_arrvar2[_js_idx1]; s += c; }; return s; })());") (test-ps-js iteration-constructs-8 (let* ((obj (create :a 1 :b 2 :c 3))) (doeach (i obj) (document.write (+ i ": " (aref obj i) "
")))) "var obj = { a : 1, b : 2, c : 3 }; for (var i in obj) { document.write(i + ': ' + obj[i] + '
'); };") (test-ps-js iteration-constructs-9 (let* ((obj (create :a 1 :b 2 :c 3))) (doeach ((k v) obj) (document.write (+ k ": " v "
")))) "var obj = { a : 1, b : 2, c : 3 }; var v; for (var k in obj) { v = obj[k]; document.write(k + ': ' + v + '
'); };") (test-ps-js iteration-constructs-10 (while (film.is-not-finished) (this.eat (new *popcorn))) "while (film.isNotFinished()) { this.eat(new Popcorn); }") (test-ps-js the-case-statement-1 (case (aref blorg i) ((1 "one") (alert "one")) (2 (alert "two")) (t (alert "default clause"))) "switch (blorg[i]) { case 1: case 'one': alert('one'); break; case 2: alert('two'); break; default: alert('default clause'); }") (test-ps-js the-case-statement-2 (switch (aref blorg i) (1 (alert "If I get here")) (2 (alert "I also get here")) (default (alert "I always get here"))) "switch (blorg[i]) { case 1: alert('If I get here'); case 2: alert('I also get here'); default: alert('I always get here'); }") (test-ps-js the-with-statement-1 (with (create :foo "foo" :i "i") (alert (+ "i is now intermediary scoped: " i))) "with ({ foo : 'foo', i : 'i' }) { alert('i is now intermediary scoped: ' + i); }") (test-ps-js the-try-statement-1 (try (throw "i") (:catch (error) (alert (+ "an error happened: " error))) (:finally (alert "Leaving the try form"))) "try { throw 'i'; } catch (error) { alert('an error happened: ' + error); } finally { alert('Leaving the try form'); }") (test-ps-js the-html-generator-1 (ps-html ((:a :href "foobar") "blorg")) "'blorg'") (test-ps-js the-html-generator-2 (ps-html ((:a :href (generate-a-link)) "blorg")) "'blorg'") (test-ps-js the-html-generator-3 (document.write (ps-html ((:a :href "#" :onclick (ps-inline (transport))) "link"))) "document.write('link')") (test-ps-js the-html-generator-4 (let* ((disabled nil) (authorized t)) (setf element.inner-h-t-m-l (ps-html ((:textarea (or disabled (not authorized)) :disabled "disabled") "Edit me")))) "var disabled = null; var authorized = true; element.innerHTML = 'Edit me';")