diff options
author | chai <chaifix@163.com> | 2021-10-30 11:32:16 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-30 11:32:16 +0800 |
commit | 42ec7286b2d36a9ba22925f816a17cb1cc2aa5ce (patch) | |
tree | 24bc7009457a8d7500f264e89946dc20d069294f /Data/Libraries/Penlight/tests/test-text.lua | |
parent | 164885fd98d48703bd771f802d79557b7db97431 (diff) |
+ Penlight
Diffstat (limited to 'Data/Libraries/Penlight/tests/test-text.lua')
-rw-r--r-- | Data/Libraries/Penlight/tests/test-text.lua | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/Data/Libraries/Penlight/tests/test-text.lua b/Data/Libraries/Penlight/tests/test-text.lua new file mode 100644 index 0000000..9419b22 --- /dev/null +++ b/Data/Libraries/Penlight/tests/test-text.lua @@ -0,0 +1,177 @@ +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 t1 = Template [[ +while true do + $contents +end +]] + +assert(t1:substitute {contents = 'print "hello"'},[[ +while true do + print "hello" +end +]]) + +assert(t1:indent_substitute {contents = [[ +for i = 1,10 do + gotcha(i) +end +]]},[[ +while true do + for i = 1,10 do + gotcha(i) + end +end +]]) + +asserteq(T.dedent [[ + one + two + three +]],[[ +one +two +three +]]) +asserteq(T.fill ([[ +It is often said of Lua that it does not include batteries. That is because the goal of Lua is to produce a lean expressive language that will be used on all sorts of machines, (some of which don't even have hierarchical filesystems). The Lua language is the equivalent of an operating system kernel; the creators of Lua do not see it as their responsibility to create a full software ecosystem around the language. That is the role of the community. +]],20),[[ +It is often said of Lua +that it does not include +batteries. That is because +the goal of Lua is to +produce a lean expressive +language that will be +used on all sorts of machines, +(some of which don't +even have hierarchical +filesystems). The Lua +language is the equivalent +of an operating system +kernel; the creators of +Lua do not see it as their +responsibility to create +a full software ecosystem +around the language. That +is the role of the community. +]]) + +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 +]]) + +-- for those with a fondness for Python-style % formatting... +T.format_operator() +asserteq('[%s]' % 'home', '[home]') +asserteq('%s = %d' % {'fred',42},'fred = 42') + +-- mostly works like string.format, except that %s forces use of tostring() +-- rather than throwing an error +local List = require 'pl.List' +asserteq('TBL:%s' % List{1,2,3},'TBL:{1,2,3}') + +-- table with keys and format with $ +asserteq('<$one>' % {one=1}, '<1>') +-- (second arg may also be a function, like os.getenv) +function subst(k) + if k == 'A' then return 'ay' + elseif k == 'B' then return 'bee' + else return '?' + end +end +asserteq( + '$A & $B' % subst,'ay & bee' +) + +t = [[ +a whole lot +of love +]] + +asserteq(T.indent(t,4),[[ + a whole lot + of love +]]) + +asserteq(T.indent([[ +easy + +enough! +]],2,'*'),[[ +**easy +** +**enough! +]]) + + |