Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stevedonovan/Penlight.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-template2.lua')
-rw-r--r--tests/test-template2.lua76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/test-template2.lua b/tests/test-template2.lua
new file mode 100644
index 0000000..14e55a6
--- /dev/null
+++ b/tests/test-template2.lua
@@ -0,0 +1,76 @@
+local T = require 'pl.text'
+local utils = require 'pl.utils'
+local Template = T.Template
+local asserteq = require 'pl.test'.asserteq
+local OrderedMap = require 'pl.OrderedMap'
+local template = require 'pl.template'
+
+local t = [[
+# for i = 1,3 do
+ print($(i+1))
+# end
+]]
+
+asserteq(template.substitute(t),[[
+ print(2)
+ print(3)
+ print(4)
+]])
+
+t = [[
+> for i = 1,3 do
+ print(${i+1})
+> end
+]]
+
+asserteq(template.substitute(t,{_brackets='{}',_escape='>'}),[[
+ print(2)
+ print(3)
+ print(4)
+]])
+
+t = [[
+#@ for i = 1,3 do
+ print(@{i+1})
+#@ end
+]]
+
+asserteq(template.substitute(t,{_brackets='{}',_escape='#@',_inline_escape='@'}),[[
+ print(2)
+ print(3)
+ print(4)
+]])
+
+--- iteration using pairs is usually unordered. But using OrderedMap
+--- we can get the exact original ordering.
+
+t = [[
+# for k,v in pairs(T) do
+ "$(k)", -- $(v)
+# end
+]]
+
+if utils.lua51 then
+ -- easy enough to define a general pairs in Lua 5.1
+ local rawpairs = pairs
+ function pairs(t)
+ local mt = getmetatable(t)
+ local f = mt and mt.__pairs
+ if f then
+ return f(t)
+ else
+ return rawpairs(t)
+ end
+ end
+end
+
+
+local Tee = OrderedMap{{Dog = 'Bonzo'}, {Cat = 'Felix'}, {Lion = 'Leo'}}
+
+-- note that the template will also look up global functions using _parent
+asserteq(template.substitute(t,{T=Tee,_parent=_G}),[[
+ "Dog", -- Bonzo
+ "Cat", -- Felix
+ "Lion", -- Leo
+]])
+