Difference between revisions of "Module:Documentation/testcases"
Jump to navigation
Jump to search
test>Mr. Stradivarius (add some more _endBox tests) |
m (1 revision imported) |
||
(41 intermediate revisions by 9 users not shown) | |||
Line 1: | Line 1: | ||
-- Test cases page for [[Module:Documentation]]. See talk page to run tests. | -- Test cases page for [[Module:Documentation]]. See talk page to run tests. | ||
− | local doc = require('Module:Documentation') | + | local doc = require('Module:Documentation/sandbox') |
− | local ScribuntoUnit = require('Module:ScribuntoUnit | + | local ScribuntoUnit = require('Module:ScribuntoUnit') |
local suite = ScribuntoUnit:new() | local suite = ScribuntoUnit:new() | ||
Line 26: | Line 26: | ||
function suite:testMakeToolbar() | function suite:testMakeToolbar() | ||
self:assertEquals(nil, doc.makeToolbar()) | self:assertEquals(nil, doc.makeToolbar()) | ||
− | self:assertEquals('< | + | self:assertEquals('<span class="template-documentation-toolbar-link">(Foo)</span>', doc.makeToolbar('Foo')) |
− | self:assertEquals('< | + | self:assertEquals('<span class="template-documentation-toolbar-link">(Foo | Bar)</span>', doc.makeToolbar('Foo', 'Bar')) |
end | end | ||
Line 110: | Line 110: | ||
self:assertEnvTitleEquals('Template:Example/Print', 'Template talk:Example', 'printTitle') | self:assertEnvTitleEquals('Template:Example/Print', 'Template talk:Example', 'printTitle') | ||
self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example/sandbox', 'printTitle') | self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example/sandbox', 'printTitle') | ||
+ | end | ||
+ | |||
+ | function suite:testEnvProtectionLevels() | ||
+ | local pipeEnv = getEnv('Template:?') | ||
+ | self:assertEquals('autoconfirmed', pipeEnv.protectionLevels.edit[1]) | ||
+ | local sandboxEnv = getEnv('Wikipedia:Sandbox') | ||
+ | local sandboxEditLevels = sandboxEnv.protectionLevels.edit | ||
+ | if sandboxEditLevels then -- sandboxEditLevels may also be nil if the page is unprotected | ||
+ | self:assertEquals(nil, sandboxEditLevels[1]) | ||
+ | else | ||
+ | self:assertEquals(nil, sandboxEditLevels) | ||
+ | end | ||
end | end | ||
Line 142: | Line 154: | ||
self:assertEnvFieldEquals(expected, 'Template:Edit protected', 'compareUrl') | self:assertEnvFieldEquals(expected, 'Template:Edit protected', 'compareUrl') | ||
self:assertEnvFieldEquals(expected, 'Template:Edit protected/sandbox', 'compareUrl') | self:assertEnvFieldEquals(expected, 'Template:Edit protected/sandbox', 'compareUrl') | ||
+ | self:assertEnvFieldEquals(nil, 'Template:Non-existent template adsfasdg', 'compareUrl') | ||
+ | self:assertEnvFieldEquals(nil, 'Template:Fact', 'compareUrl') -- Exists but doesn't have a sandbox. | ||
end | end | ||
Line 148: | Line 162: | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
− | function suite. | + | function suite.getSandboxNoticeTestData(page) |
+ | local env = getEnv(page) | ||
local templatePage = page:match('^(.*)/sandbox$') | local templatePage = page:match('^(.*)/sandbox$') | ||
− | local image = '[[Image:Sandbox. | + | local image = '[[Image:Sandbox.svg|50px|alt=|link=]]' |
− | local | + | local templateBlurb = 'This is the [[Wikipedia:Template test cases|template sandbox]] page for [[' .. templatePage .. ']]' |
+ | local moduleBlurb = 'This is the [[Wikipedia:Template test cases|module sandbox]] page for [[' .. templatePage .. ']]' | ||
+ | local otherBlurb = 'This is the sandbox page for [[' .. templatePage .. ']]' | ||
local diff = '[//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=' .. mw.uri.encode(templatePage) .. '&page2=' .. mw.uri.encode(page) .. ' diff]' | local diff = '[//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=' .. mw.uri.encode(templatePage) .. '&page2=' .. mw.uri.encode(page) .. ' diff]' | ||
− | local testcasesBlurb = 'See also the companion subpage for [[' .. | + | local testcasesBlurb = 'See also the companion subpage for [[' .. templatePage .. '/testcases|test cases]].' |
local category = '[[Category:Template sandboxes]]' | local category = '[[Category:Template sandboxes]]' | ||
− | return image, | + | local clear = '<div class="template-documentation-sandbox-start"></div>' |
+ | return env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear | ||
end | end | ||
Line 164: | Line 182: | ||
end | end | ||
− | function suite: | + | function suite:testSandboxNoticeStaticVals() |
− | local image, | + | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear = suite.getSandboxNoticeTestData('Template:Example/sandbox') |
− | |||
local notice = doc.sandboxNotice({}, env) | local notice = doc.sandboxNotice({}, env) | ||
+ | |||
+ | -- Escape metacharacters (mainly '-') | ||
+ | clear = clear:gsub( '%p', '%%%0' ) | ||
+ | |||
+ | self:assertStringContains('^' .. clear, notice, false) | ||
self:assertStringContains(image, notice, true) | self:assertStringContains(image, notice, true) | ||
− | self:assertStringContains( | + | self:assertStringContains(category, notice, true) |
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeTemplateBlurb() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
+ | self:assertStringContains(templateBlurb, notice, true) | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeModuleBlurb() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:Math/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
+ | self:assertStringContains(moduleBlurb, notice, true) | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeOtherBlurb() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('User:Mr. Stradivarius/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
+ | self:assertStringContains(otherBlurb, notice, true) | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeBlurbDiff() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
if mw.title.getCurrentTitle().isTalk then | if mw.title.getCurrentTitle().isTalk then | ||
-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}). | -- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}). | ||
Line 175: | Line 220: | ||
self:assertStringContains(diff, notice, true) | self:assertStringContains(diff, notice, true) | ||
end | end | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeBlurbDiffNoBasePage() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:User:Mr. Stradivarius/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
+ | if mw.title.getCurrentTitle().isTalk then | ||
+ | -- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}). | ||
+ | -- The frame test doesn't seem to be working for now, so adding a namespace hack. | ||
+ | self:assertNotStringContains(diff, notice, true) | ||
+ | end | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeTestcases() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Edit protected/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
+ | self:assertStringContains(testcasesBlurb, notice, true) | ||
+ | end | ||
+ | |||
+ | function suite:testSandboxNoticeNoTestcases() | ||
+ | local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox') | ||
+ | local notice = doc.sandboxNotice({}, env) | ||
self:assertNotStringContains(testcasesBlurb, notice, true) | self:assertNotStringContains(testcasesBlurb, notice, true) | ||
− | |||
end | end | ||
Line 193: | Line 258: | ||
function suite:testProtectionTemplateProtectedTemplate() | function suite:testProtectionTemplateProtectedTemplate() | ||
− | local env = getEnv('Template: | + | local env = getEnv('Template:Navbox') |
-- Test whether there is some content. We don't care what the content is, as the protection level | -- Test whether there is some content. We don't care what the content is, as the protection level | ||
-- detected will be for the current page, not the template. | -- detected will be for the current page, not the template. | ||
Line 200: | Line 265: | ||
function suite:testProtectionTemplateUnprotectedModule() | function suite:testProtectionTemplateUnprotectedModule() | ||
− | local env = getEnv('Module: | + | local env = getEnv('Module:Example') |
self:assertEquals(nil, doc.protectionTemplate(env)) | self:assertEquals(nil, doc.protectionTemplate(env)) | ||
end | end | ||
Line 212: | Line 277: | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
− | -- | + | -- Test _startBox |
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
function suite:testStartBoxContentArg() | function suite:testStartBoxContentArg() | ||
− | local pattern = '<div | + | local pattern = '<div class="template%-documentation%-startbox">\n<span class="template%-heading">.-</span></div>' |
local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example')) | local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example')) | ||
self:assertStringContains(pattern, startBox) | self:assertStringContains(pattern, startBox) | ||
Line 223: | Line 288: | ||
function suite:testStartBoxTemplateHtml() | function suite:testStartBoxTemplateHtml() | ||
self:assertStringContains( | self:assertStringContains( | ||
− | '<div | + | '<div class="template%-documentation%-startbox">\n<span class="template%-heading">.-</span><span class="mw%-editsection%-like plainlinks" id="doc_editlinks">.-</span></div>', |
doc._startBox({}, getEnv('Template:Example')) | doc._startBox({}, getEnv('Template:Example')) | ||
) | ) | ||
Line 230: | Line 295: | ||
function suite:testStartBoxMainHtml() | function suite:testStartBoxMainHtml() | ||
self:assertStringContains( | self:assertStringContains( | ||
− | '<div | + | '<div class="template%-documentation%-startbox">\n<span class="other%-heading">.-</span><span class="mw%-editsection%-like plainlinks" id="doc_editlinks">.-</span></div>', |
doc._startBox({}, getEnv('Foo')) | doc._startBox({}, getEnv('Foo')) | ||
) | ) | ||
Line 277: | Line 342: | ||
local data = {} | local data = {} | ||
if exists then | if exists then | ||
− | data.title = mw.title.new('Template: | + | data.title = mw.title.new('Template:Example') |
− | data.docTitle = mw.title.new('Template: | + | data.docTitle = mw.title.new('Template:Example/doc') |
else | else | ||
data.title = mw.title.new('Template:NonExistentTemplate') | data.title = mw.title.new('Template:NonExistentTemplate') | ||
Line 294: | Line 359: | ||
function suite:testRenderStartBoxLinksExists() | function suite:testRenderStartBoxLinksExists() | ||
local data = suite.makeExampleStartBoxLinksData(true) | local data = suite.makeExampleStartBoxLinksData(true) | ||
− | local expected = '[[[Template: | + | local expected = '[[[Template:Example/doc|view]]] [[//en.wikipedia.org/w/index.php?title=Template:Example/doc&action=edit edit]] [[//en.wikipedia.org/w/index.php?title=Template:Example/doc&action=history history]] [[//en.wikipedia.org/w/index.php?title=Template:Example&action=purge purge]]' |
self:assertEquals(expected, doc.renderStartBoxLinks(data)) | self:assertEquals(expected, doc.renderStartBoxLinks(data)) | ||
end | end | ||
Line 300: | Line 365: | ||
function suite:testRenderStartBoxLinksDoesntExist() | function suite:testRenderStartBoxLinksDoesntExist() | ||
local data = suite.makeExampleStartBoxLinksData(false) | local data = suite.makeExampleStartBoxLinksData(false) | ||
− | local expected = '[//en.wikipedia.org/w/index.php?title=Template:NonExistentTemplate/doc&action=edit&preload=Template%3AMyPreload create]' | + | local expected = '[[//en.wikipedia.org/w/index.php?title=Template:NonExistentTemplate/doc&action=edit&preload=Template%3AMyPreload create]]' |
self:assertEquals(expected, doc.renderStartBoxLinks(data)) | self:assertEquals(expected, doc.renderStartBoxLinks(data)) | ||
end | end | ||
Line 308: | Line 373: | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
− | function testStartBoxDataBlankHeading() | + | function suite:testStartBoxDataBlankHeading() |
local data = doc.makeStartBoxData({heading = ''}, {}) | local data = doc.makeStartBoxData({heading = ''}, {}) | ||
self:assertEquals(nil, data) | self:assertEquals(nil, data) | ||
Line 316: | Line 381: | ||
local env = getEnv('Template:Example') | local env = getEnv('Template:Example') | ||
local data = doc.makeStartBoxData({}, env) | local data = doc.makeStartBoxData({}, env) | ||
− | local expected = '[[File:Template- | + | local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Template documentation' |
self:assertEquals(expected, data.heading) | self:assertEquals(expected, data.heading) | ||
end | end | ||
Line 323: | Line 388: | ||
local env = getEnv('Module:Bananas') | local env = getEnv('Module:Bananas') | ||
local data = doc.makeStartBoxData({}, env) | local data = doc.makeStartBoxData({}, env) | ||
− | local expected = '[[File:Template- | + | local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Module documentation' |
self:assertEquals(expected, data.heading) | self:assertEquals(expected, data.heading) | ||
end | end | ||
Line 341: | Line 406: | ||
end | end | ||
− | function testStartBoxDataHeadingStyle() | + | function suite:testStartBoxDataHeadingStyle() |
local data = doc.makeStartBoxData({['heading-style'] = 'foo:bar'}, {}) | local data = doc.makeStartBoxData({['heading-style'] = 'foo:bar'}, {}) | ||
self:assertEquals('foo:bar', data.headingStyleText) | self:assertEquals('foo:bar', data.headingStyleText) | ||
− | |||
− | |||
end | end | ||
− | function testStartBoxDataHeadingStyleTemplate() | + | function suite:testStartBoxDataHeadingStyleTemplate() |
local env = getEnv('Template:Example') | local env = getEnv('Template:Example') | ||
local data = doc.makeStartBoxData({}, env) | local data = doc.makeStartBoxData({}, env) | ||
− | |||
− | |||
self:assertEquals(nil, data.headingStyleText) | self:assertEquals(nil, data.headingStyleText) | ||
end | end | ||
− | function testStartBoxDataHeadingStyleOther() | + | function suite:testStartBoxDataHeadingStyleOther() |
local env = getEnv('User:Example') | local env = getEnv('User:Example') | ||
local data = doc.makeStartBoxData({}, env) | local data = doc.makeStartBoxData({}, env) | ||
− | |||
− | |||
self:assertEquals(nil, data.headingStyleText) | self:assertEquals(nil, data.headingStyleText) | ||
end | end | ||
Line 368: | Line 427: | ||
local data = doc.makeStartBoxData({}, env, 'some links') | local data = doc.makeStartBoxData({}, env, 'some links') | ||
self:assertEquals('some links', data.links) | self:assertEquals('some links', data.links) | ||
− | self:assertEquals('mw-editsection plainlinks', data.linksClass) | + | self:assertEquals('mw-editsection-like plainlinks', data.linksClass) |
self:assertEquals('doc_editlinks', data.linksId) | self:assertEquals('doc_editlinks', data.linksId) | ||
end | end | ||
Line 385: | Line 444: | ||
function suite:testRenderStartBox() | function suite:testRenderStartBox() | ||
− | local expected = '<div | + | local expected = '<div class="template-documentation-startbox">\n<span></span></div>' |
self:assertEquals(expected, doc.renderStartBox{}) | self:assertEquals(expected, doc.renderStartBox{}) | ||
end | end | ||
function suite:testRenderStartBoxHeadingStyleText() | function suite:testRenderStartBoxHeadingStyleText() | ||
− | self:assertStringContains('\n<span style="foo:bar | + | self:assertStringContains('\n<span style="foo:bar">', doc.renderStartBox{headingStyleText = 'foo:bar'}, true) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Line 433: | Line 484: | ||
function suite:testContentExists() | function suite:testContentExists() | ||
− | local env = | + | local env = doc.getEnvironment{'Template:Documentation/testcases/test3'} |
− | local docs = mw.getCurrentFrame():preprocess('{{ | + | local docs = mw.getCurrentFrame():preprocess('{{Template:Documentation/testcases/test3}}') |
local expected = '\n' .. docs .. '\n' | local expected = '\n' .. docs .. '\n' | ||
self:assertEquals(expected, doc._content({}, env)) | self:assertEquals(expected, doc._content({}, env)) | ||
Line 440: | Line 491: | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
− | -- | + | -- Test _endBox |
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
Line 468: | Line 519: | ||
local endBox = doc._endBox({}, env) | local endBox = doc._endBox({}, env) | ||
self:assertStringContains('id="documentation-meta-data"', endBox, true) | self:assertStringContains('id="documentation-meta-data"', endBox, true) | ||
− | |||
− | |||
self:assertNotStringContains('[[File:', endBox, true) | self:assertNotStringContains('[[File:', endBox, true) | ||
self:assertNotStringContains('[[Image:', endBox, true) | self:assertNotStringContains('[[Image:', endBox, true) | ||
Line 496: | Line 545: | ||
local expected = 'Editors can experiment in this.-<br />' | local expected = 'Editors can experiment in this.-<br />' | ||
self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle'))) -- Wikipedia:Twinkle has an existing /doc subpage | self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle'))) -- Wikipedia:Twinkle has an existing /doc subpage | ||
+ | end | ||
+ | |||
+ | function suite:testEndBoxCategoriesBlurb() | ||
+ | local expected = 'Please add categories to the %[%[.-|/doc%]%] subpage%.' | ||
+ | self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Example'))) | ||
+ | self:assertStringContains(expected, doc._endBox({}, getEnv('Module:Bananas'))) | ||
+ | self:assertStringContains(expected, doc._endBox({}, getEnv('User:Example'))) | ||
+ | self:assertNotStringContains(expected, doc._endBox({[1] = 'Foo'}, getEnv('Template:Example'))) | ||
+ | self:assertNotStringContains(expected, doc._endBox({content = 'Bar'}, getEnv('Template:Example'))) | ||
+ | self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle'))) | ||
+ | end | ||
+ | |||
+ | function suite:testEndBoxPrintBlurb() | ||
+ | local expected = '<br />A %[%[Help:Books/for experts#Improving the book layout|print version%]%]' | ||
+ | .. ' of this template exists at %[%[.-|/Print%]%]%.' | ||
+ | .. ' If you make a change to this template, please update the print version as well%.' | ||
+ | self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Expand list'))) -- Has a /Print subpage | ||
+ | self:assertNotStringContains(expected, doc._endBox({}, getEnv('Template:Example'))) -- Doesn't have a /Print subpage, and is not likely to. | ||
end | end | ||
Line 508: | Line 575: | ||
function suite:testDocPageBlurbTemplateDocExists() | function suite:testDocPageBlurbTemplateDocExists() | ||
local env = getEnv('Template:Documentation') | local env = getEnv('Template:Documentation') | ||
− | local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Template:Documentation/doc]]. < | + | local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Template:Documentation/doc]]. <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=history history])</span><br />' |
self:assertEquals(expected, doc.makeDocPageBlurb({}, env)) | self:assertEquals(expected, doc.makeDocPageBlurb({}, env)) | ||
end | end | ||
Line 519: | Line 586: | ||
function suite:testDocPageBlurbModuleDocExists() | function suite:testDocPageBlurbModuleDocExists() | ||
local env = getEnv('Module:Bananas') | local env = getEnv('Module:Bananas') | ||
− | local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Module:Bananas/doc]]. < | + | local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Module:Bananas/doc]]. <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=history history])</span><br />' |
self:assertEquals(expected, doc.makeDocPageBlurb({}, env)) | self:assertEquals(expected, doc.makeDocPageBlurb({}, env)) | ||
end | end | ||
Line 545: | Line 612: | ||
function suite:testExperimentBlurbSandboxExists() | function suite:testExperimentBlurbSandboxExists() | ||
local env = getEnv('Template:Edit protected') | local env = getEnv('Template:Edit protected') | ||
− | local pattern = '[[Template:Edit protected/sandbox|sandbox]] < | + | local pattern = '[[Template:Edit protected/sandbox|sandbox]] <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/sandbox&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Template%3AEdit+protected&page2=Template%3AEdit+protected%2Fsandbox diff])</span>' |
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | ||
end | end | ||
Line 551: | Line 618: | ||
function suite:testExperimentBlurbSandboxDoesntExist() | function suite:testExperimentBlurbSandboxDoesntExist() | ||
local env = getEnv('Template:Non-existent template sajdfasd') | local env = getEnv('Template:Non-existent template sajdfasd') | ||
− | local pattern = 'sandbox < | + | local pattern = 'sandbox <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&action=edit&preload=Template%3ADocumentation%2Fpreload-sandbox create] | [//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&preload=Template%3ADocumentation%2Fmirror&action=edit&summary=Create+sandbox+version+of+%5B%5BTemplate%3ANon-existent+template+sajdfasd%5D%5D mirror])</span>' |
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | ||
end | end | ||
Line 557: | Line 624: | ||
function suite:testExperimentBlurbTestcasesExist() | function suite:testExperimentBlurbTestcasesExist() | ||
local env = getEnv('Template:Edit protected') | local env = getEnv('Template:Edit protected') | ||
− | local pattern = '[[Template:Edit protected/testcases|testcases]] < | + | local pattern = '[[Template:Edit protected/testcases|testcases]] <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/testcases&action=edit edit])</span>' |
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | ||
end | end | ||
Line 563: | Line 630: | ||
function suite:testExperimentBlurbTestcasesDontExist() | function suite:testExperimentBlurbTestcasesDontExist() | ||
local env = getEnv('Template:Non-existent template sajdfasd') | local env = getEnv('Template:Non-existent template sajdfasd') | ||
− | local pattern = 'testcases < | + | local pattern = 'testcases <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/testcases&action=edit&preload=Template%3ADocumentation%2Fpreload-testcases create])</span>' |
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) | ||
end | end | ||
Line 582: | Line 649: | ||
function suite:testMakeSubpagesBlurbTemplate() | function suite:testMakeSubpagesBlurbTemplate() | ||
local env = getEnv('Template:Example') | local env = getEnv('Template:Example') | ||
− | self:assertEquals('[[Special:PrefixIndex/Template:Example/|Subpages of this template]]', doc.makeSubpagesBlurb({}, env)) | + | self:assertEquals('[[Special:PrefixIndex/Template:Example/|Subpages of this template]].', doc.makeSubpagesBlurb({}, env)) |
end | end | ||
function suite:testMakeSubpagesBlurbModule() | function suite:testMakeSubpagesBlurbModule() | ||
local env = getEnv('Module:Bananas') | local env = getEnv('Module:Bananas') | ||
− | self:assertEquals('[[Special:PrefixIndex/Module:Bananas/|Subpages of this module]]', doc.makeSubpagesBlurb({}, env)) | + | self:assertEquals('[[Special:PrefixIndex/Module:Bananas/|Subpages of this module]].', doc.makeSubpagesBlurb({}, env)) |
end | end | ||
function suite:testMakeSubpagesBlurbOther() | function suite:testMakeSubpagesBlurbOther() | ||
local env = getEnv('File:Example.png') | local env = getEnv('File:Example.png') | ||
− | self:assertEquals('[[Special:PrefixIndex/File:Example.png/|Subpages of this page]]', doc.makeSubpagesBlurb({}, env)) | + | self:assertEquals('[[Special:PrefixIndex/File:Example.png/|Subpages of this page]].', doc.makeSubpagesBlurb({}, env)) |
end | end | ||
Line 626: | Line 693: | ||
-- Test addTrackingCategories | -- Test addTrackingCategories | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
+ | |||
+ | function suite.getStrangeUsageCat() | ||
+ | return '[[Category:Wikipedia pages with strange ((documentation)) usage]]' | ||
+ | end | ||
function suite:testAddTrackingCategoriesTemplatePage() | function suite:testAddTrackingCategoriesTemplatePage() | ||
Line 634: | Line 705: | ||
function suite:testAddTrackingCategoriesDocPage() | function suite:testAddTrackingCategoriesDocPage() | ||
local env = getEnv('Template:Example/doc') | local env = getEnv('Template:Example/doc') | ||
− | self:assertEquals( | + | self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env)) |
end | end | ||
function suite:testAddTrackingCategoriesTestcasesPage() | function suite:testAddTrackingCategoriesTestcasesPage() | ||
local env = getEnv('Template:Example/testcases') | local env = getEnv('Template:Example/testcases') | ||
− | self:assertEquals(' | + | self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env)) |
+ | end | ||
+ | |||
+ | function suite:testAddTrackingCategoriesModuleDoc() | ||
+ | local env = getEnv('Module:Math/doc') | ||
+ | self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env)) | ||
+ | end | ||
+ | |||
+ | function suite:testAddTrackingCategoriesModuleTestcases() | ||
+ | local env = getEnv('Module:Math/testcases') | ||
+ | self:assertEquals('', doc.addTrackingCategories(env)) | ||
+ | end | ||
+ | |||
+ | function suite:testAddTrackingCategoriesInvalidTitle() | ||
+ | local env = getEnv('Template:Foo[]Bar') | ||
+ | self:assertEquals(nil, doc.addTrackingCategories(env)) | ||
+ | end | ||
+ | |||
+ | -------------------------------------------------------------------------------------------- | ||
+ | -- Whitespace tests | ||
+ | -------------------------------------------------------------------------------------------- | ||
+ | |||
+ | function suite:testNoTrailingWhitespace() | ||
+ | self:assertStringContains('</table>$', doc._main{page = 'Template:Example'}) | ||
end | end | ||
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
− | -- | + | -- Whole-module tests |
-------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ||
function suite:testSandboxImageBug() | function suite:testSandboxImageBug() | ||
− | self:assertNotStringContains('<table id="documentation%-meta%-data".-%[%[%w+:Sandbox. | + | self:assertNotStringContains('<table id="documentation%-meta%-data".-%[%[%w+:Sandbox.svg', doc._main{page = 'Template:Example/sandbox'}) |
end | end | ||
return suite | return suite |
Latest revision as of 16:21, 26 September 2020
Documentation for this module may be created at Module:Documentation/testcases/doc
-- Test cases page for [[Module:Documentation]]. See talk page to run tests.
local doc = require('Module:Documentation/sandbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
--------------------------------------------------------------------------------------------
-- Test case helper functions
--------------------------------------------------------------------------------------------
local function getEnv(page)
-- Gets an env table using the specified page.
return doc.getEnvironment{page = page}
end
--------------------------------------------------------------------------------------------
-- Test helper functions
--------------------------------------------------------------------------------------------
function suite:testMessage()
self:assertEquals('sandbox', doc.message('sandbox-subpage'))
self:assertEquals('Subpages of this foobar', doc.message('subpages-link-display', {'foobar'}))
self:assertEquals(true, doc.message('display-print-category', nil, 'boolean'))
end
function suite:testMakeToolbar()
self:assertEquals(nil, doc.makeToolbar())
self:assertEquals('<span class="template-documentation-toolbar-link">(Foo)</span>', doc.makeToolbar('Foo'))
self:assertEquals('<span class="template-documentation-toolbar-link">(Foo | Bar)</span>', doc.makeToolbar('Foo', 'Bar'))
end
function suite:testMakeWikilink()
self:assertEquals('[[Foo]]', doc.makeWikilink('Foo'))
self:assertEquals('[[Foo|Bar]]', doc.makeWikilink('Foo', 'Bar'))
end
function suite:testMakeCategoryLink()
self:assertEquals('[[Category:Foo]]', doc.makeCategoryLink('Foo'))
self:assertEquals('[[Category:Foo|Bar]]', doc.makeCategoryLink('Foo', 'Bar'))
end
function suite:testMakeUrlLink()
self:assertEquals('[Foo Bar]', doc.makeUrlLink('Foo', 'Bar'))
end
--------------------------------------------------------------------------------------------
-- Test env table
--------------------------------------------------------------------------------------------
function suite:assertEnvFieldEquals(expected, page, field)
local env = getEnv(page)
self:assertEquals(expected, env[field])
end
function suite:assertEnvTitleEquals(expected, page, titleField)
local env = getEnv(page)
local title = env[titleField]
self:assertEquals(expected, title.prefixedText)
end
function suite:testEnvTitle()
self:assertEnvTitleEquals('Wikipedia:Sandbox', 'Wikipedia:Sandbox', 'title')
self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'title')
end
function suite:testEnvBadTitle()
local env = doc.getEnvironment{page = 'Bad[]Title'}
local title = env.title
self:assertEquals(nil, title)
end
function suite:testEnvTemplateTitle()
self:assertEnvTitleEquals('Template:Example', 'Template:Example', 'templateTitle')
self:assertEnvTitleEquals('Template:Example', 'Template talk:Example', 'templateTitle')
self:assertEnvTitleEquals('Template:Example', 'Template:Example/sandbox', 'templateTitle')
self:assertEnvTitleEquals('Template:Example', 'Template talk:Example/sandbox', 'templateTitle')
self:assertEnvTitleEquals('Template:Example', 'Template:Example/testcases', 'templateTitle')
self:assertEnvTitleEquals('Template:Example/foo', 'Template:Example/foo', 'templateTitle')
self:assertEnvTitleEquals('File:Example', 'File talk:Example', 'templateTitle')
self:assertEnvTitleEquals('File:Example', 'File talk:Example/sandbox', 'templateTitle')
end
function suite:testEnvDocTitle()
self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example', 'docTitle')
self:assertEnvTitleEquals('Template:Example/doc', 'Template talk:Example', 'docTitle')
self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example/sandbox', 'docTitle')
self:assertEnvTitleEquals('Talk:Example/doc', 'Example', 'docTitle')
self:assertEnvTitleEquals('File talk:Example.png/doc', 'File:Example.png', 'docTitle')
self:assertEnvTitleEquals('File talk:Example.png/doc', 'File talk:Example.png/sandbox', 'docTitle')
end
function suite:testEnvSandboxTitle()
self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example', 'sandboxTitle')
self:assertEnvTitleEquals('Template:Example/sandbox', 'Template talk:Example', 'sandboxTitle')
self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'sandboxTitle')
self:assertEnvTitleEquals('Talk:Example/sandbox', 'Example', 'sandboxTitle')
self:assertEnvTitleEquals('File talk:Example.png/sandbox', 'File:Example.png', 'sandboxTitle')
end
function suite:testEnvTestcasesTitle()
self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example', 'testcasesTitle')
self:assertEnvTitleEquals('Template:Example/testcases', 'Template talk:Example', 'testcasesTitle')
self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example/testcases', 'testcasesTitle')
self:assertEnvTitleEquals('Talk:Example/testcases', 'Example', 'testcasesTitle')
self:assertEnvTitleEquals('File talk:Example.png/testcases', 'File:Example.png', 'testcasesTitle')
end
function suite:testEnvPrintTitle()
self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example', 'printTitle')
self:assertEnvTitleEquals('Template:Example/Print', 'Template talk:Example', 'printTitle')
self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example/sandbox', 'printTitle')
end
function suite:testEnvProtectionLevels()
local pipeEnv = getEnv('Template:?')
self:assertEquals('autoconfirmed', pipeEnv.protectionLevels.edit[1])
local sandboxEnv = getEnv('Wikipedia:Sandbox')
local sandboxEditLevels = sandboxEnv.protectionLevels.edit
if sandboxEditLevels then -- sandboxEditLevels may also be nil if the page is unprotected
self:assertEquals(nil, sandboxEditLevels[1])
else
self:assertEquals(nil, sandboxEditLevels)
end
end
function suite:testEnvSubjectSpace()
self:assertEnvFieldEquals(10, 'Template:Sandbox', 'subjectSpace')
self:assertEnvFieldEquals(10, 'Template talk:Sandbox', 'subjectSpace')
self:assertEnvFieldEquals(0, 'Foo', 'subjectSpace')
self:assertEnvFieldEquals(0, 'Talk:Foo', 'subjectSpace')
end
function suite:testEnvDocSpace()
self:assertEnvFieldEquals(10, 'Template:Sandbox', 'docSpace')
self:assertEnvFieldEquals(828, 'Module:Sandbox', 'docSpace')
self:assertEnvFieldEquals(1, 'Foo', 'docSpace')
self:assertEnvFieldEquals(7, 'File:Example.png', 'docSpace')
self:assertEnvFieldEquals(9, 'MediaWiki:Watchlist-details', 'docSpace')
self:assertEnvFieldEquals(15, 'Category:Wikipedians', 'docSpace')
end
function suite:testEnvDocpageBase()
self:assertEnvFieldEquals('Template:Example', 'Template:Example', 'docpageBase')
self:assertEnvFieldEquals('Template:Example', 'Template:Example/sandbox', 'docpageBase')
self:assertEnvFieldEquals('Template:Example', 'Template talk:Example', 'docpageBase')
self:assertEnvFieldEquals('File talk:Example.png', 'File:Example.png', 'docpageBase')
self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png', 'docpageBase')
self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png/sandbox', 'docpageBase')
end
function suite:testEnvCompareUrl()
-- We use "Template:Edit protected" rather than "Template:Example" here as it has a space in the title.
local expected = '//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Template%3AEdit+protected&page2=Template%3AEdit+protected%2Fsandbox'
self:assertEnvFieldEquals(expected, 'Template:Edit protected', 'compareUrl')
self:assertEnvFieldEquals(expected, 'Template:Edit protected/sandbox', 'compareUrl')
self:assertEnvFieldEquals(nil, 'Template:Non-existent template adsfasdg', 'compareUrl')
self:assertEnvFieldEquals(nil, 'Template:Fact', 'compareUrl') -- Exists but doesn't have a sandbox.
end
--------------------------------------------------------------------------------------------
-- Test sandbox notice
--------------------------------------------------------------------------------------------
function suite.getSandboxNoticeTestData(page)
local env = getEnv(page)
local templatePage = page:match('^(.*)/sandbox$')
local image = '[[Image:Sandbox.svg|50px|alt=|link=]]'
local templateBlurb = 'This is the [[Wikipedia:Template test cases|template sandbox]] page for [[' .. templatePage .. ']]'
local moduleBlurb = 'This is the [[Wikipedia:Template test cases|module sandbox]] page for [[' .. templatePage .. ']]'
local otherBlurb = 'This is the sandbox page for [[' .. templatePage .. ']]'
local diff = '[//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=' .. mw.uri.encode(templatePage) .. '&page2=' .. mw.uri.encode(page) .. ' diff]'
local testcasesBlurb = 'See also the companion subpage for [[' .. templatePage .. '/testcases|test cases]].'
local category = '[[Category:Template sandboxes]]'
local clear = '<div class="template-documentation-sandbox-start"></div>'
return env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear
end
function suite:testSandboxNoticeNotSandbox()
local env = getEnv('Template:Example')
local notice = doc.sandboxNotice({}, env)
self:assertEquals(nil, notice)
end
function suite:testSandboxNoticeStaticVals()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear = suite.getSandboxNoticeTestData('Template:Example/sandbox')
local notice = doc.sandboxNotice({}, env)
-- Escape metacharacters (mainly '-')
clear = clear:gsub( '%p', '%%%0' )
self:assertStringContains('^' .. clear, notice, false)
self:assertStringContains(image, notice, true)
self:assertStringContains(category, notice, true)
end
function suite:testSandboxNoticeTemplateBlurb()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')
local notice = doc.sandboxNotice({}, env)
self:assertStringContains(templateBlurb, notice, true)
end
function suite:testSandboxNoticeModuleBlurb()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:Math/sandbox')
local notice = doc.sandboxNotice({}, env)
self:assertStringContains(moduleBlurb, notice, true)
end
function suite:testSandboxNoticeOtherBlurb()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('User:Mr. Stradivarius/sandbox')
local notice = doc.sandboxNotice({}, env)
self:assertStringContains(otherBlurb, notice, true)
end
function suite:testSandboxNoticeBlurbDiff()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')
local notice = doc.sandboxNotice({}, env)
if mw.title.getCurrentTitle().isTalk then
-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}).
-- The frame test doesn't seem to be working for now, so adding a namespace hack.
self:assertStringContains(diff, notice, true)
end
end
function suite:testSandboxNoticeBlurbDiffNoBasePage()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:User:Mr. Stradivarius/sandbox')
local notice = doc.sandboxNotice({}, env)
if mw.title.getCurrentTitle().isTalk then
-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}).
-- The frame test doesn't seem to be working for now, so adding a namespace hack.
self:assertNotStringContains(diff, notice, true)
end
end
function suite:testSandboxNoticeTestcases()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Edit protected/sandbox')
local notice = doc.sandboxNotice({}, env)
self:assertStringContains(testcasesBlurb, notice, true)
end
function suite:testSandboxNoticeNoTestcases()
local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')
local notice = doc.sandboxNotice({}, env)
self:assertNotStringContains(testcasesBlurb, notice, true)
end
--------------------------------------------------------------------------------------------
-- Test protection template
--
-- There's not much we can do with this until {{pp-meta}} gets rewritten in Lua. At the
-- moment the protection detection only works for the current page, and the testcases pages
-- will be unprotected.
--------------------------------------------------------------------------------------------
function suite:testProtectionTemplateUnprotectedTemplate()
local env = getEnv('Template:Example')
self:assertEquals(nil, doc.protectionTemplate(env))
end
function suite:testProtectionTemplateProtectedTemplate()
local env = getEnv('Template:Navbox')
-- Test whether there is some content. We don't care what the content is, as the protection level
-- detected will be for the current page, not the template.
self:assertTrue(doc.protectionTemplate(env))
end
function suite:testProtectionTemplateUnprotectedModule()
local env = getEnv('Module:Example')
self:assertEquals(nil, doc.protectionTemplate(env))
end
function suite:testProtectionTemplateProtectedModule()
local env = getEnv('Module:Yesno')
-- Test whether there is some content. We don't care what the content is, as the protection level
-- detected will be for the current page, not the template.
self:assertTrue(doc.protectionTemplate(env))
end
--------------------------------------------------------------------------------------------
-- Test _startBox
--------------------------------------------------------------------------------------------
function suite:testStartBoxContentArg()
local pattern = '<div class="template%-documentation%-startbox">\n<span class="template%-heading">.-</span></div>'
local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example'))
self:assertStringContains(pattern, startBox)
end
function suite:testStartBoxTemplateHtml()
self:assertStringContains(
'<div class="template%-documentation%-startbox">\n<span class="template%-heading">.-</span><span class="mw%-editsection%-like plainlinks" id="doc_editlinks">.-</span></div>',
doc._startBox({}, getEnv('Template:Example'))
)
end
function suite:testStartBoxMainHtml()
self:assertStringContains(
'<div class="template%-documentation%-startbox">\n<span class="other%-heading">.-</span><span class="mw%-editsection%-like plainlinks" id="doc_editlinks">.-</span></div>',
doc._startBox({}, getEnv('Foo'))
)
end
--------------------------------------------------------------------------------------------
-- Test makeStartBoxLinksData
--------------------------------------------------------------------------------------------
function suite:testMakeStartBoxLinksData()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxLinksData({}, env)
self:assertEquals('Template:Example', data.title.prefixedText)
self:assertEquals('Template:Example/doc', data.docTitle.prefixedText)
self:assertEquals('view', data.viewLinkDisplay)
self:assertEquals('edit', data.editLinkDisplay)
self:assertEquals('history', data.historyLinkDisplay)
self:assertEquals('purge', data.purgeLinkDisplay)
self:assertEquals('create', data.createLinkDisplay)
end
function suite:testMakeStartBoxLinksDataFilePreload()
local env = getEnv('File:Example.png')
local data = doc.makeStartBoxLinksData({}, env)
self:assertEquals('Template:Documentation/preload-filespace', data.preload)
end
function suite:testMakeStartBoxLinksDataTemplatePreload()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxLinksData({}, env)
self:assertEquals('Template:Documentation/preload', data.preload)
end
function suite:testMakeStartBoxLinksDataArgsPreload()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxLinksData({preload = 'My custom preload'}, env)
self:assertEquals('My custom preload', data.preload)
end
--------------------------------------------------------------------------------------------
-- Test renderStartBoxLinks
--------------------------------------------------------------------------------------------
function suite.makeExampleStartBoxLinksData(exists)
-- Makes a data table to be used with testRenderStartBoxLinksExists and testRenderStartBoxLinksDoesntExist.
local data = {}
if exists then
data.title = mw.title.new('Template:Example')
data.docTitle = mw.title.new('Template:Example/doc')
else
data.title = mw.title.new('Template:NonExistentTemplate')
data.docTitle = mw.title.new('Template:NonExistentTemplate/doc')
end
data.viewLinkDisplay = 'view'
data.editLinkDisplay = 'edit'
data.historyLinkDisplay = 'history'
data.purgeLinkDisplay = 'purge'
data.createLinkDisplay = 'create'
data.preload = 'Template:MyPreload'
return data
end
function suite:testRenderStartBoxLinksExists()
local data = suite.makeExampleStartBoxLinksData(true)
local expected = '[[[Template:Example/doc|view]]] [[//en.wikipedia.org/w/index.php?title=Template:Example/doc&action=edit edit]] [[//en.wikipedia.org/w/index.php?title=Template:Example/doc&action=history history]] [[//en.wikipedia.org/w/index.php?title=Template:Example&action=purge purge]]'
self:assertEquals(expected, doc.renderStartBoxLinks(data))
end
function suite:testRenderStartBoxLinksDoesntExist()
local data = suite.makeExampleStartBoxLinksData(false)
local expected = '[[//en.wikipedia.org/w/index.php?title=Template:NonExistentTemplate/doc&action=edit&preload=Template%3AMyPreload create]]'
self:assertEquals(expected, doc.renderStartBoxLinks(data))
end
--------------------------------------------------------------------------------------------
-- Test makeStartBoxData
--------------------------------------------------------------------------------------------
function suite:testStartBoxDataBlankHeading()
local data = doc.makeStartBoxData({heading = ''}, {})
self:assertEquals(nil, data)
end
function suite:testStartBoxDataHeadingTemplate()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxData({}, env)
local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Template documentation'
self:assertEquals(expected, data.heading)
end
function suite:testStartBoxDataHeadingModule()
local env = getEnv('Module:Bananas')
local data = doc.makeStartBoxData({}, env)
local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Module documentation'
self:assertEquals(expected, data.heading)
end
function suite:testStartBoxDataHeadingFile()
local env = getEnv('File:Example.png')
local data = doc.makeStartBoxData({}, env)
local expected = 'Summary'
self:assertEquals(expected, data.heading)
end
function suite:testStartBoxDataHeadingOther()
local env = getEnv('User:Example')
local data = doc.makeStartBoxData({}, env)
local expected = 'Documentation'
self:assertEquals(expected, data.heading)
end
function suite:testStartBoxDataHeadingStyle()
local data = doc.makeStartBoxData({['heading-style'] = 'foo:bar'}, {})
self:assertEquals('foo:bar', data.headingStyleText)
end
function suite:testStartBoxDataHeadingStyleTemplate()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxData({}, env)
self:assertEquals(nil, data.headingStyleText)
end
function suite:testStartBoxDataHeadingStyleOther()
local env = getEnv('User:Example')
local data = doc.makeStartBoxData({}, env)
self:assertEquals(nil, data.headingStyleText)
end
function suite:testStartBoxDataLinks()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxData({}, env, 'some links')
self:assertEquals('some links', data.links)
self:assertEquals('mw-editsection-like plainlinks', data.linksClass)
self:assertEquals('doc_editlinks', data.linksId)
end
function suite:testStartBoxDataNoLinks()
local env = getEnv('Template:Example')
local data = doc.makeStartBoxData({}, env)
self:assertEquals(nil, data.links)
self:assertEquals(nil, data.linksClass)
self:assertEquals(nil, data.linksId)
end
--------------------------------------------------------------------------------------------
-- Test renderStartBox
--------------------------------------------------------------------------------------------
function suite:testRenderStartBox()
local expected = '<div class="template-documentation-startbox">\n<span></span></div>'
self:assertEquals(expected, doc.renderStartBox{})
end
function suite:testRenderStartBoxHeadingStyleText()
self:assertStringContains('\n<span style="foo:bar">', doc.renderStartBox{headingStyleText = 'foo:bar'}, true)
end
function suite:testRenderStartBoxHeading()
self:assertStringContains('\n<span>Foobar</span>', doc.renderStartBox{heading = 'Foobar'}, true)
end
function suite:testRenderStartBoxLinks()
self:assertStringContains('<span>list of links</span>', doc.renderStartBox{links = 'list of links'}, true)
end
function suite:testRenderStartBoxLinksClass()
self:assertStringContains('<span class="linksclass">list of links</span>', doc.renderStartBox{linksClass = 'linksclass', links = 'list of links'}, true)
self:assertNotStringContains('linksclass', doc.renderStartBox{linksClass = 'linksclass'}, true)
end
function suite:testRenderStartBoxLinksId()
self:assertStringContains('<span id="linksid">list of links</span>', doc.renderStartBox{linksId = 'linksid', links = 'list of links'}, true)
self:assertNotStringContains('linksid', doc.renderStartBox{linksId = 'linksid'}, true)
end
--------------------------------------------------------------------------------------------
-- Test _content
--------------------------------------------------------------------------------------------
function suite:testContentArg()
self:assertEquals('\nsome documentation\n', doc._content({content = 'some documentation'}, {}))
end
function suite:testContentNoContent()
local env = getEnv('Template:This is a non-existent template agauchvaiu')
self:assertEquals('\n\n', doc._content({}, env))
end
function suite:testContentExists()
local env = doc.getEnvironment{'Template:Documentation/testcases/test3'}
local docs = mw.getCurrentFrame():preprocess('{{Template:Documentation/testcases/test3}}')
local expected = '\n' .. docs .. '\n'
self:assertEquals(expected, doc._content({}, env))
end
--------------------------------------------------------------------------------------------
-- Test _endBox
--------------------------------------------------------------------------------------------
function suite:testEndBoxLinkBoxOff()
local env = getEnv()
self:assertEquals(nil, doc._endBox({['link box'] = 'off'}, env))
end
function suite:testEndBoxNoDocsOtherNs()
local env = {
subjectSpace = 4,
docTitle = {
exists = false
}
}
self:assertEquals(nil, doc._endBox({}, env))
end
function suite:testEndBoxAlwaysShowNs()
self:assertTrue(doc._endBox({}, getEnv('Template:Non-existent template asdfalsdhaw')))
self:assertTrue(doc._endBox({}, getEnv('Module:Non-existent module asdhewbydcyg')))
self:assertTrue(doc._endBox({}, getEnv('User:Non-existent user ahfliwebalisyday')))
end
function suite:testEndBoxStyles()
local env = getEnv('Template:Example')
local endBox = doc._endBox({}, env)
self:assertStringContains('id="documentation-meta-data"', endBox, true)
self:assertNotStringContains('[[File:', endBox, true)
self:assertNotStringContains('[[Image:', endBox, true)
end
function suite:testEndBoxSandboxImage()
local env = getEnv('Template:Example/sandbox')
local endBox = doc._endBox({}, env)
self:assertNotStringContains('[[File:', endBox, true)
self:assertNotStringContains('[[Image:', endBox, true)
end
function suite:testEndBoxLinkBoxArg()
local env = getEnv()
self:assertStringContains('Custom link box', doc._endBox({['link box'] = 'Custom link box'}, env))
end
function suite:testEndBoxExperimentBlurbValidNs()
local expected = 'Editors can experiment in this.-<br />'
self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Example')))
self:assertStringContains(expected, doc._endBox({}, getEnv('Module:Bananas')))
self:assertStringContains(expected, doc._endBox({}, getEnv('User:Example')))
end
function suite:testEndBoxExperimentBlurbInvalidNs()
local expected = 'Editors can experiment in this.-<br />'
self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle'))) -- Wikipedia:Twinkle has an existing /doc subpage
end
function suite:testEndBoxCategoriesBlurb()
local expected = 'Please add categories to the %[%[.-|/doc%]%] subpage%.'
self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Example')))
self:assertStringContains(expected, doc._endBox({}, getEnv('Module:Bananas')))
self:assertStringContains(expected, doc._endBox({}, getEnv('User:Example')))
self:assertNotStringContains(expected, doc._endBox({[1] = 'Foo'}, getEnv('Template:Example')))
self:assertNotStringContains(expected, doc._endBox({content = 'Bar'}, getEnv('Template:Example')))
self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle')))
end
function suite:testEndBoxPrintBlurb()
local expected = '<br />A %[%[Help:Books/for experts#Improving the book layout|print version%]%]'
.. ' of this template exists at %[%[.-|/Print%]%]%.'
.. ' If you make a change to this template, please update the print version as well%.'
self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Expand list'))) -- Has a /Print subpage
self:assertNotStringContains(expected, doc._endBox({}, getEnv('Template:Example'))) -- Doesn't have a /Print subpage, and is not likely to.
end
--------------------------------------------------------------------------------------------
-- Test makeDocPageBlurb
--------------------------------------------------------------------------------------------
function suite:testDocPageBlurbError()
self:assertEquals(nil, doc.makeDocPageBlurb({}, {}))
end
function suite:testDocPageBlurbTemplateDocExists()
local env = getEnv('Template:Documentation')
local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Template:Documentation/doc]]. <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=history history])</span><br />'
self:assertEquals(expected, doc.makeDocPageBlurb({}, env))
end
function suite:testDocPageBlurbTemplateDocDoesntExist()
local env = getEnv('Template:Non-existent template ajlkfdsa')
self:assertEquals(nil, doc.makeDocPageBlurb({}, env))
end
function suite:testDocPageBlurbModuleDocExists()
local env = getEnv('Module:Bananas')
local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[Module:Bananas/doc]]. <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=history history])</span><br />'
self:assertEquals(expected, doc.makeDocPageBlurb({}, env))
end
function suite:testDocPageBlurbModuleDocDoesntExist()
local env = getEnv('Module:Non-existent module ajlkfdsa')
local expected = 'You might want to [//en.wikipedia.org/w/index.php?title=Module:Non-existent_module_ajlkfdsa/doc&action=edit&preload=Template%3ADocumentation%2Fpreload-module-doc create] a documentation page for this [[Wikipedia:Lua|Scribunto module]].<br />'
self:assertEquals(expected, doc.makeDocPageBlurb({}, env))
end
--------------------------------------------------------------------------------------------
-- Test makeExperimentBlurb
--------------------------------------------------------------------------------------------
function suite:testExperimentBlurbTemplate()
local env = getEnv('Template:Example')
self:assertStringContains("Editors can experiment in this template's .- and .- pages.", doc.makeExperimentBlurb({}, env))
end
function suite:testExperimentBlurbModule()
local env = getEnv('Module:Bananas')
self:assertStringContains("Editors can experiment in this module's .- and .- pages.", doc.makeExperimentBlurb({}, env))
end
function suite:testExperimentBlurbSandboxExists()
local env = getEnv('Template:Edit protected')
local pattern = '[[Template:Edit protected/sandbox|sandbox]] <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/sandbox&action=edit edit] | [//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Template%3AEdit+protected&page2=Template%3AEdit+protected%2Fsandbox diff])</span>'
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end
function suite:testExperimentBlurbSandboxDoesntExist()
local env = getEnv('Template:Non-existent template sajdfasd')
local pattern = 'sandbox <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&action=edit&preload=Template%3ADocumentation%2Fpreload-sandbox create] | [//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&preload=Template%3ADocumentation%2Fmirror&action=edit&summary=Create+sandbox+version+of+%5B%5BTemplate%3ANon-existent+template+sajdfasd%5D%5D mirror])</span>'
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end
function suite:testExperimentBlurbTestcasesExist()
local env = getEnv('Template:Edit protected')
local pattern = '[[Template:Edit protected/testcases|testcases]] <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/testcases&action=edit edit])</span>'
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end
function suite:testExperimentBlurbTestcasesDontExist()
local env = getEnv('Template:Non-existent template sajdfasd')
local pattern = 'testcases <span class="template-documentation-toolbar-link">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/testcases&action=edit&preload=Template%3ADocumentation%2Fpreload-testcases create])</span>'
self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end
--------------------------------------------------------------------------------------------
-- Test makeCategoriesBlurb
--------------------------------------------------------------------------------------------
function suite:testMakeCategoriesBlurb()
local env = getEnv('Template:Example')
self:assertEquals('Please add categories to the [[Template:Example/doc|/doc]] subpage.', doc.makeCategoriesBlurb({}, env))
end
--------------------------------------------------------------------------------------------
-- Test makeSubpagesBlurb
--------------------------------------------------------------------------------------------
function suite:testMakeSubpagesBlurbTemplate()
local env = getEnv('Template:Example')
self:assertEquals('[[Special:PrefixIndex/Template:Example/|Subpages of this template]].', doc.makeSubpagesBlurb({}, env))
end
function suite:testMakeSubpagesBlurbModule()
local env = getEnv('Module:Bananas')
self:assertEquals('[[Special:PrefixIndex/Module:Bananas/|Subpages of this module]].', doc.makeSubpagesBlurb({}, env))
end
function suite:testMakeSubpagesBlurbOther()
local env = getEnv('File:Example.png')
self:assertEquals('[[Special:PrefixIndex/File:Example.png/|Subpages of this page]].', doc.makeSubpagesBlurb({}, env))
end
--------------------------------------------------------------------------------------------
-- Test makePrintBlurb
--------------------------------------------------------------------------------------------
function suite:testMakePrintBlurbExists()
local env = {
printTitle = {
exists = true,
prefixedText = 'Template:Example/Print'
}
}
local expected = 'A [[Help:Books/for experts#Improving the book layout|print version]]'
.. ' of this template exists at [[Template:Example/Print|/Print]].'
.. ' If you make a change to this template, please update the print version as well.'
.. '[[Category:Templates with print versions]]'
self:assertEquals(expected, doc.makePrintBlurb({}, env))
end
function suite:testMakePrintBlurbDoesntExist()
local env = {
printTitle = {
exists = false,
prefixedText = 'Template:Example/Print'
}
}
self:assertEquals(nil, doc.makePrintBlurb({}, env))
end
--------------------------------------------------------------------------------------------
-- Test addTrackingCategories
--------------------------------------------------------------------------------------------
function suite.getStrangeUsageCat()
return '[[Category:Wikipedia pages with strange ((documentation)) usage]]'
end
function suite:testAddTrackingCategoriesTemplatePage()
local env = getEnv('Template:Example')
self:assertEquals('', doc.addTrackingCategories(env))
end
function suite:testAddTrackingCategoriesDocPage()
local env = getEnv('Template:Example/doc')
self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))
end
function suite:testAddTrackingCategoriesTestcasesPage()
local env = getEnv('Template:Example/testcases')
self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))
end
function suite:testAddTrackingCategoriesModuleDoc()
local env = getEnv('Module:Math/doc')
self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))
end
function suite:testAddTrackingCategoriesModuleTestcases()
local env = getEnv('Module:Math/testcases')
self:assertEquals('', doc.addTrackingCategories(env))
end
function suite:testAddTrackingCategoriesInvalidTitle()
local env = getEnv('Template:Foo[]Bar')
self:assertEquals(nil, doc.addTrackingCategories(env))
end
--------------------------------------------------------------------------------------------
-- Whitespace tests
--------------------------------------------------------------------------------------------
function suite:testNoTrailingWhitespace()
self:assertStringContains('</table>$', doc._main{page = 'Template:Example'})
end
--------------------------------------------------------------------------------------------
-- Whole-module tests
--------------------------------------------------------------------------------------------
function suite:testSandboxImageBug()
self:assertNotStringContains('<table id="documentation%-meta%-data".-%[%[%w+:Sandbox.svg', doc._main{page = 'Template:Example/sandbox'})
end
return suite