Module:Documentation/testcases

From blackwiki
< Module:Documentation
Revision as of 14:43, 26 January 2014 by test>Mr. Stradivarius (add print page tests (edit summary before should have read subpage tests, not print tests), and tracking category tests)
Jump to navigation Jump to search

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')
local ScribuntoUnit = require('Module:ScribuntoUnit/sandbox')
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('<small style="font-style: normal;">(Foo)</small>', doc.makeToolbar('Foo'))
	self:assertEquals('<small style="font-style: normal;">(Foo &#124; Bar)</small>', 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: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')
end

--------------------------------------------------------------------------------------------
-- Test sandbox notice
--------------------------------------------------------------------------------------------

function suite.getSandboxNoticeStrings(page)
	local templatePage = page:match('^(.*)/sandbox$')
	local image = '[[Image:Sandbox.png|50px|alt=|link=]]'
	local blurb = 'This is the [[Wikipedia:Template test cases|template 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 [[' .. page .. '/testcases|test cases]].'
	local category = '[[Category:Template sandboxes]]'
	return image, blurb, diff, testcasesBlurb, category
end	

function suite:testSandboxNoticeNotSandbox()
	local env = getEnv('Template:Example')
	local notice = doc.sandboxNotice({}, env)
	self:assertEquals(nil, notice)
end

function suite:testSandboxNoticeTestcases()
	local image, blurb, diff, testcasesBlurb, category = suite.getSandboxNoticeStrings('Template:Example/sandbox')
	local env = getEnv('Template:Example/sandbox')
	local notice = doc.sandboxNotice({}, env)
	self:assertStringContains(image, notice, true)
	self:assertStringContains(blurb, notice, true)
	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
	self:assertNotStringContains(testcasesBlurb, notice, true)
	self:assertStringContains(category, 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:!')
	-- 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

--------------------------------------------------------------------------------------------
-- START BOX
--------------------------------------------------------------------------------------------

function suite:testStartBoxContentArg()
	local pattern = '<div style="padding%-bottom:3px;border%-bottom:1px solid #aaa;margin%-bottom:1ex;">\n<span style="font%-weight:bold;font%-size:125%%;">.-</span></div>'
	local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example'))
	self:assertStringContains(pattern, startBox)
end

function suite:testStartBoxTemplateHtml()
	self:assertStringContains(
		'<div style="padding%-bottom:3px;border%-bottom:1px solid #aaa;margin%-bottom:1ex;">\n<span style="font%-weight:bold;font%-size:125%%;">.-</span><span class="mw%-editsection plainlinks" id="doc_editlinks">.-</span></div>',
		doc._startBox({}, getEnv('Template:Example'))
	)
end

function suite:testStartBoxMainHtml()
	self:assertStringContains(
		'<div style="padding%-bottom:3px;border%-bottom:1px solid #aaa;margin%-bottom:1ex;">\n<span style="font%-size:150%%;">.-</span><span class="mw%-editsection 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:!')
		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 = '&#91;[[Template:!/doc|view]]&#93; &#91;[//en.wikipedia.org/w/index.php?title=Template:!/doc&action=edit edit]&#93; &#91;[//en.wikipedia.org/w/index.php?title=Template:!/doc&action=history history]&#93; &#91;[//en.wikipedia.org/w/index.php?title=Template:!&action=purge purge]&#93;'
	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 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:Template-info.png|50px|link=|alt=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 = '[[File:Template-info.png|50px|link=|alt=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 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 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 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 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 style="padding-bottom:3px;border-bottom:1px solid #aaa;margin-bottom:1ex;">\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:testRenderStartBoxHeadingFontWeight()
	self:assertStringContains('\n<span style="font-weight:bold;">', doc.renderStartBox{headingFontWeight = 'bold'}, true)
end

function suite:testRenderStartBoxHeadingFontSize()
	self:assertStringContains('\n<span style="font-size:120%;">', doc.renderStartBox{headingFontSize = '120%'}, 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 = getEnv('Template:Example')
	local docs = mw.getCurrentFrame():preprocess('{{Example/doc}}')
	local expected = '\n' .. docs .. '\n'
	self:assertEquals(expected, doc._content({}, env))
end

--------------------------------------------------------------------------------------------
-- END BOX
--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------
-- 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]]. <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=edit edit] &#124; [//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&action=history history])</small><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]]. <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=edit edit] &#124; [//en.wikipedia.org/w/index.php?title=Module:Bananas/doc&action=history history])</small><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]] <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/sandbox&action=edit edit] &#124; [//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Template%3AEdit+protected&page2=Template%3AEdit+protected%2Fsandbox diff])</small>'
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end

function suite:testExperimentBlurbSandboxDoesntExist()
	local env = getEnv('Template:Non-existent template sajdfasd')
	local pattern = 'sandbox <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&action=edit&preload=Template%3ADocumentation%2Fpreload-sandbox create] &#124; [//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&preload=Template%3ANon-existent+template+sajdfasd&action=edit&summary=Create+sandbox+version+of+%5B%5BTemplate%3ANon-existent+template+sajdfasd%5D%5D mirror])</small>'
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end

function suite:testExperimentBlurbTestcasesExist()
	local env = getEnv('Template:Edit protected')
	local pattern = '[[Template:Edit protected/testcases|testcases]] <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/testcases&action=edit edit])</small>'
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)
end

function suite:testExperimentBlurbTestcasesDontExist()
	local env = getEnv('Template:Non-existent template sajdfasd')
	local pattern = 'testcases <small style="font-style: normal;">([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/testcases&action=edit&preload=Template%3ADocumentation%2Fpreload-testcases create])</small>'
	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:testAddTrackingCategoriesTemplatePage()
	local env = getEnv('Template:Example')
	self:assertEquals('', doc.addTrackingCategories(env))
end

function suite:testAddTrackingCategoriesDocPage()
	local env = getEnv('Template:Example/doc')
	self:assertEquals('[[Category:Wikipedia pages with strange ((documentation)) usage]]', doc.addTrackingCategories(env))
end

function suite:testAddTrackingCategoriesTestcasesPage()
	local env = getEnv('Template:Example/testcases')
	self:assertEquals('[[Category:Wikipedia pages with strange ((documentation)) usage]]', doc.addTrackingCategories(env))
end

return suite