请输入您要查询的百科知识:

 

词条 Module:Redirect hatnote/testcases
释义

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, childArgs)

-- 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{args = childArgs}

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For other uses, see REDIRECT (disambiguation).', result, true)

end

function suite:testUse1()

local result = suite.runRedirect({'REDIRECT', 'USE1'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see REDIRECT (disambiguation).', result, true)

end

function suite:testPage1()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1.', result, true)

end

function suite:testUse2()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see REDIRECT (disambiguation).', result, true)

end

function suite:testPage2()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2'},{1})

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see PAGE2. For USE3, see REDIRECT (disambiguation).', result, true)

end

function suite:testPage3()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3'},{1})

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see PAGE2. For USE3, see PAGE3. For USE4, see REDIRECT (disambiguation).', result, true)

end

function suite:testPage4()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3', 'USE4', 'PAGE4'},{1})

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see PAGE2. For USE3, see PAGE3. For USE4, see PAGE4.', result, true)

end


-- Test "and"

function suite:testPage1AndPage2()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'and', 'PAGE2'},{1})

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'},{1})

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'},{1})

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'},{1})

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'},{1})

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'},{1})

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For other uses, see PAGE1.', result, true)

end

function suite:testPage1Skipped()

local result = suite.runRedirect({'REDIRECT', 'USE1', , 'USE2'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see REDIRECT (disambiguation). For USE2, see REDIRECT (disambiguation).', result, true)

end

function suite:testUse2Skipped()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', , 'PAGE2'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1.', result, true)

end

function suite:testPage2Skipped()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2', , 'USE3'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see REDIRECT (disambiguation). For USE3, see REDIRECT (disambiguation).', result, true)

end

function suite:testUse3Skipped()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', , 'PAGE3'},{1})

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'},{1})

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'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1. For USE2, see REDIRECT (disambiguation). For USE3, see PAGE3.', result, true)

end


-- Test other uses

function suite:testUse2Skipped()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', , 'PAGE2'},{1})

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1.', result, true)

end

function suite:testOtherUsesIsNotFinal()

local result = suite.runRedirect({'REDIRECT', 'USE1', 'PAGE1', 'other uses', 'PAGE2', 'USE3', 'PAGE3'},{1})

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'},{1})

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', 'USE1', 'PAGE1'},

1

)

self:assertStringContains('"REDIRECT" redirects here. For USE1, see PAGE1.', result, true)

end

function suite:testLuaPage3()

local result = _redirect(

{'REDIRECT', 'USE1', 'PAGE1', 'USE2', 'PAGE2', 'USE3', 'PAGE3'},

1

)

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', 'USE1', 'PAGE1', 'and', 'PAGE2', 'and', 'PAGE3', 'USE2', 'PAGE4', 'and', 'PAGE5'},

1

)

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'}, 1, {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 or {}) do

rawset(title, k, v)

end

return title

end

local d = {}

-- Categories

d.missingCat = 'Missing redirects'

d.invalidCat = 'Articles with redirect hatnotes needing review'

function suite:assertContainsTrackingCategory(category, result)

category = string.format(, category)

self:assertStringContains(category, result, true)

end

function suite:assertNotContainsTrackingCategory(result)

self:assertNotStringContains('%[%[Category:[^%]]+%]%]', result)

end

function suite:testTrackingCategoryNonMainspace()

local currentTitle = suite.makeFakeTitleObject('Wikipedia:Namespaces')

suite:assertNotContainsTrackingCategory(_redirect({'Example'}, nil, nil, currentTitle))

end

function suite:testTrackingCategoryExceptions()

local currentTitle = suite.makeFakeTitleObject('Example')

for _, s in ipairs{'REDIRECT', 'REDIRECT1', 'REDIRECT1678', 'TERM'} do

self:assertNotContainsTrackingCategory(_redirect({s}, nil, nil, currentTitle))

end

end

function suite:testTrackingCategoryInvalidTitle()

local currentTitle = suite.makeFakeTitleObject('Example')

self:assertContainsTrackingCategory(d.missingCat, _redirect({'Exam<>ple 2'}, nil, nil, currentTitle))

end

function suite:testTrackingCategoryNonexistent()

local currentTitle = suite.makeFakeTitleObject('Example')

local redirectTitle = suite.makeFakeTitleObject('Example 2', {exists = false, isRedirect = false})

self:assertContainsTrackingCategory(d.missingCat, _redirect({redirectTitle.prefixedText}, nil, nil, currentTitle, redirectTitle))

end

function suite:testTrackingCategoryNotRedirect()

local currentTitle = suite.makeFakeTitleObject('Example')

local redirectTitle = suite.makeFakeTitleObject('Example 2', {exists = true, isRedirect = false})

self:assertContainsTrackingCategory(d.invalidCat, _redirect({redirectTitle.prefixedText}, nil, nil, currentTitle, redirectTitle))

end

function suite:testTrackingCategoryWrongTarget()

local currentTitle = suite.makeFakeTitleObject('Example')

local redirectTitle = suite.makeFakeTitleObject('Example 2', {exists = true, isRedirect = true, getContent = function ()

return '#REDIRECT Example 3' -- This is to fool Module:Redirect.

end})

local targetTitle = suite.makeFakeTitleObject('Example 3')

self:assertContainsTrackingCategory(d.invalidCat, _redirect({redirectTitle.prefixedText}, nil, nil, currentTitle, redirectTitle, targetTitle))

end

function suite:testTrackingCategoryCorrectTarget()

local currentTitle = suite.makeFakeTitleObject('Example')

local redirectTitle = suite.makeFakeTitleObject('Example 2', {exists = true, isRedirect = true, getContent = function ()

return '#REDIRECT Example' -- This is to fool Module:Redirect.

end})

local targetTitle = suite.makeFakeTitleObject('Example')

self:assertNotContainsTrackingCategory(_redirect({redirectTitle.prefixedText}, nil, nil, currentTitle, redirectTitle, targetTitle))

end

return suite

1 : %s

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/16 8:17:15