Module:Template test case: Difference between revisions
(move arg-trimming code to the TableInvocation class) |
(move the logic for finding the options into the exports - it seemed a bit unintuitive to have invocation objects handling argument code as well) |
||
Line 59: | Line 59: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- | -- TestCase class | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
local | local TestCase = {} | ||
TestCase.__index = TestCase | |||
function | function TestCase.new(invocationObj) | ||
local obj = setmetatable({}, | checkType('TestCase.new', 'invocationObj', invocationObj, 'table') | ||
local obj = setmetatable({}, TestCase) | |||
return obj | return obj | ||
end | end | ||
function | -------------------------------------------------------------------------------- | ||
-- Test case display functions | |||
-- | |||
-- Test case display functions produce the wikitext to display the template | |||
-- output for one test case. For example, one function might produce templates | |||
-- aligned horizontally, and another function might produce templates aligned | |||
-- one below the other. | |||
-- | |||
-- They are named functions that accept the following parameters: | |||
-- * templates - an array of subtables containing data about each template to be | |||
-- displayed. These subtables can contain the following values: | |||
-- * result - the expanded wikitext from the template. | |||
-- * invocation - the original unexpanded wikitext that the output was | |||
-- generated from. This may be nil if the invocation is not available. | |||
-- * name - the name of the template. | |||
-- * link - a normal wikilink to the template page (displays as | |||
-- "Template:Foo"). | |||
-- * braceLink - a wikilink to the template page formatted like the {{tl}} | |||
-- template, i.e. it displays as "{{Foo}}". | |||
-- * heading - a heading to display above the template output. | |||
-------------------------------------------------------------------------------- | |||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
Line 82: | Line 97: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
local NowikiInvocation = | local NowikiInvocation = {} | ||
NowikiInvocation.__index = NowikiInvocation | NowikiInvocation.__index = NowikiInvocation | ||
function NowikiInvocation.new( | function NowikiInvocation.new(invocation) | ||
local obj = setmetatable({}, NowikiInvocation) | |||
local obj = | obj.invocation = mw.text.unstrip(invocation) | ||
obj.invocation = mw.text.unstrip( | |||
return obj | return obj | ||
end | end | ||
Line 129: | Line 134: | ||
TableInvocation.__index = TableInvocation | TableInvocation.__index = TableInvocation | ||
function TableInvocation.new( | function TableInvocation.new(invokeArgs) | ||
local obj = setmetatable({}, TableInvocation) | |||
local obj = | |||
obj.invokeArgs = invokeArgs | obj.invokeArgs = invokeArgs | ||
return obj | return obj | ||
end | end | ||
Line 169: | Line 153: | ||
} | } | ||
end | end | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
Line 222: | Line 171: | ||
function p._table(args) | function p._table(args) | ||
local invocation = TableInvocation.new( | local options, invokeArgs = {}, {} | ||
for k, v in pairs(args) do | |||
local optionKey = type(k) == 'string' and k:match('^_(.*)$') | |||
if optionKey then | |||
if type(v) == 'string' then | |||
v = v:match('^%s*(.-)%s*$') -- trim whitespace | |||
end | |||
if v ~= '' then | |||
options[optionKey] = v | |||
end | |||
else | |||
invokeArgs[k] = v | |||
end | |||
end | |||
local invocation = TableInvocation.new(invokeArgs) | |||
return invocation | return invocation | ||
end | end | ||
Line 245: | Line 208: | ||
function p._nowiki(args) | function p._nowiki(args) | ||
local invocation = NowikiInvocation.new(args) | local invocation = NowikiInvocation.new(args.invocation) | ||
args.invocation = nil | |||
local options = args | |||
return invocation | return invocation | ||
end | end |