clone url: git://git.m455.casa/fa
esperbuild/espersrc/fennel-0.7.0/test/quoting.fnl
1 | (local l (require :test.luaunit)) |
2 | (local fennel (require :fennel)) |
3 | (local fennelview (require :fennelview)) |
4 |
|
5 | (fn c [code] |
6 | (fennel.compileString code {:allowedGlobals false :compiler-env _G})) |
7 |
|
8 | (fn v [code] |
9 | (fennelview ((fennel.loadCode (c code) _G)) {:one-line true})) |
10 |
|
11 | (fn test-quote [] |
12 | (l.assertEquals (c "`:abcde") "return \"abcde\"" "simple string quoting") |
13 | (l.assertEquals (c ",a") "return unquote(a)" |
14 | "unquote outside quote is simply passed thru") |
15 | (l.assertEquals (v "`[1 2 ,(+ 1 2) 4]") "[1 2 3 4]" |
16 | "unquote inside quote leads to evaluation") |
17 | (l.assertEquals (v "(let [a (+ 2 3)] `[:hey ,(+ a a)])") "[\"hey\" 10]" |
18 | "unquote inside other forms") |
19 | (l.assertEquals (v "`[:a :b :c]") "[\"a\" \"b\" \"c\"]" |
20 | "quoted sequential table") |
21 | (local viewed (v "`{:a 5 :b 9}")) |
22 | (l.assertTrue (or (= viewed "{:a 5 :b 9}") (= viewed "{:b 9 :a 5}")) |
23 | (.. "quoted keyed table: " viewed))) |
24 |
|
25 | (fn test-quoted-source [] |
26 | (c "\n\n(eval-compiler (set _G.source-line (. `abc :line)))") |
27 | (l.assertEquals (. _G "source-line") 3 "syms have source data") |
28 | (c "\n(eval-compiler (set _G.source-line (. `abc# :line)))") |
29 | (l.assertEquals (. _G "source-line") 2 "autogensyms have source data") |
30 | (c "\n\n\n(eval-compiler (set _G.source-line (. `(abc) :line)))") |
31 | (l.assertEquals (. _G "source-line") 4 "lists have source data") |
32 | (local (_ msg) (pcall c "\n\n\n\n(macro abc [] `(fn [... a#] 1)) (abc)")) |
33 | (l.assertStrContains msg "unknown:5" "quoted tables have source data")) |
34 |
|
35 | {: test-quote : test-quoted-source} |
36 |
|