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:Category main article/testcases

From Wikipedia, the free encyclopedia
local mCatMain = require('Module:Category main article') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit.new()

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

local function patchCurrentTitle(newTitle, func)
	local oldGetCurrentTitle = mw.title.getCurrentTitle
	mw.title.getCurrentTitle = function ()
		return mw.title.new("Category:Example")
	end
	func()
	mw.title.getCurrentTitle = oldGetCurrentTitle
end

--------------------------------------------------------------------------------
-- Custom assert methods
--------------------------------------------------------------------------------

function suite:assertHasClass(expectedClass, result)
	result = mw.text.killMarkers(result) -- remove TemplateStyles marker
	local classes = result:match('^<div[^>]*class="([^"]*)"')
	classes = mw.text.split(classes, ' ')
	local hasClass = false
	for _, actualClass in ipairs(classes) do
		if actualClass == expectedClass then
			hasClass = true
			break
		end
	end
	self:assertTrue(
		hasClass,
		string.format(
			'Class "%s" %s in result "%s"',
			expectedClass,
			hasClass and "found" or "not found",
			result
		), nil, 1
	)
end

--------------------------------------------------------------------------------
-- Tests
--------------------------------------------------------------------------------

function suite:testWholeOutput()
	self:assertEquals(
		[=[<div role="note" class="hatnote navigation-not-searchable">The main article for this [[Help:Categories|category]] is '''[[:Foo]]'''.</div>]=],
		mw.text.killMarkers(mCatMain._catMain(nil, nil, 'Foo'))
	)
end

function suite:testOneArticle()
	self:assertStringContains(
		"The main article for this [[Help:Categories|category]] is '''[[:Foo]]'''.",
		mCatMain._catMain(nil, nil, 'Foo'),
		true
	)
end

function suite:testTwoArticles()
	self:assertStringContains(
		"The main articles for this [[Help:Categories|category]] are '''[[:Foo]]''' and '''[[:Bar]]'''.",
		mCatMain._catMain(nil, nil, 'Foo', 'Bar'),
		true
	)
end

function suite:testThreeArticles()
	self:assertStringContains(
		"The main articles for this [[Help:Categories|category]] are '''[[:Foo]]''', '''[[:Bar]]''' and '''[[:Baz]]'''.",
		mCatMain._catMain(nil, nil, 'Foo', 'Bar', 'Baz'),
		true
	)
end

function suite:testNonArticle()
	self:assertStringContains(
		"The main page for this [[Help:Categories|category]] is '''[[:Foo]]'''.",
		mCatMain._catMain({article = false}, nil, 'Foo'),
		true
	)
end

function suite:testSelfReference()
	self:assertHasClass("selfref", mCatMain._catMain({selfref = true}, nil, 'Foo'))
end

function suite:testNoArticles()
	patchCurrentTitle(
		"Category:Example",
		function ()
			self:assertStringContains(
				"The main article for this [[Help:Categories|category]] is '''[[:Example]]'''.",
				mCatMain._catMain(),
				true
			)
		end
	)
end

return suite