From Wikipedia, the free encyclopedia

-- Unit tests for [[Module:Redirect]]. Click talk page to run tests.



local mRedirect = require('Module:Redirect') -- the module to be tested

local ScribuntoUnit = require('Module:ScribuntoUnit')

local suite = ScribuntoUnit:new()



--------------------------------------------------------------------------------

-- Helper functions

--------------------------------------------------------------------------------



function suite:makeFrameWithArgs(args)

	local frame = mw.getCurrentFrame()

	return frame:newChild{title = 'Frame', args = args}

end



--------------------------------------------------------------------------------

-- Mock mw.title.new

--------------------------------------------------------------------------------



do

	local oldNewTitle = mw.title.new



	function suite:mockNewTitle(options)

		mw.title.new = function (page)

			local titleObj = oldNewTitle(page)

			if optionspage then

				if optionspage].content then

					local content = optionspage].content

					rawset(titleObj, 'getContent', function ()

						return content

					end)

					optionspage].content = nil

				end

				for k, v in pairs(optionspage]) do

					rawset(titleObj, k, v)

				end

			end

			return titleObj

		end

	end

	

	function suite:resetTitleMock()

		mw.title.new = oldNewTitle

	end

end



-- Shortcut method for typical pages used in tests

function suite:mockAFCShortcut()

	local content = [=[

#REDIRECT [[Wikipedia:Articles for creation]]



{{R to Wikipedia namespace}}

{{R from shortcut}}

]=]

	local pageOptions = {

		content = content,

		isRedirect = true,

	}

	self:mockNewTitle{

		'WP:AFC' = pageOptions,

		'Wikipedia:AFC' = pageOptions,

	}

end



function suite:mockMothersDayPage()

	self:mockNewTitle{["Mother's Day" = {

		content = 'Lorem ipsum',

		isRedirect = false,

	}}

end



--------------------------------------------------------------------------------

-- Test Main

--------------------------------------------------------------------------------



function suite:testMain()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'WP:AFC'})

	)

	self:resetTitleMock()

end



function suite:testMainWithPadding()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'  WP:AFC  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithBlankArgument()

	self:mockAFCShortcut()

	self:assertEquals(

		'',

		mRedirect.main(self:makeFrameWithArgs{'  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'[[WP:AFC]]'})

	)

	self:resetTitleMock()

end



function suite:testMainWithOutputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'[[Wikipedia:Articles for creation]]',

		mRedirect.main(self:makeFrameWithArgs{'WP:AFC', bracket = 'yes'})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputAndOutputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'[[Wikipedia:Articles for creation]]',

		mRedirect.main(self:makeFrameWithArgs{'[[WP:AFC]]', bracket = 'yes'})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputBracketsAndPadding()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'  [[WP:AFC]]  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithRealInvalidRedirect()

	self:assertEquals(

		'User:John Vandenberg/testcases/Redirect/1',

		mRedirect.main(self:makeFrameWithArgs{'User:John Vandenberg/testcases/Redirect/1'})

	)

end



function suite:testMainWithRealValidRedirect()

	self:assertEquals(

		'Blah',

		mRedirect.main(self:makeFrameWithArgs{'User:John Vandenberg/testcases/Redirect/2'})

	)

end



--------------------------------------------------------------------------------

-- Test Canonicalisation

--------------------------------------------------------------------------------



function suite:testContentAmpersandCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk:Redirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentPercentCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%3ARedirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentAmpersandInsidePercentCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%26#58;Redirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentPercentInsideAmpersandCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%3ARedirect]]',

		isRedirect = true, -- not actually considered a redirect, but we want to exercise the code paths anyway

	}}

	self:assertEquals(

		'Module talk:Redirect/sandbox',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testTitleCanonicalisation()

	self:mockMothersDayPage()

	self:assertEquals(

		"Mother's Day",

		mRedirect.main(self:makeFrameWithArgs{"Mother's Day"})

	)

	self:resetTitleMock()

end



function suite:testTitleInitialCapitalCanonicalisation()

	self:mockMothersDayPage()

	self:assertEquals(

		"Mother's Day",

		mRedirect.main(self:makeFrameWithArgs{"mother's Day"})

	)

	self:resetTitleMock()

end



--------------------------------------------------------------------------------

-- Test isRedirect

--------------------------------------------------------------------------------



function suite:testIsRedirect()

	self:mockAFCShortcut()

	self:assertEquals(

		'yes',

		mRedirect.isRedirect(self:makeFrameWithArgs{'WP:AFC'})

	)

	self:resetTitleMock()

end



function suite:testIsRedirect()

	self:mockMothersDayPage()

	self:assertEquals(

		'',

		mRedirect.isRedirect(self:makeFrameWithArgs{"Mother's Day"})

	)

	self:resetTitleMock()

end



return suite
From Wikipedia, the free encyclopedia

-- Unit tests for [[Module:Redirect]]. Click talk page to run tests.



local mRedirect = require('Module:Redirect') -- the module to be tested

local ScribuntoUnit = require('Module:ScribuntoUnit')

local suite = ScribuntoUnit:new()



--------------------------------------------------------------------------------

-- Helper functions

--------------------------------------------------------------------------------



function suite:makeFrameWithArgs(args)

	local frame = mw.getCurrentFrame()

	return frame:newChild{title = 'Frame', args = args}

end



--------------------------------------------------------------------------------

-- Mock mw.title.new

--------------------------------------------------------------------------------



do

	local oldNewTitle = mw.title.new



	function suite:mockNewTitle(options)

		mw.title.new = function (page)

			local titleObj = oldNewTitle(page)

			if optionspage then

				if optionspage].content then

					local content = optionspage].content

					rawset(titleObj, 'getContent', function ()

						return content

					end)

					optionspage].content = nil

				end

				for k, v in pairs(optionspage]) do

					rawset(titleObj, k, v)

				end

			end

			return titleObj

		end

	end

	

	function suite:resetTitleMock()

		mw.title.new = oldNewTitle

	end

