git.m455.casa

fa

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