-- 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('(Foo)', doc.makeToolbar('Foo')) self:assertEquals('(Foo | Bar)', doc.makeToolbar('Foo', 'Bar')) end

function suite:testMakeWikilink() self:assertEquals('Foo', doc.makeWikilink('Foo')) self:assertEquals('Bar', doc.makeWikilink('Foo', 'Bar')) end

function suite:testMakeCategoryLink() self:assertEquals(, doc.makeCategoryLink('Foo')) self:assertEquals(, 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('sysop', 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 = '' local templateBlurb = 'This is the template sandbox page for ' .. templatePage .. '' local moduleBlurb = 'This is the module sandbox page for ' .. templatePage .. '' local otherBlurb = 'This is the sandbox page for ' .. templatePage .. '' local diff = '.. mw.uri.encode(templatePage) .. '&page2=' .. mw.uri.encode(page) .. ' diff' local testcasesBlurb = 'See also the companion subpage for test cases.' local category =

local clear = '

'

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) 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(-). -- 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(-). -- 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 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:!') -- 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:Bananas') 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 = '

\n.-

'

local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example')) self:assertStringContains(pattern, startBox) end

function suite:testStartBoxTemplateHtml() self:assertStringContains(

'

\n.-.-

',

doc._startBox({}, getEnv('Template:Example')) ) end

function suite:testStartBoxMainHtml() self:assertStringContains(

'

\n.-.-

',

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:!') data.docTitle = mw.title.new('Template:!/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 = '[view] [edit] [history] [purge]' self:assertEquals(expected, doc.renderStartBoxLinks(data)) end

function suite:testRenderStartBoxLinksDoesntExist() local data = suite.makeExampleStartBoxLinksData(false) local expected = '[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 = 'Documentation icon Template documentation' self:assertEquals(expected, data.heading) end

function suite:testStartBoxDataHeadingModule() local env = getEnv('Module:Bananas') local data = doc.makeStartBoxData({}, env) local expected = 'Documentation icon 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) self:assertEquals(nil, data.headingFontSize) self:assertEquals(nil, data.headingFontWeight) end

function suite:testStartBoxDataHeadingStyleTemplate() local env = getEnv('Template:Example') local data = doc.makeStartBoxData({}, env) self:assertEquals('bold', data.headingFontWeight) self:assertEquals('125%', data.headingFontSize) self:assertEquals(nil, data.headingStyleText) end

function suite:testStartBoxDataHeadingStyleOther() local env = getEnv('User:Example') local data = doc.makeStartBoxData({}, env) self:assertEquals('150%', data.headingFontSize) self:assertEquals(nil, data.headingFontWeight) 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 = '

\n

'

self:assertEquals(expected, doc.renderStartBox{}) end

function suite:testRenderStartBoxHeadingStyleText() self:assertStringContains('\n', doc.renderStartBox{headingStyleText = 'foo:bar'}, true) end

function suite:testRenderStartBoxHeadingFontWeight() self:assertStringContains('\n', doc.renderStartBox{headingFontWeight = 'bold'}, true) end

function suite:testRenderStartBoxHeadingFontSize() self:assertStringContains('\n', doc.renderStartBox{headingFontSize = '120%'}, true) end

function suite:testRenderStartBoxHeading() self:assertStringContains('\nFoobar', doc.renderStartBox{heading = 'Foobar'}, true) end

function suite:testRenderStartBoxLinks() self:assertStringContains('list of links', doc.renderStartBox{links = 'list of links'}, true) end

function suite:testRenderStartBoxLinksClass() self:assertStringContains('list of links', doc.renderStartBox{linksClass = 'linksclass', links = 'list of links'}, true) self:assertNotStringContains('linksclass', doc.renderStartBox{linksClass = 'linksclass'}, true) end

function suite:testRenderStartBoxLinksId() self:assertStringContains('list of links', 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('మూస: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:assertStringContains('style="background-color: #ecfcf4;"', endBox, true) self:assertStringContains('style="font-style: italic;">', 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.-
' 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.-
' 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:Sandbox'))) end

function suite:testEndBoxPrintBlurb() local expected = '
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:!'))) -- 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 documentation is transcluded from Template:Documentation/doc. (edit | history)
' 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 documentation is transcluded from Module:Bananas/doc. (edit | history)
' self:assertEquals(expected, doc.makeDocPageBlurb({}, env)) end

function suite:testDocPageBlurbModuleDocDoesntExist() local env = getEnv('Module:Non-existent module ajlkfdsa') local expected = 'You might want to create a documentation page for this Scribunto module.
' 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 = 'sandbox (edit | diff)' self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) end

function suite:testExperimentBlurbSandboxDoesntExist() local env = getEnv('Template:Non-existent template sajdfasd') local pattern = 'sandbox (create | mirror)' self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) end

function suite:testExperimentBlurbTestcasesExist() local env = getEnv('Template:Edit protected') local pattern = 'testcases (edit)' self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true) end

function suite:testExperimentBlurbTestcasesDontExist() local env = getEnv('Template:Non-existent template sajdfasd') local pattern = 'testcases (create)' 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 /doc subpage.', doc.makeCategoriesBlurb({}, env)) end


-- Test makeSubpagesBlurb


function suite:testMakeSubpagesBlurbTemplate() local env = getEnv('Template:Example') self:assertEquals('Subpages of this template.', doc.makeSubpagesBlurb({}, env)) end

function suite:testMakeSubpagesBlurbModule() local env = getEnv('Module:Bananas') self:assertEquals('Subpages of this module.', doc.makeSubpagesBlurb({}, env)) end

function suite:testMakeSubpagesBlurbOther() local env = getEnv('File:Example.png') self:assertEquals('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 print version' .. ' of this template exists at /Print.' .. ' If you make a change to this template, please update the print version as well.' .. 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 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('$', 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