Module:Redirect/testcases

-- 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 options[page] then if options[page].content then local content = options[page].content rawset(titleObj, 'getContent', function 						return content					end) options[page].content = nil end for k, v in pairs(options[page]) 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 = [=[
 * 1) REDIRECT Articles for creation

]=]	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(		'Articles for creation',		mRedirect.main(self:makeFrameWithArgs{'WP:AFC', bracket = 'yes'})	) self:resetTitleMock end

function suite:testMainWithInputAndOutputBrackets self:mockAFCShortcut self:assertEquals(		'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&', 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', 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&', 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&#39;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