Commit | Line | Data |
---|---|---|
eb17f15c | 1 | (in-package :js-test) |
711dd89e | 2 | |
eb17f15c HH |
3 | ;; Testcases for parenscript |
4 | ||
5 | (defun trim-whitespace(str) | |
6 | (string-trim '(#\Space #\Tab #\Newline) str)) | |
7 | ||
7a7d6c73 HH |
8 | (defun same-space-between-statements(code) |
9 | (cl-ppcre:regex-replace-all "\\s*;\\s*" code (concatenate 'string (list #\; #\Newline)))) | |
10 | ||
11 | (defun no-indentation(code) | |
12 | (cl-ppcre:regex-replace-all (cl-ppcre:create-scanner "^\\s*" :multi-line-mode t) code "")) | |
13 | ||
14 | (defun no-trailing-spaces(code) | |
15 | (cl-ppcre:regex-replace-all (cl-ppcre:create-scanner "\\s*$" :multi-line-mode t) code "")) | |
16 | ||
17 | (defun normalize-js-code(str) | |
18 | (trim-whitespace (no-indentation (no-trailing-spaces (same-space-between-statements str))))) | |
19 | ||
eb17f15c HH |
20 | (defmacro test-ps-js (testname parenscript javascript) |
21 | `(test ,testname () | |
7a7d6c73 HH |
22 | (setf js::*var-counter* 0) |
23 | ;; is-macro expands its argument again when reporting failures, so | |
24 | ;; the reported temporary js-variables get wrong if we don't evalute first. | |
25 | (let ((generated-code (js-to-string ',parenscript)) | |
26 | (js-code ,javascript)) | |
27 | (is (string= (normalize-js-code generated-code) | |
94a05cdf | 28 | (normalize-js-code js-code)))))) |
eb17f15c HH |
29 | |
30 | (defun run-tests() | |
711dd89e HH |
31 | (format t "Running reference tests:~&") |
32 | (run! 'ref-tests) | |
33 | (format t "Running other tests:~&") | |
34 | (run! 'ps-tests)) | |
35 | ||
36 | ;;--------------------------------------------------------------------------- | |
37 | (def-suite ps-tests) | |
38 | (in-suite ps-tests) | |
39 | ||
40 | ;; A problem with long nested operator, when the statement spanned several rows | |
41 | ;; the rows would not be joined together correctly. | |
42 | (test-ps-js bug-dwim-join | |
43 | (alert (html ((:div :id 777 | |
44 | :style (css-inline :border "1pxsssssssssss" | |
45 | :font-size "x-small" | |
46 | :height (* 2 200) | |
47 | :width (* 2 300)))))) | |
48 | "alert | |
49 | ('<div id=\"777\" style=\"' | |
50 | + ('border:1pxsssssssssss;font-size:x-small;height:' + 2 * 200 + ';width:' | |
51 | + 2 * 300) | |
52 | + '\"></div>')") ;";This line should start with a plus character. | |
0c659e80 HH |
53 | |
54 | ||
94a05cdf | 55 | (test-ps-js simple-slot-value |
0c659e80 HH |
56 | (let ((foo (create :a 1))) |
57 | (alert (slot-value foo 'a))) | |
58 | "{ | |
59 | var foo = { a : 1 }; | |
60 | alert(foo.a); | |
61 | }") | |
62 | ||
94a05cdf | 63 | (test-ps-js buggy-slot-value |
0c659e80 HH |
64 | (let ((foo (create :a 1)) |
65 | (slot-name "a")) | |
66 | (alert (slot-value foo slot-name))) | |
67 | "{ | |
68 | var foo = { a : 1 }; | |
69 | var slotName = 'a'; | |
70 | alert(foo[slotName]); | |
71 | }"); Last line was alert(foo.slotName) before bug-fix. | |
72 | ||
73 | (test-ps-js buggy-slot-value-two | |
74 | (slot-value foo (get-slot-name)) | |
75 | "foo[getSlotName()]") |