File

spec/util_interpolation_spec.lua @ 12074:b892f5489d79

mod_smacks: Check if session was really sleeping before logging message It could have been resumed without going into hibernation first, i.e. when the client notices the disconnect before the server, or if it switches networks etc.
author Kim Alvefur <zash@zash.se>
date Sat, 18 Dec 2021 15:45:06 +0100
parent 11308:5d4d90d1eabb
line wrap: on
line source

local template = [[
{greet!?Hi}, {name?world}!
]];
local expect1 = [[
Hello, WORLD!
]];
local expect2 = [[
Hello, world!
]];
local expect3 = [[
Hi, YOU!
]];
local template_array = [[
{foo#{idx}. {item}
}]]
local expect_array = [[
1. HELLO
2. WORLD
]]
local template_func_pipe = [[
{foo|sort#{idx}. {item}
}]]
local expect_func_pipe = [[
1. A
2. B
3. C
4. D
]]
local template_map = [[
{foo%{idx}: {item!}
}]]
local expect_map = [[
FOO: bar
]]
local template_not = [[
{thing~Thing is falsy}{thing&Thing is truthy}
]]
local expect_not_true = [[
Thing is truthy
]]
local expect_not_nil = [[
Thing is falsy
]]
local expect_not_false = [[
Thing is falsy
]]
describe("util.interpolation", function ()
	it("renders", function ()
		local render = require "util.interpolation".new("%b{}", string.upper, { sort = function (t) table.sort(t) return t end });
		assert.equal(expect1, render(template, { greet = "Hello", name = "world" }));
		assert.equal(expect2, render(template, { greet = "Hello" }));
		assert.equal(expect3, render(template, { name = "you" }));
		assert.equal(expect_array, render(template_array, { foo = { "Hello", "World" } }));
		assert.equal(expect_func_pipe, render(template_func_pipe, { foo = { "c", "a", "d", "b", } }));
		-- assert.equal("", render(template_func_pipe, { foo = nil })); -- FIXME
		assert.equal(expect_map, render(template_map, { foo = { foo = "bar" } }));
		assert.equal(expect_not_true, render(template_not, { thing = true }));
		assert.equal(expect_not_nil, render(template_not, { thing = nil }));
		assert.equal(expect_not_false, render(template_not, { thing = false }));
	end);
	it("fixes #1623", function ()
		local render = require "util.interpolation".new("%b{}", string.upper, { x = string.lower });
		assert.equal("", render("{foo?}", {  }))
		assert.equal("", render("{foo|x?}", {  }))
	end);
end);