<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://idugov.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation%2Ftestcases</id>
	<title>Module:Documentation/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://idugov.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://idugov.com/w/index.php?title=Module:Documentation/testcases&amp;action=history"/>
	<updated>2026-05-10T18:16:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://idugov.com/w/index.php?title=Module:Documentation/testcases&amp;diff=31480&amp;oldid=prev</id>
		<title>Sanctaria: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://idugov.com/w/index.php?title=Module:Documentation/testcases&amp;diff=31480&amp;oldid=prev"/>
		<updated>2023-03-11T23:47:14Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:47, 11 March 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sanctaria</name></author>
	</entry>
	<entry>
		<id>https://idugov.com/w/index.php?title=Module:Documentation/testcases&amp;diff=31479&amp;oldid=prev</id>
		<title>en&gt;Uzume: again</title>
		<link rel="alternate" type="text/html" href="https://idugov.com/w/index.php?title=Module:Documentation/testcases&amp;diff=31479&amp;oldid=prev"/>
		<updated>2023-02-14T15:43:40Z</updated>

		<summary type="html">&lt;p&gt;again&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Test cases page for [[Module:Documentation]]. See talk page to run tests.&lt;br /&gt;
&lt;br /&gt;
local doc = require('Module:Documentation/sandbox')&lt;br /&gt;
local ScribuntoUnit = require('Module:ScribuntoUnit')&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test case helper functions&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getEnv(page)&lt;br /&gt;
	-- Gets an env table using the specified page.&lt;br /&gt;
	return doc.getEnvironment{page = page}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test helper functions&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testMessage()&lt;br /&gt;
	self:assertEquals('sandbox', doc.message('sandbox-subpage'))&lt;br /&gt;
	self:assertEquals('Subpages of this foobar', doc.message('subpages-link-display', {'foobar'}))&lt;br /&gt;
	self:assertEquals(true, doc.message('display-strange-usage-category', nil, 'boolean'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeToolbar()&lt;br /&gt;
	self:assertEquals(nil, doc.makeToolbar())&lt;br /&gt;
	self:assertEquals('&amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;(Foo)&amp;lt;/span&amp;gt;', doc.makeToolbar('Foo'))&lt;br /&gt;
	self:assertEquals('&amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;(Foo &amp;amp;#124; Bar)&amp;lt;/span&amp;gt;', doc.makeToolbar('Foo', 'Bar'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeWikilink()&lt;br /&gt;
	self:assertEquals('[[Foo]]', doc.makeWikilink('Foo'))&lt;br /&gt;
	self:assertEquals('[[Foo|Bar]]', doc.makeWikilink('Foo', 'Bar'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeCategoryLink()&lt;br /&gt;
	self:assertEquals('[[Category:Foo]]', doc.makeCategoryLink('Foo'))&lt;br /&gt;
	self:assertEquals('[[Category:Foo|Bar]]', doc.makeCategoryLink('Foo', 'Bar'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeUrlLink()&lt;br /&gt;
	self:assertEquals('[Foo Bar]', doc.makeUrlLink('Foo', 'Bar'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test env table&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:assertEnvFieldEquals(expected, page, field)&lt;br /&gt;
	local env = getEnv(page)&lt;br /&gt;
	self:assertEquals(expected, env[field])&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function suite:assertEnvTitleEquals(expected, page, titleField)&lt;br /&gt;
	local env = getEnv(page)&lt;br /&gt;
	local title = env[titleField]&lt;br /&gt;
	self:assertEquals(expected, title.prefixedText)&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvTitle()&lt;br /&gt;
	self:assertEnvTitleEquals('Wikipedia:Sandbox', 'Wikipedia:Sandbox', 'title')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'title')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvBadTitle()&lt;br /&gt;
	local env = doc.getEnvironment{page = 'Bad[]Title'}&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	self:assertEquals(nil, title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvTemplateTitle()&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example', 'Template:Example', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example', 'Template talk:Example', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example', 'Template:Example/sandbox', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example', 'Template talk:Example/sandbox', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example', 'Template:Example/testcases', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/foo', 'Template:Example/foo', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File:Example', 'File talk:Example', 'templateTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File:Example', 'File talk:Example/sandbox', 'templateTitle')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocTitle()&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example', 'docTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/doc', 'Template talk:Example', 'docTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example/sandbox', 'docTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Talk:Example/doc', 'Example', 'docTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File talk:Example.png/doc', 'File:Example.png', 'docTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File talk:Example.png/doc', 'File talk:Example.png/sandbox', 'docTitle')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvSandboxTitle()&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example', 'sandboxTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template talk:Example', 'sandboxTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'sandboxTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Talk:Example/sandbox', 'Example', 'sandboxTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File talk:Example.png/sandbox', 'File:Example.png', 'sandboxTitle')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvTestcasesTitle()&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example', 'testcasesTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template talk:Example', 'testcasesTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example/testcases', 'testcasesTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('Talk:Example/testcases', 'Example', 'testcasesTitle')&lt;br /&gt;
	self:assertEnvTitleEquals('File talk:Example.png/testcases', 'File:Example.png', 'testcasesTitle')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvProtectionLevels()&lt;br /&gt;
	local pipeEnv = getEnv('Template:?')&lt;br /&gt;
	self:assertEquals('autoconfirmed', pipeEnv.protectionLevels.edit[1])&lt;br /&gt;
	local sandboxEnv = getEnv('Wikipedia:Sandbox')&lt;br /&gt;
	local sandboxEditLevels = sandboxEnv.protectionLevels.edit&lt;br /&gt;
	if sandboxEditLevels then -- sandboxEditLevels may also be nil if the page is unprotected&lt;br /&gt;
		self:assertEquals(nil, sandboxEditLevels[1])&lt;br /&gt;
	else&lt;br /&gt;
		self:assertEquals(nil, sandboxEditLevels)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvSubjectSpace()&lt;br /&gt;
	self:assertEnvFieldEquals(10, 'Template:Sandbox', 'subjectSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(10, 'Template talk:Sandbox', 'subjectSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(0, 'Foo', 'subjectSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(0, 'Talk:Foo', 'subjectSpace')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocSpace()&lt;br /&gt;
	self:assertEnvFieldEquals(10, 'Template:Sandbox', 'docSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(828, 'Module:Sandbox', 'docSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(1, 'Foo', 'docSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(7, 'File:Example.png', 'docSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(9, 'MediaWiki:Watchlist-details', 'docSpace')&lt;br /&gt;
	self:assertEnvFieldEquals(15, 'Category:Wikipedians', 'docSpace')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocpageBase()&lt;br /&gt;
	self:assertEnvFieldEquals('Template:Example', 'Template:Example', 'docpageBase')&lt;br /&gt;
	self:assertEnvFieldEquals('Template:Example', 'Template:Example/sandbox', 'docpageBase')&lt;br /&gt;
	self:assertEnvFieldEquals('Template:Example', 'Template talk:Example', 'docpageBase')&lt;br /&gt;
	self:assertEnvFieldEquals('File talk:Example.png', 'File:Example.png', 'docpageBase')&lt;br /&gt;
	self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png', 'docpageBase')&lt;br /&gt;
	self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png/sandbox', 'docpageBase')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvCompareUrl()&lt;br /&gt;
	-- We use &amp;quot;Template:Edit protected&amp;quot; rather than &amp;quot;Template:Example&amp;quot; here as it has a space in the title.&lt;br /&gt;
	local expected = '//en.wikipedia.org/w/index.php?title=Special%3AComparePages&amp;amp;page1=Template%3AEdit+protected&amp;amp;page2=Template%3AEdit+protected%2Fsandbox'&lt;br /&gt;
	self:assertEnvFieldEquals(expected, 'Template:Edit protected', 'compareUrl') &lt;br /&gt;
	self:assertEnvFieldEquals(expected, 'Template:Edit protected/sandbox', 'compareUrl')&lt;br /&gt;
	self:assertEnvFieldEquals(nil, 'Template:Non-existent template adsfasdg', 'compareUrl')&lt;br /&gt;
	self:assertEnvFieldEquals(nil, 'Template:Fact', 'compareUrl') -- Exists but doesn't have a sandbox.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test sandbox notice&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite.getSandboxNoticeTestData(page)&lt;br /&gt;
	local env = getEnv(page)&lt;br /&gt;
	local templatePage = page:match('^(.*)/sandbox$')&lt;br /&gt;
	local image = '[[File:Sandbox.svg|50px|alt=|link=]]'&lt;br /&gt;
	local templateBlurb = 'This is the [[Wikipedia:Template test cases|template sandbox]] page for [[' .. templatePage .. ']]'&lt;br /&gt;
	local moduleBlurb = 'This is the [[Wikipedia:Template test cases|module sandbox]] page for [[' .. templatePage .. ']]'&lt;br /&gt;
	local otherBlurb = 'This is the sandbox page for [[' .. templatePage .. ']]'&lt;br /&gt;
	local diff = '[//en.wikipedia.org/w/index.php?title=Special%3AComparePages&amp;amp;page1=' .. mw.uri.encode(templatePage) .. '&amp;amp;page2=' .. mw.uri.encode(page) .. ' diff]'&lt;br /&gt;
	local testcasesBlurb = 'See also the companion subpage for [[' .. templatePage .. '/testcases|test cases]].'&lt;br /&gt;
	local category = '[[Category:Template sandboxes]]'&lt;br /&gt;
	local clear = '&amp;lt;div class=&amp;quot;documentation-clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;'&lt;br /&gt;
	return env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeNotSandbox()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertEquals(nil, notice)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeStaticVals()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category, clear = suite.getSandboxNoticeTestData('Template:Example/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
&lt;br /&gt;
    -- Escape metacharacters (mainly '-')&lt;br /&gt;
    clear = clear:gsub( '%p', '%%%0' )&lt;br /&gt;
&lt;br /&gt;
	self:assertStringContains('^' .. clear, notice, false)&lt;br /&gt;
	self:assertStringContains(image, notice, true)&lt;br /&gt;
	self:assertStringContains(category, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeTemplateBlurb()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertStringContains(templateBlurb, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeModuleBlurb()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:Math/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertStringContains(moduleBlurb, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeOtherBlurb()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('User:Mr. Stradivarius/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertStringContains(otherBlurb, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeBlurbDiff()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	if mw.title.getCurrentTitle().isTalk then&lt;br /&gt;
		-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}).&lt;br /&gt;
		-- The frame test doesn't seem to be working for now, so adding a namespace hack.&lt;br /&gt;
		self:assertStringContains(diff, notice, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeBlurbDiffNoBasePage()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Module:User:Mr. Stradivarius/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	if mw.title.getCurrentTitle().isTalk then&lt;br /&gt;
		-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}).&lt;br /&gt;
		-- The frame test doesn't seem to be working for now, so adding a namespace hack.&lt;br /&gt;
		self:assertNotStringContains(diff, notice, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeTestcases()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Edit protected/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertStringContains(testcasesBlurb, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testSandboxNoticeNoTestcases()&lt;br /&gt;
	local env, image, templateBlurb, moduleBlurb, otherBlurb, diff, testcasesBlurb, category = suite.getSandboxNoticeTestData('Template:Example/sandbox')&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	self:assertNotStringContains(testcasesBlurb, notice, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test protection template&lt;br /&gt;
-- &lt;br /&gt;
-- There's not much we can do with this until {{pp-meta}} gets rewritten in Lua. At the&lt;br /&gt;
-- moment the protection detection only works for the current page, and the testcases pages&lt;br /&gt;
-- will be unprotected.&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testProtectionTemplateUnprotectedTemplate()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	self:assertEquals(nil, doc.protectionTemplate(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testProtectionTemplateProtectedTemplate()&lt;br /&gt;
	local env = getEnv('Template:Navbox')&lt;br /&gt;
	-- Test whether there is some content. We don't care what the content is, as the protection level&lt;br /&gt;
	-- detected will be for the current page, not the template.&lt;br /&gt;
	self:assertTrue(doc.protectionTemplate(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testProtectionTemplateUnprotectedModule()&lt;br /&gt;
	local env = getEnv('Module:Example')&lt;br /&gt;
	self:assertEquals(nil, doc.protectionTemplate(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testProtectionTemplateProtectedModule()&lt;br /&gt;
	local env = getEnv('Module:Yesno')&lt;br /&gt;
	-- Test whether there is some content. We don't care what the content is, as the protection level&lt;br /&gt;
	-- detected will be for the current page, not the template.&lt;br /&gt;
	self:assertTrue(doc.protectionTemplate(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test _startBox&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxContentArg()&lt;br /&gt;
	local pattern = '&amp;lt;div class=&amp;quot;documentation%-startbox&amp;quot;&amp;gt;\n&amp;lt;span class=&amp;quot;documentation%-heading&amp;quot;&amp;gt;.-&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;'&lt;br /&gt;
	local startBox = doc._startBox({content = 'some documentation'}, getEnv('Template:Example'))&lt;br /&gt;
	self:assertStringContains(pattern, startBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxHtml()&lt;br /&gt;
	self:assertStringContains(&lt;br /&gt;
		'&amp;lt;div class=&amp;quot;documentation%-startbox&amp;quot;&amp;gt;\n&amp;lt;span class=&amp;quot;documentation%-heading&amp;quot;&amp;gt;.-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mw%-editsection%-like plainlinks&amp;quot;&amp;gt;.-&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;',&lt;br /&gt;
		doc._startBox({}, getEnv('Template:Example'))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeStartBoxLinksData&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksData()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals('Template:Example', data.title.prefixedText)&lt;br /&gt;
	self:assertEquals('Template:Example/doc', data.docTitle.prefixedText)&lt;br /&gt;
	self:assertEquals('view', data.viewLinkDisplay)&lt;br /&gt;
	self:assertEquals('edit', data.editLinkDisplay)&lt;br /&gt;
	self:assertEquals('history', data.historyLinkDisplay)&lt;br /&gt;
	self:assertEquals('purge', data.purgeLinkDisplay)&lt;br /&gt;
	self:assertEquals('create', data.createLinkDisplay)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataFilePreload()&lt;br /&gt;
	local env = getEnv('File:Example.png')&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals('Template:Documentation/preload-filespace', data.preload)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataTemplatePreload()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals('Template:Documentation/preload', data.preload)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataArgsPreload()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({preload = 'My custom preload'}, env)&lt;br /&gt;
	self:assertEquals('My custom preload', data.preload)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test renderStartBoxLinks&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite.makeExampleStartBoxLinksData(exists)&lt;br /&gt;
	-- Makes a data table to be used with testRenderStartBoxLinksExists and testRenderStartBoxLinksDoesntExist.&lt;br /&gt;
	local data = {}&lt;br /&gt;
	if exists then&lt;br /&gt;
		data.title = mw.title.new('Template:Example')&lt;br /&gt;
		data.docTitle = mw.title.new('Template:Example/doc')&lt;br /&gt;
	else&lt;br /&gt;
		data.title = mw.title.new('Template:NonExistentTemplate')&lt;br /&gt;
		data.docTitle = mw.title.new('Template:NonExistentTemplate/doc')&lt;br /&gt;
	end&lt;br /&gt;
	data.viewLinkDisplay = 'view'&lt;br /&gt;
	data.editLinkDisplay = 'edit'&lt;br /&gt;
	data.historyLinkDisplay = 'history'&lt;br /&gt;
	data.purgeLinkDisplay = 'purge'&lt;br /&gt;
	data.createLinkDisplay = 'create'&lt;br /&gt;
	data.preload = 'Template:MyPreload'&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksExists()&lt;br /&gt;
	local data = suite.makeExampleStartBoxLinksData(true)&lt;br /&gt;
	local expected = '&amp;amp;#91;[[Template:Example/doc|view]]&amp;amp;#93; &amp;amp;#91;[//en.wikipedia.org/w/index.php?title=Template:Example/doc&amp;amp;action=edit edit]&amp;amp;#93; &amp;amp;#91;[//en.wikipedia.org/w/index.php?title=Template:Example/doc&amp;amp;action=history history]&amp;amp;#93; &amp;amp;#91;[//en.wikipedia.org/w/index.php?title=Template:Example&amp;amp;action=purge purge]&amp;amp;#93;'&lt;br /&gt;
	self:assertEquals(expected, doc.renderStartBoxLinks(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksDoesntExist()&lt;br /&gt;
	local data = suite.makeExampleStartBoxLinksData(false)&lt;br /&gt;
	local expected = '&amp;amp;#91;[//en.wikipedia.org/w/index.php?title=Template:NonExistentTemplate/doc&amp;amp;action=edit&amp;amp;preload=Template%3AMyPreload create]&amp;amp;#93; &amp;amp;#91;[//en.wikipedia.org/w/index.php?title=Template:NonExistentTemplate&amp;amp;action=purge purge]&amp;amp;#93;'&lt;br /&gt;
	self:assertEquals(expected, doc.renderStartBoxLinks(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeStartBoxData&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataBlankHeading()&lt;br /&gt;
	local data = doc.makeStartBoxData({heading = ''}, {})&lt;br /&gt;
	self:assertEquals(nil, data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingTemplate()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Template documentation'&lt;br /&gt;
	self:assertEquals(expected, data.heading)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingModule()&lt;br /&gt;
	local env = getEnv('Module:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Module documentation'&lt;br /&gt;
	self:assertEquals(expected, data.heading)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingFile()&lt;br /&gt;
	local env = getEnv('File:Example.png')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = 'Summary'&lt;br /&gt;
	self:assertEquals(expected, data.heading)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingOther()&lt;br /&gt;
	local env = getEnv('User:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = 'Documentation'&lt;br /&gt;
	self:assertEquals(expected, data.heading)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingStyle()&lt;br /&gt;
	local data = doc.makeStartBoxData({['heading-style'] = 'foo:bar'}, {})&lt;br /&gt;
	self:assertEquals('foo:bar', data.headingStyleText)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingStyleTemplate()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	self:assertEquals(nil, data.headingStyleText)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingStyleOther()&lt;br /&gt;
	local env = getEnv('User:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	self:assertEquals(nil, data.headingStyleText)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataLinks()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env, 'some links')&lt;br /&gt;
	self:assertEquals('some links', data.links)&lt;br /&gt;
	self:assertEquals('mw-editsection-like plainlinks', data.linksClass)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataNoLinks()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	self:assertEquals(nil, data.links)&lt;br /&gt;
	self:assertEquals(nil, data.linksClass)&lt;br /&gt;
	self:assertEquals(nil, data.linksId)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test renderStartBox&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBox()&lt;br /&gt;
	local expected = '&amp;lt;div class=&amp;quot;documentation-startbox&amp;quot;&amp;gt;\n&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;'&lt;br /&gt;
	self:assertEquals(expected, doc.renderStartBox{})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxHeadingStyleText()&lt;br /&gt;
	self:assertStringContains('\n&amp;lt;span style=&amp;quot;foo:bar&amp;quot;&amp;gt;', doc.renderStartBox{headingStyleText = 'foo:bar'}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxHeading()&lt;br /&gt;
	self:assertStringContains('\n&amp;lt;span&amp;gt;Foobar&amp;lt;/span&amp;gt;', doc.renderStartBox{heading = 'Foobar'}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinks()&lt;br /&gt;
	self:assertStringContains('&amp;lt;span&amp;gt;list of links&amp;lt;/span&amp;gt;', doc.renderStartBox{links = 'list of links'}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksClass()&lt;br /&gt;
	self:assertStringContains('&amp;lt;span class=&amp;quot;linksclass&amp;quot;&amp;gt;list of links&amp;lt;/span&amp;gt;', doc.renderStartBox{linksClass = 'linksclass', links = 'list of links'}, true)&lt;br /&gt;
	self:assertNotStringContains('linksclass', doc.renderStartBox{linksClass = 'linksclass'}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksId()&lt;br /&gt;
	self:assertStringContains('&amp;lt;span id=&amp;quot;linksid&amp;quot;&amp;gt;list of links&amp;lt;/span&amp;gt;', doc.renderStartBox{linksId = 'linksid', links = 'list of links'}, true)&lt;br /&gt;
	self:assertNotStringContains('linksid', doc.renderStartBox{linksId = 'linksid'}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test _content&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testContentArg()&lt;br /&gt;
	self:assertEquals('\nsome documentation\n', doc._content({content = 'some documentation'}, {}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentNoContent()&lt;br /&gt;
	local env = getEnv('Template:This is a non-existent template agauchvaiu')&lt;br /&gt;
	self:assertEquals('\n\n', doc._content({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentExists()&lt;br /&gt;
	local env = doc.getEnvironment{'Template:Documentation/testcases/test3'}&lt;br /&gt;
	local docs = mw.getCurrentFrame():preprocess('{{Template:Documentation/testcases/test3}}')&lt;br /&gt;
	local expected = '\n' .. docs .. '\n'&lt;br /&gt;
	self:assertEquals(expected, doc._content({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test _endBox&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxLinkBoxOff()&lt;br /&gt;
	local env = getEnv()&lt;br /&gt;
	self:assertEquals(nil, doc._endBox({['link box'] = 'off'}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxNoDocsOtherNs()&lt;br /&gt;
	local env = {&lt;br /&gt;
		subjectSpace = 4,&lt;br /&gt;
		docTitle = {&lt;br /&gt;
			exists = false&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	self:assertEquals(nil, doc._endBox({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxAlwaysShowNs()&lt;br /&gt;
	self:assertTrue(doc._endBox({}, getEnv('Template:Non-existent template asdfalsdhaw')))&lt;br /&gt;
	self:assertTrue(doc._endBox({}, getEnv('Module:Non-existent module asdhewbydcyg')))&lt;br /&gt;
	self:assertTrue(doc._endBox({}, getEnv('User:Non-existent user ahfliwebalisyday')))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxStyles()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	local endBox = doc._endBox({}, env)&lt;br /&gt;
	self:assertStringContains('class=&amp;quot;documentation-metadata plainlinks&amp;quot;', endBox, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxLinkBoxArg()&lt;br /&gt;
	local env = getEnv()&lt;br /&gt;
	self:assertStringContains('Custom link box', doc._endBox({['link box'] = 'Custom link box'}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxExperimentBlurbValidNs()&lt;br /&gt;
	local expected = 'Editors can experiment in this.-&amp;lt;br /&amp;gt;'&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Example')))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('Module:Example')))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('User:Example')))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxExperimentBlurbInvalidNs()&lt;br /&gt;
	local expected = 'Editors can experiment in this.-&amp;lt;br /&amp;gt;'&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle'))) -- Wikipedia:Twinkle has an existing /doc subpage&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxCategoriesBlurb()&lt;br /&gt;
	local expected = 'Add categories to the %[%[.-|/doc%]%] subpage%.'&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('Template:Example')))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('Module:Example')))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv('User:Example')))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({[1] = 'Foo'}, getEnv('Template:Example')))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({content = 'Bar'}, getEnv('Template:Example')))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({}, getEnv('Wikipedia:Twinkle')))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeDocPageBlurb&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testDocPageBlurbError()&lt;br /&gt;
	self:assertEquals(nil, doc.makeDocPageBlurb({}, {}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDocPageBlurbTemplateDocExists()&lt;br /&gt;
	local env = getEnv('Template:Documentation')&lt;br /&gt;
	local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from [[Template:Documentation/doc]]. &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&amp;amp;action=edit edit] &amp;amp;#124; [//en.wikipedia.org/w/index.php?title=Template:Documentation/doc&amp;amp;action=history history])&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;'&lt;br /&gt;
	self:assertEquals(expected, doc.makeDocPageBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDocPageBlurbTemplateDocDoesntExist()&lt;br /&gt;
	local env = getEnv('Template:Non-existent template ajlkfdsa')&lt;br /&gt;
	self:assertEquals(nil, doc.makeDocPageBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDocPageBlurbModuleDocExists()&lt;br /&gt;
	local env = getEnv('Module:Example')&lt;br /&gt;
	local expected = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from [[Module:Example/doc]]. &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Module:Example/doc&amp;amp;action=edit edit] &amp;amp;#124; [//en.wikipedia.org/w/index.php?title=Module:Example/doc&amp;amp;action=history history])&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;'&lt;br /&gt;
	self:assertEquals(expected, doc.makeDocPageBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDocPageBlurbModuleDocDoesntExist()&lt;br /&gt;
	local env = getEnv('Module:Non-existent module ajlkfdsa')&lt;br /&gt;
	local expected = 'You might want to [//en.wikipedia.org/w/index.php?title=Module:Non-existent_module_ajlkfdsa/doc&amp;amp;action=edit&amp;amp;preload=Template%3ADocumentation%2Fpreload-module-doc create] a documentation page for this [[Wikipedia:Lua|Scribunto module]].&amp;lt;br /&amp;gt;'&lt;br /&gt;
	self:assertEquals(expected, doc.makeDocPageBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeExperimentBlurb&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbTemplate()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	self:assertStringContains(&amp;quot;Editors can experiment in this template's .- and .- pages.&amp;quot;, doc.makeExperimentBlurb({}, env), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbModule()&lt;br /&gt;
	local env = getEnv('Module:Example')&lt;br /&gt;
	self:assertStringContains(&amp;quot;Editors can experiment in this module's .- and .- pages.&amp;quot;, doc.makeExperimentBlurb({}, env), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbSandboxExists()&lt;br /&gt;
	local env = getEnv('Template:Edit protected')&lt;br /&gt;
	local pattern = '[[Template:Edit protected/sandbox|sandbox]] &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/sandbox&amp;amp;action=edit edit] &amp;amp;#124; [//en.wikipedia.org/w/index.php?title=Special%3AComparePages&amp;amp;page1=Template%3AEdit+protected&amp;amp;page2=Template%3AEdit+protected%2Fsandbox diff])&amp;lt;/span&amp;gt;'&lt;br /&gt;
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbSandboxDoesntExist()&lt;br /&gt;
	local env = getEnv('Template:Non-existent template sajdfasd')&lt;br /&gt;
	local pattern = 'sandbox &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&amp;amp;action=edit&amp;amp;preload=Template%3ADocumentation%2Fpreload-sandbox create] &amp;amp;#124; [//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/sandbox&amp;amp;preload=Template%3ADocumentation%2Fmirror&amp;amp;action=edit&amp;amp;summary=Create+sandbox+version+of+%5B%5BTemplate%3ANon-existent+template+sajdfasd%5D%5D mirror])&amp;lt;/span&amp;gt;'&lt;br /&gt;
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbTestcasesExist()&lt;br /&gt;
	local env = getEnv('Template:Edit protected')&lt;br /&gt;
	local pattern = '[[Template:Edit protected/testcases|testcases]] &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Template:Edit_protected/testcases&amp;amp;action=edit edit])&amp;lt;/span&amp;gt;'&lt;br /&gt;
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testExperimentBlurbTestcasesDontExist()&lt;br /&gt;
	local env = getEnv('Template:Non-existent template sajdfasd')&lt;br /&gt;
	local pattern = 'testcases &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.wikipedia.org/w/index.php?title=Template:Non-existent_template_sajdfasd/testcases&amp;amp;action=edit&amp;amp;preload=Template%3ADocumentation%2Fpreload-testcases create])&amp;lt;/span&amp;gt;'&lt;br /&gt;
	self:assertStringContains(pattern, doc.makeExperimentBlurb({}, env), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeCategoriesBlurb&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeCategoriesBlurb()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	self:assertEquals('Add categories to the [[Template:Example/doc|/doc]] subpage.', doc.makeCategoriesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeSubpagesBlurb&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeSubpagesBlurbTemplate()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	self:assertEquals('[[Special:PrefixIndex/Template:Example/|Subpages of this template]].', doc.makeSubpagesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeSubpagesBlurbModule()&lt;br /&gt;
	local env = getEnv('Module:Example')&lt;br /&gt;
	self:assertEquals('[[Special:PrefixIndex/Module:Example/|Subpages of this module]].', doc.makeSubpagesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeSubpagesBlurbOther()&lt;br /&gt;
	local env = getEnv('File:Example.png')&lt;br /&gt;
	self:assertEquals('[[Special:PrefixIndex/File:Example.png/|Subpages of this page]].', doc.makeSubpagesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test addTrackingCategories&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite.getStrangeUsageCat()&lt;br /&gt;
	return '[[Category:Wikipedia pages with strange ((documentation)) usage]]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesTemplatePage()&lt;br /&gt;
	local env = getEnv('Template:Example')&lt;br /&gt;
	self:assertEquals('', doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesDocPage()&lt;br /&gt;
	local env = getEnv('Template:Example/doc')&lt;br /&gt;
	self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesTestcasesPage()&lt;br /&gt;
	local env = getEnv('Template:Example/testcases')&lt;br /&gt;
	self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesModuleDoc()&lt;br /&gt;
	local env = getEnv('Module:Math/doc')&lt;br /&gt;
	self:assertEquals(self.getStrangeUsageCat(), doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesModuleTestcases()&lt;br /&gt;
	local env = getEnv('Module:Math/testcases')&lt;br /&gt;
	self:assertEquals('', doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesInvalidTitle()&lt;br /&gt;
	local env = getEnv('Template:Foo[]Bar')&lt;br /&gt;
	self:assertEquals(nil, doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
-- Whitespace tests&lt;br /&gt;
--------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testNoTrailingWhitespace()&lt;br /&gt;
	self:assertStringContains('of this template%]%].&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;$', doc._main{page = 'Template:Example'})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>en&gt;Uzume</name></author>
	</entry>
</feed>