blob: c879340edd89d91b0aa72141fec1871f1fbb9bab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- Unit checks for custom/extensions/link-trailers.lua, run under a standalone
-- Lua by t0506-link-trailers.sh with the script path as the argument. The
-- shipped configuration links Fixes and Reverts object names to ./?id=,
-- Closes and Bug marks to bugs.example.com and a bare URL to itself, and
-- everything here checks that shape, the key matching and the values that
-- must pass through untouched.

local test_directory = arg[0]:match("^(.*)/") or "."
local h = dofile(test_directory .. "/harness.lua")

h.load(arg[1])

local function render(key, text)
	return h.run({ key, "commit" }, { text })
end

local out, ret = render("Fixes", "1234567 (\"plain commit\")")
h.contains("a Fixes object name links to its commit", out,
	"<a href='./?id=1234567'>1234567</a> (\"plain commit\")")
h.equals("close answers zero", ret, 0)

out = render("fixes", "1234567")
h.contains("the key matches case insensitively", out, "<a href='./?id=1234567'>1234567</a>")

out = render("Fixes", "123456")
h.excludes("six hex characters stay text", out, "<a")

out = render("Reverts", "cafebabe")
h.contains("a Reverts object name links too", out, "<a href='./?id=cafebabe'>cafebabe</a>")

out = render("Closes", "#45")
h.equals("a Closes mark links to the tracker", out,
	"<a href='https://bugs.example.com/?bug=45'>#45</a>")

out = render("Bug", "45")
h.equals("a bare Bug number links to the tracker", out,
	"<a href='https://bugs.example.com/?bug=45'>45</a>")

out = render("Closes", "not a number")
h.equals("a Closes value that is no number stays text", out, "not a number")

out = render("Link", "https://example.com/?a=1&amp;b=2")
h.equals("a bare URL links to itself with its escaping kept", out,
	"<a href='https://example.com/?a=1&amp;b=2'>https://example.com/?a=1&amp;b=2</a>")

out = render("Whatever", "https://example.com/x")
h.contains("a URL links under any key", out, "<a href='https://example.com/x'>")

out = render("Link", "https://example.com/it's")
h.equals("a URL holding a quote stays text", out, "https://example.com/it's")

out = render("Link", "see https://example.com/x")
h.equals("a URL inside other text stays text", out, "see https://example.com/x")

out = render("Reported-by", "someone")
h.equals("a key with no rule passes through", out, "someone")

out = h.run({ "Fixes", "commit" }, { "12345", "67 tail" })
h.contains("a value split across writes is seen whole", out,
	"<a href='./?id=1234567'>1234567</a> tail")

out, ret = render("Fixes", "")
h.equals("an empty value stays empty", out, "")
h.equals("an empty value still answers zero", ret, 0)

h.finish()