Difference between revisions of "Module:Redirect/testcases"
Jump to navigation
Jump to search
blackwiki>Jackmcbarn (add test cases for percent encoding) |
blackwiki>Jackmcbarn (actually test the right thing) |
||
| Line 155: | Line 155: | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
| − | function suite: | + | function suite:testContentAmpersandCanonicalisation() |
self:mockNewTitle{['Module talk:Redirect/sandbox'] = { | self:mockNewTitle{['Module talk:Redirect/sandbox'] = { | ||
content = '#REDIRECT [[Module talk:Redirect]]', | content = '#REDIRECT [[Module talk:Redirect]]', | ||
| Line 167: | Line 167: | ||
end | end | ||
| − | function suite: | + | function suite:testContentPercentCanonicalisation() |
| − | self: | + | self:mockNewTitle{['Module talk:Redirect/sandbox'] = { |
| + | content = '#REDIRECT [[Module talk%3ARedirect]]', | ||
| + | isRedirect = true, | ||
| + | }} | ||
self:assertEquals( | self:assertEquals( | ||
| − | + | 'Module talk:Redirect', | |
| − | mRedirect.main(self:makeFrameWithArgs{ | + | mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'}) |
) | ) | ||
self:resetTitleMock() | self:resetTitleMock() | ||
end | end | ||
| − | function suite: | + | function suite:testContentAmpersandInsidePercentCanonicalisation() |
| − | self: | + | self:mockNewTitle{['Module talk:Redirect/sandbox'] = { |
| + | content = '#REDIRECT [[Module talk%26#58;Redirect]]', | ||
| + | isRedirect = true, | ||
| + | }} | ||
self:assertEquals( | self:assertEquals( | ||
| − | + | 'Module talk:Redirect', | |
| − | mRedirect.main(self:makeFrameWithArgs{ | + | mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'}) |
) | ) | ||
self:resetTitleMock() | self:resetTitleMock() | ||
end | end | ||
| − | function suite: | + | function suite:testContentPercentInsideAmpersandCanonicalisation() |
| − | self: | + | 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( | self:assertEquals( | ||
| − | + | 'Module talk:Redirect/sandbox', | |
| − | mRedirect.main(self:makeFrameWithArgs{ | + | mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'}) |
) | ) | ||
self:resetTitleMock() | self:resetTitleMock() | ||
end | end | ||
| − | function suite: | + | function suite:testTitleCanonicalisation() |
self:mockMothersDayPage() | self:mockMothersDayPage() | ||
self:assertEquals( | self:assertEquals( | ||
"Mother's Day", | "Mother's Day", | ||
| − | mRedirect.main(self:makeFrameWithArgs{"Mother | + | mRedirect.main(self:makeFrameWithArgs{"Mother's Day"}) |
) | ) | ||
self:resetTitleMock() | self:resetTitleMock() | ||
end | end | ||
| − | function suite: | + | function suite:testTitleInitialCapitalCanonicalisation() |
self:mockMothersDayPage() | self:mockMothersDayPage() | ||
self:assertEquals( | self:assertEquals( | ||
| − | "", | + | "Mother's Day", |
| − | mRedirect.main(self:makeFrameWithArgs{" | + | mRedirect.main(self:makeFrameWithArgs{"mother's Day"}) |
) | ) | ||
self:resetTitleMock() | self:resetTitleMock() | ||
Revision as of 02:49, 26 September 2020
Documentation for this module may be created at Module:Redirect/testcases/doc
-- 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