Module:Redirect/testcases: Difference between revisions
Appearance
Content deleted Content added
Jackmcbarn (talk | contribs) add test cases for percent encoding |
Jackmcbarn (talk | contribs) 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:mockNewTitle{['Module talk:Redirect/sandbox'] = { |
|||
self:mockMothersDayPage() |
|||
content = '#REDIRECT [[Module talk%3ARedirect]]', |
|||
isRedirect = true, |
|||
}} |
|||
self:assertEquals( |
self:assertEquals( |
||
'Module talk:Redirect', |
|||
"Mother's Day", |
|||
mRedirect.main(self:makeFrameWithArgs{ |
mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'}) |
||
) |
) |
||
self:resetTitleMock() |
self:resetTitleMock() |
||
end |
end |
||
function suite: |
function suite:testContentAmpersandInsidePercentCanonicalisation() |
||
self:mockNewTitle{['Module talk:Redirect/sandbox'] = { |
|||
self:mockMothersDayPage() |
|||
content = '#REDIRECT [[Module talk%26#58;Redirect]]', |
|||
isRedirect = true, |
|||
}} |
|||
self:assertEquals( |
self:assertEquals( |
||
'Module talk:Redirect', |
|||
"Mother's Day", |
|||
mRedirect.main(self:makeFrameWithArgs{ |
mRedirect.main(self:makeFrameWithArgs{'Module talk:Redirect/sandbox'}) |
||
) |
) |
||
self:resetTitleMock() |
self:resetTitleMock() |
||
end |
end |
||
function suite: |
function suite:testContentPercentInsideAmpersandCanonicalisation() |
||
self:mockNewTitle{['Module talk:Redirect/sandbox'] = { |
|||
self:mockMothersDayPage() |
|||
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', |
|||
"Mother's Day", |
|||
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() |
Latest revision as of 02:49, 26 September 2020
![]() | This is the test cases page for the module Module:Redirect. Results of the test cases. |
-- 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