API for PS version and defined operators info.
[parenscript.git] / t / package-system-tests.lisp
blob6c181738f6cf97973a6b885afa39766f759ec0f6
1 (in-package #:ps-test)
3 (in-suite package-system-tests)
5 (test-ps-js operator-packages1
6 (#:new)
7 "new();")
9 (defpackage #:ps-test.my-library
10 (:use #:parenscript))
11 (setf (ps-package-prefix '#:ps-test.my-library) "my_library_")
13 (test-ps-js lib-function1
14 (defun ps-test.my-library::library-function (x y)
15 (+ x y))
16 "function my_library_libraryFunction(x, y) {
17 return x + y;
18 };")
20 (test-ps-js uniform-symbol-handling1
21 (progn (create ps-test.my-library::foo 1)
22 (getprop foo 'ps-test.my-library::foo))
23 "{ my_library_foo : 1 };
24 foo.my_library_foo;")
26 (let ((map (make-hash-table)))
27 (defun symbol-obfuscator (symbol)
28 (or #1=(gethash symbol map)
29 (setf #1# (make-symbol (map 'string (lambda (x)
30 (code-char (1+ (char-code x))))
31 (symbol-name symbol)))))))
33 (defpackage #:ps-test.obfuscate-me)
34 (obfuscate-package '#:ps-test.obfuscate-me #'symbol-obfuscator)
36 (test-ps-js obfuscation1
37 (defun ps-test.obfuscate-me::libfun2 (a b ps-test.obfuscate-me::foo)
38 (+ a (ps-test.my-library::library-function b ps-test.obfuscate-me::foo)))
39 "function mjcgvo3(a, b, gpp) {
40 return a + my_library_libraryFunction(b, gpp);
41 };")
43 (defpackage #:ps-test.obfuscate-and-prefix)
44 (obfuscate-package '#:ps-test.obfuscate-and-prefix #'symbol-obfuscator)
45 (setf (ps-package-prefix '#:ps-test.obfuscate-and-prefix) "__FOO___")
47 (test-ps-js obfuscate-and-prefix
48 (defun ps-test.obfuscate-and-prefix::xfun (a ps-test.obfuscate-and-prefix::b ps-test.my-library::d)
49 (* a
50 (ps-test.obfuscate-me::libfun2 ps-test.obfuscate-and-prefix::b a)
51 (ps-test.my-library::library-function ps-test.my-library::d ps-test.obfuscate-and-prefix::b)))
52 "function __FOO___ygvo(a, __FOO___c, my_library_d) {
53 return a * mjcgvo3(__FOO___c, a) * my_library_libraryFunction(my_library_d, __FOO___c);
54 };")
56 (defpackage #:ps-test.pststpkg
57 (:use #:parenscript))
59 (test namespace1 ()
60 (setf (ps-package-prefix '#:ps-test.pststpkg) "prefix_")
61 (is (string= "prefix_foo;" (normalize-js-code (ps* 'ps-test.pststpkg::foo)))))
63 (cl:in-package #:ps-test.pststpkg)
65 (ps-test::test-ps-js namespace-and-special-forms
66 (defun foo ()
67 (let ((foo (create bar 1 not-a-keyword something)))
68 (return-from foo (and (not foo) (+ (getprop foo 'bar) some-other-var)))))
69 "function prefix_foo() {
70 var foo1 = { prefix_bar : 1, prefix_notAKeyword : prefix_something };
71 return !foo1 && foo1.prefix_bar + prefix_someOtherVar;
72 };")
74 (ps-test::test-ps-js exported-interface
75 (defun ps-test:interface-function (baz)
76 (+ baz ps-test.obfuscate-me::foo))
77 "function interfaceFunction(prefix_baz) {
78 return prefix_baz + gpp;
79 };")
81 (cl:in-package #:ps-test)
83 (test compile-stream-in-package
84 (is (string=
85 "function __FOO___ygvo(a, __FOO___c, my_library_d) {
86 return a * mjcgvo3(__FOO___c, a) * my_library_libraryFunction(my_library_d, __FOO___c);
88 function interfaceFunction(prefix_baz) {
89 return prefix_baz + gpp;
92 (with-input-from-string (s "
93 (defun ps-test.obfuscate-and-prefix::xfun (a ps-test.obfuscate-and-prefix::b ps-test.my-library::d)
94 (* a
95 (ps-test.obfuscate-me::libfun2 ps-test.obfuscate-and-prefix::b a)
96 (ps-test.my-library::library-function ps-test.my-library::d ps-test.obfuscate-and-prefix::b)))
98 (in-package #:ps-test.pststpkg)
100 (defun ps-test:interface-function (baz)
101 (+ baz ps-test.obfuscate-me::foo))
103 (ps-compile-stream s)))))