<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.stiles.casa/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://wiki.stiles.casa/index.php?action=history&amp;feed=atom&amp;title=Module%3ADocumentation%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Documentation/testcases&amp;action=history"/>
	<updated>2026-04-04T19:08:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.stiles.casa/index.php?title=Module:Documentation/testcases&amp;diff=7330&amp;oldid=prev</id>
		<title>imported&gt;Andrybak: update testRenderStartBoxLinksDoesntExist() after Special:Diff/1049491596</title>
		<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Documentation/testcases&amp;diff=7330&amp;oldid=prev"/>
		<updated>2021-10-12T12:22:24Z</updated>

		<summary type="html">&lt;p&gt;update testRenderStartBoxLinksDoesntExist() after &lt;a href=&quot;/view/Special:Diff/1049491596&quot; title=&quot;Special:Diff/1049491596&quot;&gt;Special:Diff/1049491596&lt;/a&gt;&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(&amp;#039;Module:Documentation/sandbox&amp;#039;)&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&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(&amp;#039;sandbox&amp;#039;, doc.message(&amp;#039;sandbox-subpage&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;Subpages of this foobar&amp;#039;, doc.message(&amp;#039;subpages-link-display&amp;#039;, {&amp;#039;foobar&amp;#039;}))&lt;br /&gt;
	self:assertEquals(true, doc.message(&amp;#039;display-strange-usage-category&amp;#039;, nil, &amp;#039;boolean&amp;#039;))&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;#039;&amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;(Foo)&amp;lt;/span&amp;gt;&amp;#039;, doc.makeToolbar(&amp;#039;Foo&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;(Foo &amp;amp;#124; Bar)&amp;lt;/span&amp;gt;&amp;#039;, doc.makeToolbar(&amp;#039;Foo&amp;#039;, &amp;#039;Bar&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeWikilink()&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Foo]]&amp;#039;, doc.makeWikilink(&amp;#039;Foo&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Foo|Bar]]&amp;#039;, doc.makeWikilink(&amp;#039;Foo&amp;#039;, &amp;#039;Bar&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeCategoryLink()&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Category:Foo]]&amp;#039;, doc.makeCategoryLink(&amp;#039;Foo&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Category:Foo|Bar]]&amp;#039;, doc.makeCategoryLink(&amp;#039;Foo&amp;#039;, &amp;#039;Bar&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeUrlLink()&lt;br /&gt;
	self:assertEquals(&amp;#039;[Foo Bar]&amp;#039;, doc.makeUrlLink(&amp;#039;Foo&amp;#039;, &amp;#039;Bar&amp;#039;))&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(&amp;#039;Stiles.casa Wiki:Sandbox&amp;#039;, &amp;#039;Stiles.casa Wiki:Sandbox&amp;#039;, &amp;#039;title&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;title&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvBadTitle()&lt;br /&gt;
	local env = doc.getEnvironment{page = &amp;#039;Bad[]Title&amp;#039;}&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(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template:Example&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template talk:Example&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template talk:Example/sandbox&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template:Example/testcases&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/foo&amp;#039;, &amp;#039;Template:Example/foo&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File:Example&amp;#039;, &amp;#039;File talk:Example&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File:Example&amp;#039;, &amp;#039;File talk:Example/sandbox&amp;#039;, &amp;#039;templateTitle&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocTitle()&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/doc&amp;#039;, &amp;#039;Template:Example&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/doc&amp;#039;, &amp;#039;Template talk:Example&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/doc&amp;#039;, &amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Talk:Example/doc&amp;#039;, &amp;#039;Example&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File talk:Example.png/doc&amp;#039;, &amp;#039;File:Example.png&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File talk:Example.png/doc&amp;#039;, &amp;#039;File talk:Example.png/sandbox&amp;#039;, &amp;#039;docTitle&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvSandboxTitle()&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;Template:Example&amp;#039;, &amp;#039;sandboxTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;Template talk:Example&amp;#039;, &amp;#039;sandboxTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;sandboxTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Talk:Example/sandbox&amp;#039;, &amp;#039;Example&amp;#039;, &amp;#039;sandboxTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File talk:Example.png/sandbox&amp;#039;, &amp;#039;File:Example.png&amp;#039;, &amp;#039;sandboxTitle&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvTestcasesTitle()&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/testcases&amp;#039;, &amp;#039;Template:Example&amp;#039;, &amp;#039;testcasesTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/testcases&amp;#039;, &amp;#039;Template talk:Example&amp;#039;, &amp;#039;testcasesTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Template:Example/testcases&amp;#039;, &amp;#039;Template:Example/testcases&amp;#039;, &amp;#039;testcasesTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;Talk:Example/testcases&amp;#039;, &amp;#039;Example&amp;#039;, &amp;#039;testcasesTitle&amp;#039;)&lt;br /&gt;
	self:assertEnvTitleEquals(&amp;#039;File talk:Example.png/testcases&amp;#039;, &amp;#039;File:Example.png&amp;#039;, &amp;#039;testcasesTitle&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvProtectionLevels()&lt;br /&gt;
	local pipeEnv = getEnv(&amp;#039;Template:?&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;autoconfirmed&amp;#039;, pipeEnv.protectionLevels.edit[1])&lt;br /&gt;
	local sandboxEnv = getEnv(&amp;#039;Stiles.casa Wiki:Sandbox&amp;#039;)&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, &amp;#039;Template:Sandbox&amp;#039;, &amp;#039;subjectSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(10, &amp;#039;Template talk:Sandbox&amp;#039;, &amp;#039;subjectSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(0, &amp;#039;Foo&amp;#039;, &amp;#039;subjectSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(0, &amp;#039;Talk:Foo&amp;#039;, &amp;#039;subjectSpace&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocSpace()&lt;br /&gt;
	self:assertEnvFieldEquals(10, &amp;#039;Template:Sandbox&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(828, &amp;#039;Module:Sandbox&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(1, &amp;#039;Foo&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(7, &amp;#039;File:Example.png&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(9, &amp;#039;MediaWiki:Watchlist-details&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(15, &amp;#039;Category:Stiles.casa Wikins&amp;#039;, &amp;#039;docSpace&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEnvDocpageBase()&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template:Example&amp;#039;, &amp;#039;docpageBase&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template:Example/sandbox&amp;#039;, &amp;#039;docpageBase&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;Template:Example&amp;#039;, &amp;#039;Template talk:Example&amp;#039;, &amp;#039;docpageBase&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;File talk:Example.png&amp;#039;, &amp;#039;File:Example.png&amp;#039;, &amp;#039;docpageBase&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;File talk:Example.png&amp;#039;, &amp;#039;File talk:Example.png&amp;#039;, &amp;#039;docpageBase&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(&amp;#039;File talk:Example.png&amp;#039;, &amp;#039;File talk:Example.png/sandbox&amp;#039;, &amp;#039;docpageBase&amp;#039;)&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 = &amp;#039;//en.stiles.casa_wiki.org/w/index.php?title=Special%3AComparePages&amp;amp;page1=Template%3AEdit+protected&amp;amp;page2=Template%3AEdit+protected%2Fsandbox&amp;#039;&lt;br /&gt;
	self:assertEnvFieldEquals(expected, &amp;#039;Template:Edit protected&amp;#039;, &amp;#039;compareUrl&amp;#039;) &lt;br /&gt;
	self:assertEnvFieldEquals(expected, &amp;#039;Template:Edit protected/sandbox&amp;#039;, &amp;#039;compareUrl&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(nil, &amp;#039;Template:Non-existent template adsfasdg&amp;#039;, &amp;#039;compareUrl&amp;#039;)&lt;br /&gt;
	self:assertEnvFieldEquals(nil, &amp;#039;Template:Fact&amp;#039;, &amp;#039;compareUrl&amp;#039;) -- Exists but doesn&amp;#039;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(&amp;#039;^(.*)/sandbox$&amp;#039;)&lt;br /&gt;
	local image = &amp;#039;[[File:Sandbox.svg|50px|alt=|link=]]&amp;#039;&lt;br /&gt;
	local templateBlurb = &amp;#039;This is the [[Stiles.casa Wiki:Template test cases|template sandbox]] page for [[&amp;#039; .. templatePage .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	local moduleBlurb = &amp;#039;This is the [[Stiles.casa Wiki:Template test cases|module sandbox]] page for [[&amp;#039; .. templatePage .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	local otherBlurb = &amp;#039;This is the sandbox page for [[&amp;#039; .. templatePage .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	local diff = &amp;#039;[//en.stiles.casa_wiki.org/w/index.php?title=Special%3AComparePages&amp;amp;page1=&amp;#039; .. mw.uri.encode(templatePage) .. &amp;#039;&amp;amp;page2=&amp;#039; .. mw.uri.encode(page) .. &amp;#039; diff]&amp;#039;&lt;br /&gt;
	local testcasesBlurb = &amp;#039;See also the companion subpage for [[&amp;#039; .. templatePage .. &amp;#039;/testcases|test cases]].&amp;#039;&lt;br /&gt;
	local category = &amp;#039;[[Category:Template sandboxes]]&amp;#039;&lt;br /&gt;
	local clear = &amp;#039;&amp;lt;div class=&amp;quot;documentation-clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&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(&amp;#039;Template:Example&amp;#039;)&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(&amp;#039;Template:Example/sandbox&amp;#039;)&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
&lt;br /&gt;
    -- Escape metacharacters (mainly &amp;#039;-&amp;#039;)&lt;br /&gt;
    clear = clear:gsub( &amp;#039;%p&amp;#039;, &amp;#039;%%%0&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	self:assertStringContains(&amp;#039;^&amp;#039; .. 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(&amp;#039;Template:Example/sandbox&amp;#039;)&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(&amp;#039;Module:Math/sandbox&amp;#039;)&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(&amp;#039;User:Mr. Stradivarius/sandbox&amp;#039;)&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(&amp;#039;Template:Example/sandbox&amp;#039;)&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	if mw.title.getCurrentTitle().isTalk then&lt;br /&gt;
		-- This test doesn&amp;#039;t work in the debug console due to the use of frame:preprocess({{REVISIONID}}).&lt;br /&gt;
		-- The frame test doesn&amp;#039;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(&amp;#039;Module:User:Mr. Stradivarius/sandbox&amp;#039;)&lt;br /&gt;
	local notice = doc.sandboxNotice({}, env)&lt;br /&gt;
	if mw.title.getCurrentTitle().isTalk then&lt;br /&gt;
		-- This test doesn&amp;#039;t work in the debug console due to the use of frame:preprocess({{REVISIONID}}).&lt;br /&gt;
		-- The frame test doesn&amp;#039;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(&amp;#039;Template:Edit protected/sandbox&amp;#039;)&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(&amp;#039;Template:Example/sandbox&amp;#039;)&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&amp;#039;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(&amp;#039;Template:Example&amp;#039;)&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(&amp;#039;Template:Navbox&amp;#039;)&lt;br /&gt;
	-- Test whether there is some content. We don&amp;#039;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(&amp;#039;Module:Example&amp;#039;)&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(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
	-- Test whether there is some content. We don&amp;#039;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;#039;&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;&amp;#039;&lt;br /&gt;
	local startBox = doc._startBox({content = &amp;#039;some documentation&amp;#039;}, getEnv(&amp;#039;Template:Example&amp;#039;))&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;#039;&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;&amp;#039;,&lt;br /&gt;
		doc._startBox({}, getEnv(&amp;#039;Template:Example&amp;#039;))&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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals(&amp;#039;Template:Example&amp;#039;, data.title.prefixedText)&lt;br /&gt;
	self:assertEquals(&amp;#039;Template:Example/doc&amp;#039;, data.docTitle.prefixedText)&lt;br /&gt;
	self:assertEquals(&amp;#039;view&amp;#039;, data.viewLinkDisplay)&lt;br /&gt;
	self:assertEquals(&amp;#039;edit&amp;#039;, data.editLinkDisplay)&lt;br /&gt;
	self:assertEquals(&amp;#039;history&amp;#039;, data.historyLinkDisplay)&lt;br /&gt;
	self:assertEquals(&amp;#039;purge&amp;#039;, data.purgeLinkDisplay)&lt;br /&gt;
	self:assertEquals(&amp;#039;create&amp;#039;, data.createLinkDisplay)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataFilePreload()&lt;br /&gt;
	local env = getEnv(&amp;#039;File:Example.png&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals(&amp;#039;Template:Documentation/preload-filespace&amp;#039;, data.preload)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataTemplatePreload()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({}, env)&lt;br /&gt;
	self:assertEquals(&amp;#039;Template:Documentation/preload&amp;#039;, data.preload)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeStartBoxLinksDataArgsPreload()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxLinksData({preload = &amp;#039;My custom preload&amp;#039;}, env)&lt;br /&gt;
	self:assertEquals(&amp;#039;My custom preload&amp;#039;, 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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
		data.docTitle = mw.title.new(&amp;#039;Template:Example/doc&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		data.title = mw.title.new(&amp;#039;Template:NonExistentTemplate&amp;#039;)&lt;br /&gt;
		data.docTitle = mw.title.new(&amp;#039;Template:NonExistentTemplate/doc&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	data.viewLinkDisplay = &amp;#039;view&amp;#039;&lt;br /&gt;
	data.editLinkDisplay = &amp;#039;edit&amp;#039;&lt;br /&gt;
	data.historyLinkDisplay = &amp;#039;history&amp;#039;&lt;br /&gt;
	data.purgeLinkDisplay = &amp;#039;purge&amp;#039;&lt;br /&gt;
	data.createLinkDisplay = &amp;#039;create&amp;#039;&lt;br /&gt;
	data.preload = &amp;#039;Template:MyPreload&amp;#039;&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;#039;&amp;amp;#91;[[Template:Example/doc|view]]&amp;amp;#93; &amp;amp;#91;[//en.stiles.casa_wiki.org/w/index.php?title=Template:Example/doc&amp;amp;action=edit edit]&amp;amp;#93; &amp;amp;#91;[//en.stiles.casa_wiki.org/w/index.php?title=Template:Example/doc&amp;amp;action=history history]&amp;amp;#93; &amp;amp;#91;[//en.stiles.casa_wiki.org/w/index.php?title=Template:Example&amp;amp;action=purge purge]&amp;amp;#93;&amp;#039;&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;#039;&amp;amp;#91;[//en.stiles.casa_wiki.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.stiles.casa_wiki.org/w/index.php?title=Template:NonExistentTemplate&amp;amp;action=purge purge]&amp;amp;#93;&amp;#039;&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 = &amp;#039;&amp;#039;}, {})&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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = &amp;#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Template documentation&amp;#039;&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(&amp;#039;Module:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = &amp;#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]] Module documentation&amp;#039;&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(&amp;#039;File:Example.png&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = &amp;#039;Summary&amp;#039;&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(&amp;#039;User:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env)&lt;br /&gt;
	local expected = &amp;#039;Documentation&amp;#039;&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({[&amp;#039;heading-style&amp;#039;] = &amp;#039;foo:bar&amp;#039;}, {})&lt;br /&gt;
	self:assertEquals(&amp;#039;foo:bar&amp;#039;, data.headingStyleText)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataHeadingStyleTemplate()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&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(&amp;#039;User:Example&amp;#039;)&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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local data = doc.makeStartBoxData({}, env, &amp;#039;some links&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;some links&amp;#039;, data.links)&lt;br /&gt;
	self:assertEquals(&amp;#039;mw-editsection-like plainlinks&amp;#039;, data.linksClass)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testStartBoxDataNoLinks()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&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;#039;&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;&amp;#039;&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(&amp;#039;\n&amp;lt;span style=&amp;quot;foo:bar&amp;quot;&amp;gt;&amp;#039;, doc.renderStartBox{headingStyleText = &amp;#039;foo:bar&amp;#039;}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxHeading()&lt;br /&gt;
	self:assertStringContains(&amp;#039;\n&amp;lt;span&amp;gt;Foobar&amp;lt;/span&amp;gt;&amp;#039;, doc.renderStartBox{heading = &amp;#039;Foobar&amp;#039;}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinks()&lt;br /&gt;
	self:assertStringContains(&amp;#039;&amp;lt;span&amp;gt;list of links&amp;lt;/span&amp;gt;&amp;#039;, doc.renderStartBox{links = &amp;#039;list of links&amp;#039;}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksClass()&lt;br /&gt;
	self:assertStringContains(&amp;#039;&amp;lt;span class=&amp;quot;linksclass&amp;quot;&amp;gt;list of links&amp;lt;/span&amp;gt;&amp;#039;, doc.renderStartBox{linksClass = &amp;#039;linksclass&amp;#039;, links = &amp;#039;list of links&amp;#039;}, true)&lt;br /&gt;
	self:assertNotStringContains(&amp;#039;linksclass&amp;#039;, doc.renderStartBox{linksClass = &amp;#039;linksclass&amp;#039;}, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartBoxLinksId()&lt;br /&gt;
	self:assertStringContains(&amp;#039;&amp;lt;span id=&amp;quot;linksid&amp;quot;&amp;gt;list of links&amp;lt;/span&amp;gt;&amp;#039;, doc.renderStartBox{linksId = &amp;#039;linksid&amp;#039;, links = &amp;#039;list of links&amp;#039;}, true)&lt;br /&gt;
	self:assertNotStringContains(&amp;#039;linksid&amp;#039;, doc.renderStartBox{linksId = &amp;#039;linksid&amp;#039;}, 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(&amp;#039;\nsome documentation\n&amp;#039;, doc._content({content = &amp;#039;some documentation&amp;#039;}, {}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentNoContent()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:This is a non-existent template agauchvaiu&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;\n\n&amp;#039;, doc._content({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentExists()&lt;br /&gt;
	local env = doc.getEnvironment{&amp;#039;Template:Documentation/testcases/test3&amp;#039;}&lt;br /&gt;
	local docs = mw.getCurrentFrame():preprocess(&amp;#039;{{Template:Documentation/testcases/test3}}&amp;#039;)&lt;br /&gt;
	local expected = &amp;#039;\n&amp;#039; .. docs .. &amp;#039;\n&amp;#039;&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({[&amp;#039;link box&amp;#039;] = &amp;#039;off&amp;#039;}, 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(&amp;#039;Template:Non-existent template asdfalsdhaw&amp;#039;)))&lt;br /&gt;
	self:assertTrue(doc._endBox({}, getEnv(&amp;#039;Module:Non-existent module asdhewbydcyg&amp;#039;)))&lt;br /&gt;
	self:assertTrue(doc._endBox({}, getEnv(&amp;#039;User:Non-existent user ahfliwebalisyday&amp;#039;)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxStyles()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	local endBox = doc._endBox({}, env)&lt;br /&gt;
	self:assertStringContains(&amp;#039;class=&amp;quot;documentation-metadata plainlinks&amp;quot;&amp;#039;, 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(&amp;#039;Custom link box&amp;#039;, doc._endBox({[&amp;#039;link box&amp;#039;] = &amp;#039;Custom link box&amp;#039;}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxExperimentBlurbValidNs()&lt;br /&gt;
	local expected = &amp;#039;Editors can experiment in this.-&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Template:Example&amp;#039;)))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Module:Example&amp;#039;)))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;User:Example&amp;#039;)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxExperimentBlurbInvalidNs()&lt;br /&gt;
	local expected = &amp;#039;Editors can experiment in this.-&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Stiles.casa Wiki:Twinkle&amp;#039;))) -- Stiles.casa Wiki:Twinkle has an existing /doc subpage&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testEndBoxCategoriesBlurb()&lt;br /&gt;
	local expected = &amp;#039;Add categories to the %[%[.-|/doc%]%] subpage%.&amp;#039;&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Template:Example&amp;#039;)))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Module:Example&amp;#039;)))&lt;br /&gt;
	self:assertStringContains(expected, doc._endBox({}, getEnv(&amp;#039;User:Example&amp;#039;)))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({[1] = &amp;#039;Foo&amp;#039;}, getEnv(&amp;#039;Template:Example&amp;#039;)))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({content = &amp;#039;Bar&amp;#039;}, getEnv(&amp;#039;Template:Example&amp;#039;)))&lt;br /&gt;
	self:assertNotStringContains(expected, doc._endBox({}, getEnv(&amp;#039;Stiles.casa Wiki:Twinkle&amp;#039;)))&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(&amp;#039;Template:Documentation&amp;#039;)&lt;br /&gt;
	local expected = &amp;#039;The above [[Stiles.casa Wiki:Template documentation|documentation]] is [[Stiles.casa Wiki:Transclusion|transcluded]] from [[Template:Documentation/doc]]. &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.org/w/index.php?title=Template:Documentation/doc&amp;amp;action=edit edit] &amp;amp;#124; [//en.stiles.casa_wiki.org/w/index.php?title=Template:Documentation/doc&amp;amp;action=history history])&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;&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(&amp;#039;Template:Non-existent template ajlkfdsa&amp;#039;)&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(&amp;#039;Module:Example&amp;#039;)&lt;br /&gt;
	local expected = &amp;#039;The above [[Stiles.casa Wiki:Template documentation|documentation]] is [[Stiles.casa Wiki:Transclusion|transcluded]] from [[Module:Example/doc]]. &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.org/w/index.php?title=Module:Example/doc&amp;amp;action=edit edit] &amp;amp;#124; [//en.stiles.casa_wiki.org/w/index.php?title=Module:Example/doc&amp;amp;action=history history])&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;&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(&amp;#039;Module:Non-existent module ajlkfdsa&amp;#039;)&lt;br /&gt;
	local expected = &amp;#039;You might want to [//en.stiles.casa_wiki.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 [[Stiles.casa Wiki:Lua|Scribunto module]].&amp;lt;br /&amp;gt;&amp;#039;&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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	self:assertStringContains(&amp;quot;Editors can experiment in this template&amp;#039;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(&amp;#039;Module:Example&amp;#039;)&lt;br /&gt;
	self:assertStringContains(&amp;quot;Editors can experiment in this module&amp;#039;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(&amp;#039;Template:Edit protected&amp;#039;)&lt;br /&gt;
	local pattern = &amp;#039;[[Template:Edit protected/sandbox|sandbox]] &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.org/w/index.php?title=Template:Edit_protected/sandbox&amp;amp;action=edit edit] &amp;amp;#124; [//en.stiles.casa_wiki.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;&amp;#039;&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(&amp;#039;Template:Non-existent template sajdfasd&amp;#039;)&lt;br /&gt;
	local pattern = &amp;#039;sandbox &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.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.stiles.casa_wiki.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;&amp;#039;&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(&amp;#039;Template:Edit protected&amp;#039;)&lt;br /&gt;
	local pattern = &amp;#039;[[Template:Edit protected/testcases|testcases]] &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.org/w/index.php?title=Template:Edit_protected/testcases&amp;amp;action=edit edit])&amp;lt;/span&amp;gt;&amp;#039;&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(&amp;#039;Template:Non-existent template sajdfasd&amp;#039;)&lt;br /&gt;
	local pattern = &amp;#039;testcases &amp;lt;span class=&amp;quot;documentation-toolbar&amp;quot;&amp;gt;([//en.stiles.casa_wiki.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;&amp;#039;&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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;Add categories to the [[Template:Example/doc|/doc]] subpage.&amp;#039;, 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(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Special:PrefixIndex/Template:Example/|Subpages of this template]].&amp;#039;, doc.makeSubpagesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeSubpagesBlurbModule()&lt;br /&gt;
	local env = getEnv(&amp;#039;Module:Example&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Special:PrefixIndex/Module:Example/|Subpages of this module]].&amp;#039;, doc.makeSubpagesBlurb({}, env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMakeSubpagesBlurbOther()&lt;br /&gt;
	local env = getEnv(&amp;#039;File:Example.png&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;[[Special:PrefixIndex/File:Example.png/|Subpages of this page]].&amp;#039;, 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 &amp;#039;[[Category:Stiles.casa Wiki pages with strange ((documentation)) usage]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesTemplatePage()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesDocPage()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Example/doc&amp;#039;)&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(&amp;#039;Template:Example/testcases&amp;#039;)&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(&amp;#039;Module:Math/doc&amp;#039;)&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(&amp;#039;Module:Math/testcases&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, doc.addTrackingCategories(env))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testAddTrackingCategoriesInvalidTitle()&lt;br /&gt;
	local env = getEnv(&amp;#039;Template:Foo[]Bar&amp;#039;)&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(&amp;#039;of this template%]%].&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;$&amp;#039;, doc._main{page = &amp;#039;Template:Example&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>imported&gt;Andrybak</name></author>
	</entry>
</feed>