439
edits
(Add test cases using "output" parameter to Category:Test cases using output parameter. Updated all formats to allow "output=nowiki" or "output=nowiki+" to change display of template output, similar to the "nowiki" parameter in Module:UnitTests. Tested in /sandbox. See examples in /testcases, Template:Test case/testcases, Template:Test case nowiki/testcases, and Template:Collapsible test case/testcases.) |
m (87 revisions imported from wikipedia:Module:Template_test_case) |
||
(16 intermediate revisions by 7 users not shown) | |||
Line 94: | Line 94: | ||
function Template:getFullPage() | function Template:getFullPage() | ||
if self.template then | if not self.template then | ||
return self.title.prefixedText | |||
elseif self.template:sub(1, 7) == '#invoke' then | |||
return 'Module' .. self.template:sub(8):gsub('|.*', '') | |||
else | |||
local strippedTemplate, hasColon = self.template:gsub('^:', '', 1) | local strippedTemplate, hasColon = self.template:gsub('^:', '', 1) | ||
hasColon = hasColon > 0 | hasColon = hasColon > 0 | ||
Line 106: | Line 110: | ||
return mw.site.namespaces[10].name .. ':' .. strippedTemplate | return mw.site.namespaces[10].name .. ':' .. strippedTemplate | ||
end | end | ||
end | end | ||
end | end | ||
Line 144: | Line 146: | ||
if format == 'code' then | if format == 'code' then | ||
invocation = '<code>' .. mw.text.nowiki(invocation) .. '</code>' | invocation = '<code>' .. mw.text.nowiki(invocation) .. '</code>' | ||
elseif format == 'kbd' then | |||
invocation = '<kbd>' .. mw.text.nowiki(invocation) .. '</kbd>' | |||
elseif format == 'plain' then | elseif format == 'plain' then | ||
invocation = mw.text.nowiki(invocation) | invocation = mw.text.nowiki(invocation) | ||
Line 156: | Line 160: | ||
function Template:getOutput() | function Template:getOutput() | ||
return self._invocation | local protect = require('Module:Protect') | ||
-- calling self._invocation:getOutput{...} | |||
return protect(self._invocation.getOutput)(self._invocation, { | |||
template = self:getName(), | template = self:getName(), | ||
requireMagicWord = self.requireMagicWord, | requireMagicWord = self.requireMagicWord, | ||
} | }) | ||
end | end | ||
Line 177: | Line 183: | ||
tablerows = 'renderRows', | tablerows = 'renderRows', | ||
inline = 'renderInline', | inline = 'renderInline', | ||
cells = 'renderCells', | |||
default = 'renderDefault' | default = 'renderDefault' | ||
} | } | ||
Line 206: | Line 213: | ||
generalOptions.showcaption = yesno(generalOptions.showcaption) ~= false | generalOptions.showcaption = yesno(generalOptions.showcaption) ~= false | ||
generalOptions.collapsible = yesno(generalOptions.collapsible) | generalOptions.collapsible = yesno(generalOptions.collapsible) | ||
generalOptions.notcollapsed = yesno(generalOptions.notcollapsed) | |||
generalOptions.wantdiff = yesno(generalOptions.wantdiff) | |||
obj.options = generalOptions | obj.options = generalOptions | ||
Line 332: | Line 341: | ||
function TestCase:makeCollapsible(s) | function TestCase:makeCollapsible(s) | ||
local title = self.options.title or self.templates[1]:makeHeader() | |||
if self.options.titlecode then | |||
title = self.templates[1]:getInvocation('kbd') | |||
end | |||
local isEqual = self:templateOutputIsEqual() | local isEqual = self:templateOutputIsEqual() | ||
local root = mw.html.create('table') | local root = mw.html.create('table') | ||
if self.options.wantdiff then | |||
root | root | ||
:addClass('mw-collapsible') | :addClass('mw-collapsible') | ||
:addClass(isEqual and 'mw-collapsed' or nil) | if self.options.notcollapsed == false then | ||
root | |||
:addClass('mw-collapsed') | |||
end | |||
root | |||
:css('background-color', 'transparent') | |||
:css('width', '100%') | |||
:css('border', 'solid silver 1px') | |||
:tag('tr') | |||
:tag('th') | |||
:css('background-color', isEqual and 'yellow' or '#90a8ee') | |||
:wikitext(title) | |||
:done() | |||
:done() | |||
:tag('tr') | |||
:tag('td') | |||
:newline() | |||
:wikitext(s) | |||
:newline() | |||
else | |||
root | |||
:addClass('mw-collapsible') | |||
if self.options.notcollapsed == false then | |||
root | |||
:addClass('mw-collapsed') | |||
end | |||
if self.options.notcollapsed ~= true or false then | |||
root | |||
:addClass(isEqual and 'mw-collapsed' or nil) | |||
end | |||
root | |||
:css('background-color', 'transparent') | :css('background-color', 'transparent') | ||
:css('width', '100%') | :css('width', '100%') | ||
Line 343: | Line 387: | ||
:tag('th') | :tag('th') | ||
:css('background-color', isEqual and 'lightgreen' or 'yellow') | :css('background-color', isEqual and 'lightgreen' or 'yellow') | ||
:wikitext( | :wikitext(title) | ||
:done() | :done() | ||
:done() | :done() | ||
Line 351: | Line 395: | ||
:wikitext(s) | :wikitext(s) | ||
:newline() | :newline() | ||
end | |||
return tostring(root) | return tostring(root) | ||
end | end | ||
Line 412: | Line 457: | ||
:wikitext(self.options.after) | :wikitext(self.options.after) | ||
:wikitext('<pre style="white-space: pre-wrap;">') | :wikitext('<pre style="white-space: pre-wrap;">') | ||
:wikitext(mw.text.nowiki(self.options.before or "")) | |||
:wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | ||
:wikitext(mw.text.nowiki(self.options.after or "")) | |||
:wikitext('</pre>') | :wikitext('</pre>') | ||
elseif self.options.output == 'nowiki' then | elseif self.options.output == 'nowiki' then | ||
dataRow:tag('td') | dataRow:tag('td') | ||
:newline() | :newline() | ||
:wikitext(mw.text.nowiki(self.options.before or "")) | |||
:wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | :wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | ||
:wikitext(mw.text.nowiki(self.options.after or "")) | |||
else | else | ||
dataRow:tag('td') | dataRow:tag('td') | ||
Line 500: | Line 549: | ||
for i, obj in ipairs(self.templates) do | for i, obj in ipairs(self.templates) do | ||
local line = {} | local line = {} | ||
line[#line + 1] = '* ' | line[#line + 1] = self.options.prefix or '* ' | ||
if self.options.showcode then | if self.options.showcode then | ||
line[#line + 1] = obj:getInvocation('code') | line[#line + 1] = obj:getInvocation('code') | ||
Line 521: | Line 570: | ||
if self.options.addline then | if self.options.addline then | ||
local line = {} | local line = {} | ||
line[#line + 1] = '* ' | line[#line + 1] = self.options.prefix or '* ' | ||
line[#line + 1] = self.options.addline | line[#line + 1] = self.options.addline | ||
ret[#ret + 1] = table.concat(line) | ret[#ret + 1] = table.concat(line) | ||
end | end | ||
return table.concat(ret, '\n') | return table.concat(ret, '\n') | ||
end | |||
function TestCase:renderCells() | |||
local root = mw.html.create() | |||
local dataRow = root:tag('tr') | |||
dataRow | |||
:css('vertical-align', 'top') | |||
:addClass(self.options.class) | |||
:cssText(self.options.style) | |||
-- Row header | |||
if self.options.rowheader then | |||
dataRow:tag('th') | |||
:attr('scope', 'row') | |||
:newline() | |||
:wikitext(self.options.rowheader or self:message('row-header')) | |||
end | |||
-- Caption | |||
if self.options.showcaption then | |||
dataRow:tag('th') | |||
:attr('scope', 'row') | |||
:newline() | |||
:wikitext(self.options.caption or self:message('columns-header')) | |||
end | |||
-- Show code | |||
if self.options.showcode then | |||
dataRow:tag('td') | |||
:newline() | |||
:wikitext(self:getInvocation('code')) | |||
end | |||
-- Template output | |||
for i, obj in ipairs(self.templates) do | |||
if self.options.output == 'nowiki+' then | |||
dataRow:tag('td') | |||
:newline() | |||
:wikitext(self.options.before) | |||
:wikitext(self:getTemplateOutput(obj)) | |||
:wikitext(self.options.after) | |||
:wikitext('<pre style="white-space: pre-wrap;">') | |||
:wikitext(mw.text.nowiki(self.options.before or "")) | |||
:wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | |||
:wikitext(mw.text.nowiki(self.options.after or "")) | |||
:wikitext('</pre>') | |||
elseif self.options.output == 'nowiki' then | |||
dataRow:tag('td') | |||
:newline() | |||
:wikitext(mw.text.nowiki(self.options.before or "")) | |||
:wikitext(mw.text.nowiki(self:getTemplateOutput(obj))) | |||
:wikitext(mw.text.nowiki(self.options.after or "")) | |||
else | |||
dataRow:tag('td') | |||
:newline() | |||
:wikitext(self.options.before) | |||
:wikitext(self:getTemplateOutput(obj)) | |||
:wikitext(self.options.after) | |||
end | |||
end | |||
return tostring(root) | |||
end | end | ||
Line 634: | Line 745: | ||
function TableInvocation:getOutput(options) | function TableInvocation:getOutput(options) | ||
if (options.template:sub(1, 7) == '#invoke') then | |||
local moduleCall = mw.text.split(options.template, '|', true) | |||
local args = mw.clone(self.invokeArgs) | |||
table.insert(args, 1, moduleCall[2]) | |||
return mw.getCurrentFrame():callParserFunction(moduleCall[1], args) | |||
end | |||
return mw.getCurrentFrame():expandTemplate{ | return mw.getCurrentFrame():expandTemplate{ | ||
title = options.template, | title = options.template, |