Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Hatnote/testcases

From Wikipedia, the free encyclopedia
local mHatnote = require('Module:Hatnote') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit.new()

--------------------------------------------------------------------------------
-- Sandbox run
--------------------------------------------------------------------------------

function suite.runSandbox(...)
	mHatnote = require('Module:Hatnote/sandbox')
	return suite.run(...)
end

--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------

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), nil, 1)
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), false, nil, 1)
end

-------------------------------------------------------------------------------
-- findNamespaceId tests
-------------------------------------------------------------------------------

function suite:testFindNamespaceIdInputErrors()
    self:assertThrows(mHatnote.findNamespaceId, "bad argument #1 to 'findNamespaceId' (string expected, got number)", nil, 9)
    self:assertThrows(mHatnote.findNamespaceId, "bad argument #1 to 'findNamespaceId' (string expected, got nil)", nil)
    self:assertThrows(mHatnote.findNamespaceId, "bad argument #2 to 'findNamespaceId' (boolean expected, got number)", nil, 'A page', 9)
    self:assertThrows(mHatnote.findNamespaceId, "bad argument #2 to 'findNamespaceId' (boolean expected, got string)", nil, 'A page', "ds")
end

function suite:testFindNamespaceIdNamespaces()
	self:assertDoesNotThrow(mHatnote.findNamespaceId, nil, 'Foo')
	self:assertDoesNotThrow(mHatnote.findNamespaceId, nil, 'User:Example')
	self:assertDoesNotThrow(mHatnote.findNamespaceId, nil, 'Category:Example')
    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(
		'<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

-------------------------------------------------------------------------------
-- hatnote tests
-------------------------------------------------------------------------------

function suite:testHatnoteInputErrors()
	self:assertThrows(mHatnote._hatnote, "bad argument #1 to '_hatnote' (string expected, got number)", nil, 9)
	self:assertThrows(mHatnote._hatnote, "bad argument #1 to '_hatnote' (string expected, got table)", nil, {})
	self:assertThrows(mHatnote._hatnote, "bad argument #1 to '_hatnote' (string expected, got nil)", nil)
	self:assertThrows(mHatnote._hatnote, "bad argument #2 to '_hatnote' (table expected, got number)", nil, 'A page', 9)
	self:assertThrows(mHatnote._hatnote, "bad argument #2 to '_hatnote' (table expected, got string)", nil, 'A page', "A string")
end

function suite:testHatnote()
	self:assertDoesNotThrow(mHatnote._hatnote, nil, 'Foo')
	self:assertStringContains(
		'<div role="note" class="hatnote navigation%-not%-searchable">Foo</div>',
		mHatnote._hatnote('Foo')
	)
end

function suite:testHatnoteSelfref()
	self:assertStringContains(
		'<div role="note" class="hatnote navigation%-not%-searchable selfref">Foo</div>',
		mHatnote._hatnote('Foo', {selfref = true})
	)
end

function suite:testHatnoteExtraClasses()
	self:assertStringContains(
		'<div role="note" class="hatnote navigation%-not%-searchable extraclass">Foo</div>',
		mHatnote._hatnote('Foo', {extraclasses = 'extraclass'})
	)
end

function suite:testHatnoteEntryPoint()
	self:assertParentFrameCallContains(
		'<div role="note" class="hatnote navigation%-not%-searchable">Foo</div>',
		mHatnote.hatnote,
		{'Foo'}
	)
end

function suite:testHatnoteEntryPointSelfref()
	self:assertParentFrameCallContains(
		'<div role="note" class="hatnote navigation%-not%-searchable selfref">Foo</div>',
		mHatnote.hatnote,
		{'Foo', selfref = 'yes'}
	)
end

function suite:testHatnoteEntryPointExtraClasses()
	self:assertParentFrameCallContains(
		'<div role="note" class="hatnote navigation%-not%-searchable extraclass">Foo</div>',
		mHatnote.hatnote,
		{'Foo', extraclasses = 'extraclass'}
	)
end

return suite