模組:Hatnote/testcases
外观
| 這是Module:Hatnote的測試樣例頁,測試結果請見討論頁。 |
local mHatnote = require('Module:Hatnote/sandbox') -- the module to be tested local ScribuntoUnit = require('Module:ScribuntoUnit') local suite = ScribuntoUnit:new() function suite:assertError(func, ...) local success, result = pcall(func, ...) self:assertFalse(success) end function suite:assertNotEquals(expected, actual) self:assertTrue(expected ~= actual) end function suite:assertParentFrameCallEquals(expected, func, args) args = args or {} local current = mw.getCurrentFrame() local parent = current:newChild{title = 'Parent', args = args} local child = parent:newChild{title = 'Child'} self:assertEquals(expected, func(child)) end ------------------------------------------------------------------------------- -- findNamespaceId tests ------------------------------------------------------------------------------- function suite:testFindNamespaceIdInputErrors() self:assertError(mHatnote.findNamespaceId, 9) self:assertError(mHatnote.findNamespaceId) self:assertError(mHatnote.findNamespaceId, 'A page', 9) end function suite:testFindNamespaceIdNamespaces() self:assertEquals(0, mHatnote.findNamespaceId('Foo')) self:assertEquals(2, mHatnote.findNamespaceId('User:Example')) self:assertEquals(14, mHatnote.findNamespaceId('Category:Example')) end function suite:testFindNamespaceIdColonRemoval() self:assertEquals(14, mHatnote.findNamespaceId(':Category:Example')) end function suite:testFindNamespaceIdSkipColonRemoval() self:assertNotEquals(14, mHatnote.findNamespaceId(':Category:Example', false)) end ------------------------------------------------------------------------------- -- formatPages tests ------------------------------------------------------------------------------- function suite:testFormatPages() self:assertDeepEquals({'[[:Foo]]', '[[:Bar]]'}, mHatnote.formatPages('Foo', 'Bar')) end ------------------------------------------------------------------------------- -- formatPageTables tests ------------------------------------------------------------------------------- function suite:testFormatPageTables() self:assertDeepEquals( {'[[:Foo|foo]]', '[[:Bar|bar]]'}, mHatnote.formatPageTables({'Foo', 'foo'}, {'Bar', 'bar'}) ) end ------------------------------------------------------------------------------- -- makeWikitextError tests ------------------------------------------------------------------------------- function suite:testMakeWikitextError() self:assertEquals( '<strong class="error">Error: Foo.</strong>[[Category:Hatnote templates with errors]]', mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Example')) ) end function suite:testMakeWikitextErrorHelpLink() self:assertEquals( '<strong class="error">Error: Foo ([[Bar|help]]).</strong>[[Category:Hatnote templates with errors]]', mHatnote.makeWikitextError('Foo', 'Bar', nil, mw.title.new('Example')) ) end function suite:testMakeWikitextErrorManualCategorySuppression() self:assertEquals( '<strong class="error">Error: Foo.</strong>', mHatnote.makeWikitextError('Foo', nil, false, mw.title.new('Example')) ) end function suite:testMakeWikitextErrorTalkPageCategorySuppression() self:assertEquals( '<strong class="error">Error: Foo.</strong>', mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Talk:Example')) ) end ------------------------------------------------------------------------------- -- formatLink tests ------------------------------------------------------------------------------- function suite:testFormatLink() self:assertEquals('[[:Foo]]', mHatnote._formatLink('Foo')) end function suite:testFormatLinkColonHandling() self:assertEquals('[[:Category:Foo]]', mHatnote._formatLink(':Category:Foo')) end function suite:testFormatLinkSectionLinking() self:assertEquals('[[:Foo#Bar|Foo § Bar]]', mHatnote._formatLink('Foo#Bar')) end function suite:testFormatLinkPipeHandling() self:assertEquals('[[:Foo|Bar]]', mHatnote._formatLink('Foo|Bar')) end function suite:testFormatLinkDisplay() self:assertEquals('[[:Foo|Bar]]', mHatnote._formatLink('Foo', 'Bar')) end function suite:testFormatLinkEntryPoint() self:assertParentFrameCallEquals('[[:Foo]]', mHatnote.formatLink, {'Foo'}) self:assertParentFrameCallEquals('[[:Foo|Bar]]', mHatnote.formatLink, {'Foo', 'Bar'}) end ------------------------------------------------------------------------------- -- hatnote tests ------------------------------------------------------------------------------- function suite:testHatnoteInputErrors() self:assertError(mHatnote._hatnote, 9) self:assertError(mHatnote._hatnote) self:assertError(mHatnote._hatnote, 'A page', 9) end function suite:testHatnote() self:assertEquals('<div role="note" class="hatnote navigation-not-searchable">Foo</div>', mHatnote._hatnote('Foo')) end function suite:testHatnoteSelfref() self:assertEquals( '<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>', mHatnote._hatnote('Foo', {selfref = true}) ) end function suite:testHatnoteExtraClasses() self:assertEquals( '<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>', mHatnote._hatnote('Foo', {extraclasses = 'extraclass'}) ) end function suite:testHatnoteEntryPoint() self:assertParentFrameCallEquals( '<div role="note" class="hatnote navigation-not-searchable">Foo</div>', mHatnote.hatnote, {'Foo'} ) end function suite:testHatnoteEntryPointSelfref() self:assertParentFrameCallEquals( '<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>', mHatnote.hatnote, {'Foo', selfref = 'yes'} ) end function suite:testHatnoteEntryPointExtraClasses() self:assertParentFrameCallEquals( '<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>', mHatnote.hatnote, {'Foo', extraclasses = 'extraclass'} ) end return suite