end



-- Shortcut method for typical pages used in tests

function suite:mockAFCShortcut()

	local content = [=[

#REDIRECT [[Wikipedia:Articles for creation]]



{{R to Wikipedia namespace}}

{{R from shortcut}}

]=]

	local pageOptions = {

		content = content,

		isRedirect = true,

	}

	self:mockNewTitle{

		'WP:AFC' = pageOptions,

		'Wikipedia:AFC' = pageOptions,

	}

end



function suite:mockMothersDayPage()

	self:mockNewTitle{["Mother's Day" = {

		content = 'Lorem ipsum',

		isRedirect = false,

	}}

end



--------------------------------------------------------------------------------

-- Test Main

--------------------------------------------------------------------------------



function suite:testMain()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'WP:AFC'})

	)

	self:resetTitleMock()

end



function suite:testMainWithPadding()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'  WP:AFC  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithBlankArgument()

	self:mockAFCShortcut()

	self:assertEquals(

		'',

		mRedirect.main(self:makeFrameWithArgs{'  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'[[WP:AFC]]'})

	)

	self:resetTitleMock()

end



function suite:testMainWithOutputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'[[Wikipedia:Articles for creation]]',

		mRedirect.main(self:makeFrameWithArgs{'WP:AFC', bracket = 'yes'})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputAndOutputBrackets()

	self:mockAFCShortcut()

	self:assertEquals(

		'[[Wikipedia:Articles for creation]]',

		mRedirect.main(self:makeFrameWithArgs{'[[WP:AFC]]', bracket = 'yes'})

	)

	self:resetTitleMock()

end



function suite:testMainWithInputBracketsAndPadding()

	self:mockAFCShortcut()

	self:assertEquals(

		'Wikipedia:Articles for creation',

		mRedirect.main(self:makeFrameWithArgs{'  [[WP:AFC]]  '})

	)

	self:resetTitleMock()

end



function suite:testMainWithRealInvalidRedirect()

	self:assertEquals(

		'User:John Vandenberg/testcases/Redirect/1',

		mRedirect.main(self:makeFrameWithArgs{'User:John Vandenberg/testcases/Redirect/1'})

	)

end



function suite:testMainWithRealValidRedirect()

	self:assertEquals(

		'Blah',

		mRedirect.main(self:makeFrameWithArgs{'User:John Vandenberg/testcases/Redirect/2'})

	)

end



--------------------------------------------------------------------------------

-- Test Canonicalisation

--------------------------------------------------------------------------------



function suite:testContentAmpersandCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk:Redirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentPercentCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%3ARedirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentAmpersandInsidePercentCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%26#58;Redirect]]',

		isRedirect = true,

	}}

	self:assertEquals(

		'Module talk:Redirect',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testContentPercentInsideAmpersandCanonicalisation()

	self:mockNewTitle{['Module talk:Redirect/sandbox' = {

		content = '#REDIRECT [[Module talk%3ARedirect]]',

		isRedirect = true, -- not actually considered a redirect, but we want to exercise the code paths anyway

	}}

	self:assertEquals(

		'Module talk:Redirect/sandbox',

		mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'})

	)

	self:resetTitleMock()

end



function suite:testTitleCanonicalisation()

	self:mockMothersDayPage()

	self:assertEquals(

		"Mother's Day",

		mRedirect.main(self:makeFrameWithArgs{"Mother's Day"})

	)

	self:resetTitleMock()

end



function suite:testTitleInitialCapitalCanonicalisation()

	self:mockMothersDayPage()

	self:assertEquals(

		"Mother's Day",

		mRedirect.main(self:makeFrameWithArgs{"mother's Day"})

	)

	self:resetTitleMock()

end



--------------------------------------------------------------------------------

-- Test isRedirect

--------------------------------------------------------------------------------



function suite:testIsRedirect()

	self:mockAFCShortcut()

	self:assertEquals(

		'yes',

		mRedirect.isRedirect(self:makeFrameWithArgs{'WP:AFC'})

	)

	self:resetTitleMock()

end



function suite:testIsRedirect()

	self:mockMothersDayPage()

	self:assertEquals(

		'',

		mRedirect.isRedirect(self:makeFrameWithArgs{"Mother's Day"})

	)

	self:resetTitleMock()

end



return suite

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook