Module:Hatnote/testcases

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

function suite:assertParentFrameCallContains(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:assertStringContains(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

-------------------------------------------------------------------------------

-- makeWikitextError tests

-------------------------------------------------------------------------------

function suite:testMakeWikitextError()

self:assertEquals(

'Error: Foo.Category:Hatnote templates with errors',

mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Example'))

)

end

function suite:testMakeWikitextErrorHelpLink()

self:assertEquals(

'Error: Foo (help).Category:Hatnote templates with errors',

mHatnote.makeWikitextError('Foo', 'Bar', nil, mw.title.new('Example'))

)

end

function suite:testMakeWikitextErrorManualCategorySuppression()

self:assertEquals(

'Error: Foo.',

mHatnote.makeWikitextError('Foo', nil, false, mw.title.new('Example'))

)

end

function suite:testMakeWikitextErrorTalkPageCategorySuppression()

self:assertEquals(

'Error: Foo.',

mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Talk:Example'))

)

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:assertStringContains(

'

',

mHatnote._hatnote('Foo')

)

end

function suite:testHatnoteSelfref()

self:assertStringContains(

'

',

mHatnote._hatnote('Foo', {selfref = true})

)

end

function suite:testHatnoteExtraClasses()

self:assertStringContains(

'

',

mHatnote._hatnote('Foo', {extraclasses = 'extraclass'})

)

end

function suite:testHatnoteEntryPoint()

self:assertParentFrameCallContains(

'

',

mHatnote.hatnote,

{'Foo'}

)

end

function suite:testHatnoteEntryPointSelfref()

self:assertParentFrameCallContains(

'

',

mHatnote.hatnote,

{'Foo', selfref = 'yes'}

)

end

function suite:testHatnoteEntryPointExtraClasses()

self:assertParentFrameCallContains(

'

',

mHatnote.hatnote,

{'Foo', extraclasses = 'extraclass'}

)

end

return suite