Module:Template test case: Difference between revisions
(if the first template is specified but the second is not, make the second the sandbox of the first rather than the sandbox of the base page; simplify the title-getting code in the process) |
(add TestCase:renderColumns and some more supporting methods) |
||
Line 20: | Line 20: | ||
-- Set input | -- Set input | ||
for k, v in pairs(options or {}) do | for k, v in pairs(options or {}) do | ||
obj[k] = v | if not Template[k] then | ||
obj[k] = v | |||
end | |||
end | end | ||
obj.invocation = invocationObj | obj.invocation = invocationObj | ||
Line 69: | Line 71: | ||
local link = self:makeLink(display) | local link = self:makeLink(display) | ||
return mw.text.nowiki('{{') .. link .. mw.text.nowiki('}}') | return mw.text.nowiki('{{') .. link .. mw.text.nowiki('}}') | ||
end | |||
function Template:makeHeading() | |||
return self.heading or self:makeBraceLink() | |||
end | end | ||
Line 144: | Line 150: | ||
return obj | return obj | ||
end | |||
function TestCase:getTemplateOutput(templateObj) | |||
local output = templateObj:getOutput() | |||
if self.options.resetRefs then | |||
mw.getCurrentFrame():extensionTag('references') | |||
end | |||
return output | |||
end | |||
function TestCase:renderColumns() | |||
local root = mw.html.create('table') | |||
root | |||
:addClass(self.options.class) | |||
:cssText(self.options.style) | |||
:tag('caption') | |||
:wikitext(self.options.caption or 'Side by side comparison') | |||
-- Headings | |||
local headingRow = root:tag('tr') | |||
if self.options.rowheader then | |||
headingRow:tag('th'):wikitext(self.options.heading0) | |||
end | |||
local width = tostring(math.floor(100 / #self.templates)) .. '%' | |||
for i, obj in ipairs(self.templates) do | |||
headingRow | |||
:tag('th') | |||
:css('width', width) | |||
:wikitext(obj:makeHeading()) | |||
end | |||
-- Row header | |||
local dataRow = root:tag('tr'):css('vertical-align', 'top') | |||
if self.options.rowheader then | |||
dataRow:tag('th') | |||
:attr('scope', 'row') | |||
:wikitext(self.options.rowheader) | |||
end | |||
-- Template output | |||
for i, obj in ipairs(self.templates) do | |||
dataRow:tag('td') | |||
:newline() | |||
:wikitext(self:getTemplateOutput(obj)) | |||
:wikitext(self.options.after) | |||
end | |||
return tostring(root) | |||
end | end | ||
Line 152: | Line 206: | ||
ret[#ret + 1] = '<div style="clear: both;"></div>' | ret[#ret + 1] = '<div style="clear: both;"></div>' | ||
ret[#ret + 1] = obj:makeBraceLink() | ret[#ret + 1] = obj:makeBraceLink() | ||
ret[#ret + 1] = | ret[#ret + 1] = self:getTemplateOutput(obj) | ||
end | end | ||
return table.concat(ret, '\n\n') | return table.concat(ret, '\n\n') |