Difference between revisions of "Module:Redirect hatnote/testcases"
Jump to navigation
Jump to search
test>Mr. Stradivarius (start updating these) |
test>Mr. Stradivarius (progress save) |
||
| Line 1: | Line 1: | ||
| − | local mRedirectHatnote = require('Module:Redirect hatnote') | + | local mRedirectHatnote = require('Module:Redirect hatnote/sandbox') |
local _redirect = mRedirectHatnote._redirect | local _redirect = mRedirectHatnote._redirect | ||
| − | |||
local ScribuntoUnit = require('Module:ScribuntoUnit') | local ScribuntoUnit = require('Module:ScribuntoUnit') | ||
local suite = ScribuntoUnit:new() | local suite = ScribuntoUnit:new() | ||
| Line 249: | Line 248: | ||
-- Test tracking category | -- Test tracking category | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
| + | |||
| + | function suite.makeFakeTitleObject(page, vals) | ||
| + | local title | ||
| + | if page then | ||
| + | title = mw.title.new(page) | ||
| + | else | ||
| + | title = mw.title.getCurrentTitle() | ||
| + | end | ||
| + | for k, v in pairs(vals) do | ||
| + | rawset(title, k, v) | ||
| + | end | ||
| + | return title | ||
| + | end | ||
local d = {} | local d = {} | ||
| Line 255: | Line 267: | ||
d.missingCat = 'Missing redirects' | d.missingCat = 'Missing redirects' | ||
d.invalidCat = 'Invalid redirects' | d.invalidCat = 'Invalid redirects' | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
function suite:assertContainsTrackingCategory(category, result) | function suite:assertContainsTrackingCategory(category, result) | ||
| Line 278: | Line 277: | ||
end | end | ||
| − | function suite. | + | function suite.runRedirectWithTitles(redirect, ...) |
| − | + | return _redirect(redirect, nil, nil, ...) | |
| − | return _redirect(redirect, nil, nil, | ||
end | end | ||
| Line 291: | Line 289: | ||
} | } | ||
for _, redirect in ipairs(redirects) do | for _, redirect in ipairs(redirects) do | ||
| − | self:assertNotContainsTrackingCategory(suite. | + | self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles( |
redirect, d.otherNamespacePage | redirect, d.otherNamespacePage | ||
)) | )) | ||
| Line 299: | Line 297: | ||
function suite:testTrackingCategoryExceptions() | function suite:testTrackingCategoryExceptions() | ||
for _, s in ipairs{'REDIRECT', 'REDIRECT1', 'REDIRECT1678', 'TERM'} do | for _, s in ipairs{'REDIRECT', 'REDIRECT1', 'REDIRECT1678', 'TERM'} do | ||
| − | self:assertNotContainsTrackingCategory(suite. | + | self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles(s, d.mainspacePage)) |
end | end | ||
| + | end | ||
| + | |||
| + | function suite:testTrackingCategoryNotRedirect() | ||
| + | local data = { | ||
| + | {d.mainspaceExisting, 'France'}, | ||
| + | } | ||
| + | self:assertContainsTrackingCategory(suite.runRedirectWithTitles(d.nonExistingRedirect, d.mainspacePage)) | ||
| + | self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles(d.existingRedirect, d.mainspacePage)) | ||
end | end | ||
return suite | return suite | ||
Revision as of 11:26, 5 September 2014
Documentation for this module may be created at Module:Redirect hatnote/testcases/doc
local mRedirectHatnote = require('Module:Redirect hatnote/sandbox')
local _redirect = mRedirectHatnote._redirect
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
function suite.runRedirect(args)
-- Runs the "redirect" function with an args table passed from a
-- parent frame.
local frame = mw.getCurrentFrame()
local parent = frame:newChild{args = args}
local child = parent:newChild{}
return mRedirectHatnote.redirect(child)
end
--------------------------------------------------------------------------------
-- Test #invoke function basic
--------------------------------------------------------------------------------
function suite:testBlank()
local result = suite.runRedirect{}
self:assertStringContains('no redirect specified', result, true)
self:assertStringContains('Template:Redirect#Errors', result, true)
end
function suite:testRedirectOnly()
local result = suite.runRedirect{'REDIRECT'}
self:assertStringContains('"REDIRECT" redirects here. For other uses, see [[REDIRECT (disambiguation)]].', result, true)
end
function suite:testUse1()
local result = suite.runRedirect{'REDIRECT', 'USE1'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[REDIRECT (disambiguation)]].', result, true)
end
function suite:testPage1()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]].', result, true)
end
function suite:testUse2()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[USE2 (disambiguation)]].', result, true)
end
function suite:testPage2()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]].', result, true)
end
function suite:testUse3()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]]. For USE3, see [[USE3 (disambiguation)]].', result, true)
end
function suite:testPage3()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]]. For USE3, see [[PAGE3]].', result, true)
end
function suite:testUse4()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3', 'USE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]]. For USE3, see [[PAGE3]]. For USE4, see [[USE4 (disambiguation)]].', result, true)
end
function suite:testPage4()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3', 'USE4', 'PAGE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]]. For USE3, see [[PAGE3]]. For USE4, see [[PAGE4]].', result, true)
end
function suite:testPipeInput()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1 (disambiguation)|PAGE1', 'USE2', 'PAGE2 (disambiguation)|PAGE2', 'USE3', 'PAGE3 (disambiguation)|PAGE3', 'USE4', 'PAGE4 (disambiguation)|PAGE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1 (disambiguation)|PAGE1]]. For USE2, see [[PAGE2 (disambiguation)|PAGE2]]. For USE3, see [[PAGE3 (disambiguation)|PAGE3]]. For USE4, see [[PAGE4 (disambiguation)|PAGE4]].', result, true)
end
--------------------------------------------------------------------------------
-- Test "and"
--------------------------------------------------------------------------------
function suite:testPage1AndPage2()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]] and [[PAGE2]].', result, true)
end
function suite:testPage2AndPage3()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'and', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]] and [[PAGE3]].', result, true)
end
function suite:testPage1AndPage2Page3AndPage4()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2', 'USE2', 'PAGE3', 'and', 'PAGE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]] and [[PAGE2]]. For USE2, see [[PAGE3]] and [[PAGE4]].', result, true)
end
function suite:testTwoAnds()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2', 'and', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]], [[PAGE2]] and [[PAGE3]].', result, true)
end
function suite:testThreeAnds()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2', 'and', 'PAGE3', 'and', 'PAGE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]], [[PAGE2]], [[PAGE3]] and [[PAGE4]].', result, true)
end
function suite:testTwoAndsUse2()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2', 'and', 'PAGE3', 'USE2', 'PAGE4'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]], [[PAGE2]] and [[PAGE3]]. For USE2, see [[PAGE4]].', result, true)
end
--------------------------------------------------------------------------------
-- Test skipping parameters
--------------------------------------------------------------------------------
function suite:testUse1Skipped()
local result = suite.runRedirect{'REDIRECT', '', 'PAGE1'}
self:assertStringContains('"REDIRECT" redirects here. For other uses, see [[PAGE1]].', result, true)
end
function suite:testPage1Skipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', '', 'USE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[REDIRECT (disambiguation)]]. For USE2, see [[USE2 (disambiguation)]].', result, true)
end
function suite:testUse2Skipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', '', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]].', result, true)
end
function suite:testPage2Skipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', '', 'USE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[USE2 (disambiguation)]]. For USE3, see [[USE3 (disambiguation)]].', result, true)
end
function suite:testUse3Skipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', '', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]].', result, true)
end
function suite:testMiddleUseSkipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', '', 'PAGE2', 'USE3', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]].', result, true)
end
function suite:testMiddlePageSkipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', 'USE2', '', 'USE3', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[USE2 (disambiguation)]]. For USE3, see [[PAGE3]].', result, true)
end
--------------------------------------------------------------------------------
-- Test other uses
--------------------------------------------------------------------------------
function suite:testUse2Skipped()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', '', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]].', result, true)
end
function suite:testUse2Is1()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', '1', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For other uses, see [[PAGE2]].', result, true)
end
function suite:testUse1Is1()
local result = suite.runRedirect{'REDIRECT', '1', 'PAGE1', 'USE2', 'PAGE2'}
self:assertStringContains('"REDIRECT" redirects here. For 1, see [[PAGE1]]. For USE2, see [[PAGE2]].', result, true)
end
function suite:testOtherUsesIsNotFinal()
local result = suite.runRedirect{'REDIRECT', 'USE1', 'PAGE1', '1', 'PAGE2', 'USE3', 'PAGE3'}
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For other uses, see [[PAGE2]]. For USE3, see [[PAGE3]].', result, true)
end
--------------------------------------------------------------------------------
-- Test options
--------------------------------------------------------------------------------
function suite:testSelfRef()
local result = suite.runRedirect{'REDIRECT', selfref = 'yes'}
self:assertStringContains('class=".-selfref.-"', result, false)
end
--------------------------------------------------------------------------------
-- Test Lua interface
--------------------------------------------------------------------------------
function suite:assertError(...)
local success, result = pcall(_redirect, ...)
self:assertFalse(success)
end
function suite:testInvalidInput()
self:assertError()
self:assertError(9)
self:assertError(true)
self:assertError('REDIRECT', 'invalid')
self:assertError('REDIRECT', 'invalid', {})
self:assertError('REDIRECT', nil, 'invalid')
self:assertError('REDIRECT', {}, 'invalid')
end
function suite:testLuaRedirectOnly()
local result = _redirect('REDIRECT')
self:assertStringContains('"REDIRECT" redirects here. For other uses, see [[REDIRECT (disambiguation)]].', result, true)
end
function suite:testLuaPage1()
local result = _redirect(
'REDIRECT',
{
{use = 'USE1', pages = {'PAGE1'}}
}
)
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]].', result, true)
end
function suite:testLuaPage3()
local result = _redirect(
'REDIRECT',
{
{use = 'USE1', pages = {'PAGE1'}},
{use = 'USE2', pages = {'PAGE2'}},
{use = 'USE3', pages = {'PAGE3'}}
}
)
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]]. For USE2, see [[PAGE2]]. For USE3, see [[PAGE3]].', result, true)
end
function suite:testLuaMultiplePages()
local result = _redirect(
'REDIRECT',
{
{use = 'USE1', pages = {'PAGE1', 'PAGE2', 'PAGE3'}},
{use = 'USE2', pages = {'PAGE4', 'PAGE5'}},
}
)
self:assertStringContains('"REDIRECT" redirects here. For USE1, see [[PAGE1]], [[PAGE2]] and [[PAGE3]]. For USE2, see [[PAGE4]] and [[PAGE5]].', result, true)
end
function suite:testLuaSelfref()
local result = _redirect('REDIRECT', nil, {selfref = true})
self:assertStringContains('class=".-selfref.-"', result, false)
end
--------------------------------------------------------------------------------
-- Test tracking category
--------------------------------------------------------------------------------
function suite.makeFakeTitleObject(page, vals)
local title
if page then
title = mw.title.new(page)
else
title = mw.title.getCurrentTitle()
end
for k, v in pairs(vals) do
rawset(title, k, v)
end
return title
end
local d = {}
-- Categories
d.missingCat = 'Missing redirects'
d.invalidCat = 'Invalid redirects'
function suite:assertContainsTrackingCategory(category, result)
category = string.format('[[Category:%s]]', category)
self:assertStringContains(category, result, true)
end
function suite:assertNotContainsTrackingCategory(result)
self:assertNotStringContains('%[%[Category:[^%]]+%]%]', result)
end
function suite.runRedirectWithTitles(redirect, ...)
return _redirect(redirect, nil, nil, ...)
end
function suite:testTrackingCategoryNonMainspace()
local redirects = {
d.mainspaceNonExisting,
d.mainspaceExistingNonRedirect,
d.nonMainspaceNonExisting,
d.nonMainspaceExistingNonRedirect
}
for _, redirect in ipairs(redirects) do
self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles(
redirect, d.otherNamespacePage
))
end
end
function suite:testTrackingCategoryExceptions()
for _, s in ipairs{'REDIRECT', 'REDIRECT1', 'REDIRECT1678', 'TERM'} do
self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles(s, d.mainspacePage))
end
end
function suite:testTrackingCategoryNotRedirect()
local data = {
{d.mainspaceExisting, 'France'},
}
self:assertContainsTrackingCategory(suite.runRedirectWithTitles(d.nonExistingRedirect, d.mainspacePage))
self:assertNotContainsTrackingCategory(suite.runRedirectWithTitles(d.existingRedirect, d.mainspacePage))
end
return suite