Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Redirect/testcases
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- 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 = [=[ #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
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Redirect/testcases/doc
(
edit
)