<?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%3ARedirect%2Ftestcases</id>
	<title>Module:Redirect/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%3ARedirect%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Redirect/testcases&amp;action=history"/>
	<updated>2026-05-18T11:52:07Z</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:Redirect/testcases&amp;diff=7267&amp;oldid=prev</id>
		<title>imported&gt;Jackmcbarn: actually test the right thing</title>
		<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Redirect/testcases&amp;diff=7267&amp;oldid=prev"/>
		<updated>2020-09-26T02:49:03Z</updated>

		<summary type="html">&lt;p&gt;actually test the right thing&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Unit tests for [[Module:Redirect]]. Click talk page to run tests.&lt;br /&gt;
&lt;br /&gt;
local mRedirect = require(&amp;#039;Module:Redirect&amp;#039;) -- the module to be tested&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;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:makeFrameWithArgs(args)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	return frame:newChild{title = &amp;#039;Frame&amp;#039;, args = args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Mock mw.title.new&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
do&lt;br /&gt;
	local oldNewTitle = mw.title.new&lt;br /&gt;
&lt;br /&gt;
	function suite:mockNewTitle(options)&lt;br /&gt;
		mw.title.new = function (page)&lt;br /&gt;
			local titleObj = oldNewTitle(page)&lt;br /&gt;
			if options[page] then&lt;br /&gt;
				if options[page].content then&lt;br /&gt;
					local content = options[page].content&lt;br /&gt;
					rawset(titleObj, &amp;#039;getContent&amp;#039;, function ()&lt;br /&gt;
						return content&lt;br /&gt;
					end)&lt;br /&gt;
					options[page].content = nil&lt;br /&gt;
				end&lt;br /&gt;
				for k, v in pairs(options[page]) do&lt;br /&gt;
					rawset(titleObj, k, v)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return titleObj&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function suite:resetTitleMock()&lt;br /&gt;
		mw.title.new = oldNewTitle&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Shortcut method for typical pages used in tests&lt;br /&gt;
function suite:mockAFCShortcut()&lt;br /&gt;
	local content = [=[&lt;br /&gt;
#REDIRECT [[Stiles.casa Wiki:Articles for creation]]&lt;br /&gt;
&lt;br /&gt;
{{R to Stiles.casa Wiki namespace}}&lt;br /&gt;
{{R from shortcut}}&lt;br /&gt;
]=]&lt;br /&gt;
	local pageOptions = {&lt;br /&gt;
		content = content,&lt;br /&gt;
		isRedirect = true,&lt;br /&gt;
	}&lt;br /&gt;
	self:mockNewTitle{&lt;br /&gt;
		[&amp;#039;SW:AFC&amp;#039;] = pageOptions,&lt;br /&gt;
		[&amp;#039;Stiles.casa Wiki:AFC&amp;#039;] = pageOptions,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:mockMothersDayPage()&lt;br /&gt;
	self:mockNewTitle{[&amp;quot;Mother&amp;#039;s Day&amp;quot;] = {&lt;br /&gt;
		content = &amp;#039;Lorem ipsum&amp;#039;,&lt;br /&gt;
		isRedirect = false,&lt;br /&gt;
	}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test Main&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testMain()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Stiles.casa Wiki:Articles for creation&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;SW:AFC&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithPadding()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Stiles.casa Wiki:Articles for creation&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;  SW:AFC  &amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithBlankArgument()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;  &amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithInputBrackets()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Stiles.casa Wiki:Articles for creation&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;[[SW:AFC]]&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithOutputBrackets()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;[[Stiles.casa Wiki:Articles for creation]]&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;SW:AFC&amp;#039;, bracket = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithInputAndOutputBrackets()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;[[Stiles.casa Wiki:Articles for creation]]&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;[[SW:AFC]]&amp;#039;, bracket = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithInputBracketsAndPadding()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Stiles.casa Wiki:Articles for creation&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;  [[SW:AFC]]  &amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithRealInvalidRedirect()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;User:John Vandenberg/testcases/Redirect/1&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;User:John Vandenberg/testcases/Redirect/1&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testMainWithRealValidRedirect()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Blah&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;User:John Vandenberg/testcases/Redirect/2&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test Canonicalisation&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testContentAmpersandCanonicalisation()&lt;br /&gt;
	self:mockNewTitle{[&amp;#039;Module talk:Redirect/sandbox&amp;#039;] = {&lt;br /&gt;
		content = &amp;#039;#REDIRECT [[Module talk&amp;amp;#58;Redirect]]&amp;#039;,&lt;br /&gt;
		isRedirect = true,&lt;br /&gt;
	}}&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Module talk:Redirect&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;Module talk:Redirect/sandbox&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentPercentCanonicalisation()&lt;br /&gt;
	self:mockNewTitle{[&amp;#039;Module talk:Redirect/sandbox&amp;#039;] = {&lt;br /&gt;
		content = &amp;#039;#REDIRECT [[Module talk%3ARedirect]]&amp;#039;,&lt;br /&gt;
		isRedirect = true,&lt;br /&gt;
	}}&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Module talk:Redirect&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;Module talk:Redirect/sandbox&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentAmpersandInsidePercentCanonicalisation()&lt;br /&gt;
	self:mockNewTitle{[&amp;#039;Module talk:Redirect/sandbox&amp;#039;] = {&lt;br /&gt;
		content = &amp;#039;#REDIRECT [[Module talk%26#58;Redirect]]&amp;#039;,&lt;br /&gt;
		isRedirect = true,&lt;br /&gt;
	}}&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Module talk:Redirect&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;Module talk:Redirect/sandbox&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testContentPercentInsideAmpersandCanonicalisation()&lt;br /&gt;
	self:mockNewTitle{[&amp;#039;Module talk:Redirect/sandbox&amp;#039;] = {&lt;br /&gt;
		content = &amp;#039;#REDIRECT [[Module talk&amp;amp;#37;3ARedirect]]&amp;#039;,&lt;br /&gt;
		isRedirect = true, -- not actually considered a redirect, but we want to exercise the code paths anyway&lt;br /&gt;
	}}&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;Module talk:Redirect/sandbox&amp;#039;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;#039;Module talk:Redirect/sandbox&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTitleCanonicalisation()&lt;br /&gt;
	self:mockMothersDayPage()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;quot;Mother&amp;#039;s Day&amp;quot;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;quot;Mother&amp;amp;#39;s Day&amp;quot;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTitleInitialCapitalCanonicalisation()&lt;br /&gt;
	self:mockMothersDayPage()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;quot;Mother&amp;#039;s Day&amp;quot;,&lt;br /&gt;
		mRedirect.main(self:makeFrameWithArgs{&amp;quot;mother&amp;#039;s Day&amp;quot;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test isRedirect&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testIsRedirect()&lt;br /&gt;
	self:mockAFCShortcut()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;yes&amp;#039;,&lt;br /&gt;
		mRedirect.isRedirect(self:makeFrameWithArgs{&amp;#039;SW:AFC&amp;#039;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testIsRedirect()&lt;br /&gt;
	self:mockMothersDayPage()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;&amp;#039;,&lt;br /&gt;
		mRedirect.isRedirect(self:makeFrameWithArgs{&amp;quot;Mother&amp;#039;s Day&amp;quot;})&lt;br /&gt;
	)&lt;br /&gt;
	self:resetTitleMock()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>imported&gt;Jackmcbarn</name></author>
	</entry>
</feed>