(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 NIL "null") (test-ps-js literal-symbols-4 UNDEFINED "undefined") (test-ps-js literal-symbols-5 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 ((aref foo i) 1 2) "foo[i](1, 2)") (test-ps-js function-calls-and-method-calls-4 (.blorg this 1 2) "this.blorg(1, 2)") (test-ps-js function-calls-and-method-calls-5 (this.blorg 1 2) "this.blorg(1, 2)") (test-ps-js function-calls-and-method-calls-6 (.blorg (aref foobar 1) NIL T) "foobar[1].blorg(null, true)") (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-5 (* 1 (+ 2 3 4) 4 (/ 6 7)) "1 * (2 + 3 + 4) * 4 * (6 / 7)") (test-ps-js operator-expressions-6 (incf i) "++i") (test-ps-js operator-expressions-7 (decf i) "--i") (test-ps-js operator-expressions-8 (1- i) "i - 1") (test-ps-js operator-expressions-9 (1+ i) "i + 1") (test-ps-js operator-expressions-10 (not (< i 2)) "i >= 2") (test-ps-js operator-expressions-11 (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 (1+ a)) "a++;") (test-ps-js assignment-4 (setf a (+ a 2 3 4 a)) "a += 2 + 3 + 4 + a;") (test-ps-js assignment-5 (setf a (- 1 a)) "a = 1 - a;") (test-ps-js assignment-6 (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-7 (setf (color some-div) (+ 23 "em")) "var _js2 = someDiv; var _js1 = 23 + 'em'; __setf_color(_js1, _js2);") (test-ps-js assignment-8 (defsetf left (el) (offset) `(setf (slot-value (slot-value ,el 'style) 'left) ,offset)) "null") (test-ps-js assignment-9 (setf (left some-div) (+ 123 "px")) "var _js2 = someDiv; var _js1 = 123 + 'px'; _js2.style.left = _js1;") (test-ps-js assignment-10 (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 (if (= i 1) (let* ((blorg "hallo")) (alert blorg)) (let* ((blorg "blitzel")) (alert blorg))) "if (i == 1) { var blorg = 'hallo'; alert(blorg); } else { var blorg = 'blitzel'; alert(blorg); }") (test-ps-js variable-declaration-3 (if (= i 1) (lexical-let* ((blorg "hallo")) (alert blorg)) (lexical-let* ((blorg "blitzel")) (alert blorg))) "if (i == 1) { (function () { var newlexicalcontext1 = new Object; newlexicalcontext1['blorg'] = 'hallo'; with (newlexicalcontext1) { alert(blorg); }; })(); } else { (function () { var newlexicalcontext3 = new Object; newlexicalcontext3['blorg'] = 'blitzel'; with (newlexicalcontext3) { alert(blorg); }; })(); }") (test-ps-js iteration-constructs-1 (do ((i 0 (1+ i)) (l (aref blorg i) (aref blorg i))) ((or (= i blorg.length) (eql l "Fumitastic"))) (document.write (+ "L is " l))) "for (var i = 0, l = blorg[i]; !(i == blorg.length || l == 'Fumitastic'); i = i + 1, l = blorg[i]) { document.write('L is ' + l); }") (test-ps-js iteration-constructs-2 (dotimes (i blorg.length) (document.write (+ "L is " (aref blorg i)))) "for (var i = 0; i < blorg.length; i = i + 1) { document.write('L is ' + blorg[i]); }") (test-ps-js iteration-constructs-3 (dolist (l blorg) (document.write (+ "L is " l))) " var tmpArr1 = blorg; for (var tmpI2 = 0; tmpI2 < tmpArr1.length; tmpI2 = tmpI2 + 1) { var l = tmpArr1[tmpI2]; document.write('L is ' + l); };") (test-ps-js iteration-constructs-4 (doeach (i object) (document.write (+ i " is " (aref object i)))) "for (var i in object) { document.write(i + ' is ' + object[i]); }") (test-ps-js iteration-constructs-5 (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 (lisp (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';")