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:WikiProject banner/testcases

From Wikipedia, the free encyclopedia
local mClassMask = require('Module:WikiProject banner/sandbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
local frame = mw.getCurrentFrame()
local lang = mw.language.getContentLanguage()

-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
local function classMask(args, page)
	local title = page and mw.title.new(page)
	local pagetype = require('Module:Pagetype')._main({page = page, dab = 'disambiguation page'})
	return mClassMask.class_mask(args[1], title, args.FQS, pagetype)
end

local function copyTable(t1, t2)
	for k, v in pairs(t2) do
		t1[k] = v
	end
end

local function unity(t1, t2)
	local ret = {}
	copyTable(ret, t1)
	copyTable(ret, t2)
	return ret
end

-------------------------------------------------------------------------------
-- Custom assert methods
-------------------------------------------------------------------------------
function suite:assertGradeEquals(expected, grade, args, page)
	self:assertEquals(expected, classMask(unity(args, {grade}), page))
	self:assertEquals(expected, classMask(unity(args, {grade:upper()}), page))
	self:assertEquals(expected, classMask(unity(args, {grade:lower()}), page))
end

-------------------------------------------------------------------------------
-- Default scale tests
-------------------------------------------------------------------------------
local function makeDefaultScaleTests(t)
	suite['test_' .. t.name] = function (self)
		self:assertGradeEquals(t.expected, t.trigger, {}, t.page)
	end
	suite['test_' .. t.name .. '_on_redirect'] = function (self)
		self:assertGradeEquals('Redirect', t.trigger, {FQS = 'yes'}, 'Abdul, Paula')
	end

end
makeDefaultScaleTests{name = 'FA', expected = 'FA', trigger = 'FA', param = 'fa', page = 'Manta ray'}
makeDefaultScaleTests{name = 'FL', expected = 'FL', trigger = 'FL', param = 'fl', page = 'List of pinnipeds'}
makeDefaultScaleTests{name = 'A', expected = 'A', trigger = 'A', param = 'a', page = 'Financial regulation in India'}
makeDefaultScaleTests{name = 'GA', expected = 'GA', trigger = 'GA', param = 'ga', page = 'Risk parity'}
makeDefaultScaleTests{name = 'B', expected = 'B', trigger = 'B', param = 'b', page = 'Economic history of Canada'}
makeDefaultScaleTests{name = 'C', expected = 'C', trigger = 'C', param = 'c', page = '3 Inches of Blood'}
makeDefaultScaleTests{name = 'start', expected = 'Start', trigger = 'Start', param = 'start', page = 'A Black Moon Broods Over Lemuria'}
makeDefaultScaleTests{name = 'stub', expected = 'Stub', trigger = 'Stub', param = 'stub', page = '3 & 3 Quarters'}
makeDefaultScaleTests{name = 'list', expected = 'List', trigger = 'List', param = 'list', page = 'Hit Machine'}

-------------------------------------------------------------------------------
-- Full quality scale grade tests
-------------------------------------------------------------------------------
local function makeFQSTests(t)
	suite['test_' .. t.name .. '_default'] = function (self)
		self:assertGradeEquals('NA', t.trigger, {}, t.page)
	end
	suite['test_' .. t.name .. '_activated'] = function (self)
		self:assertGradeEquals(t.expected, t.trigger, {[t.param] = 'yes'}, t.page)
	end
	if t.aliases then
		suite['test_' .. t.name .. '_aliases'] = function (self)
			for _, alias in ipairs(t.aliases) do
				self:assertGradeEquals(t.expected, alias, {[t.param] = 'yes'}, t.page)
			end
		end
	end
	suite['test_' .. t.name .. '_FQS'] = function (self)
		self:assertGradeEquals(t.expected, t.trigger, {FQS = 'yes'}, t.page)
	end
end

makeFQSTests{name = 'file', expected = 'File', param = 'file', trigger = 'File', aliases = {'Image', 'Img'}, page = 'File:19 Tom Lynch.png'}
makeFQSTests{name = 'category', expected = 'Category', param = 'category', trigger = 'Category', aliases = {'Cat', 'Categ'}, page = 'Category talk:20th-century Australian male musicians'}
makeFQSTests{name = 'disambig', expected = 'Disambig', param = 'disambig', trigger = 'Disambig', aliases = {'Disambiguation', 'Disamb', 'Dab'}, page = 'Barossa'}
makeFQSTests{name = 'portal', expected = 'Portal', param = 'portal', trigger = 'Portal', page = 'Portal:Oceania'}
makeFQSTests{name = 'template', expected = 'Template', param = 'template', trigger = 'Template', aliases = {'Temp', 'Tpl', 'Templ'}, page = 'Template:User from Tuvalu'}
makeFQSTests{name = 'project', expected = 'Project', param = 'project', trigger = 'Project', page = 'Wikipedia:WikiProject Tonga'}
makeFQSTests{name = 'draft', expected = 'Draft', param = 'draft', trigger = 'Draft', page = 'Draft:Soseala Tinilau'}
makeFQSTests{name = 'redirect', expected = 'Redirect', param = 'redirect', trigger = 'Redirect', aliases = {'Red', 'Redir'}, page = 'Akilisi Pohiva'}

-------------------------------------------------------------------------------
-- Help tests
-------------------------------------------------------------------------------
function suite:test_help_default()
	self:assertGradeEquals('NA', 'Help', {}, 'Help:Footnotes')
end

function suite:test_help_activated()
	self:assertGradeEquals('Help', 'Help', {help = 'yes'}, 'Help:Footnotes')
end

function suite:test_help_FQS()
	self:assertGradeEquals('NA', 'Help', {FQS = 'yes'}, 'Help:Footnotes')
end

-------------------------------------------------------------------------------
-- FM tests
-------------------------------------------------------------------------------
function suite:test_FM_default()
	self:assertGradeEquals('NA', 'FM', {}, 'File:Alamo pano.jpg')
end
function suite:test_FM_activated()
	self:assertGradeEquals('FM', 'FM', {fm = 'yes'}, 'File:Alamo pano.jpg')
end
function suite:test_FM_file_activated()
	self:assertGradeEquals('File', 'FM', {file = 'yes'}, 'File:Alamo pano.jpg')
end
function suite:test_FM_file_FQS()
	self:assertGradeEquals('FM', 'FM', {FQS = 'yes'}, 'File:Alamo pano.jpg')
end
function suite:test_FM_file_overridden()
	self:assertGradeEquals('FM', 'FM', {file = '', FQS = 'yes'}, 'File:Alamo pano.jpg')
end

-------------------------------------------------------------------------------
-- Module tests
-------------------------------------------------------------------------------
function suite:test_module_default()
	self:assertGradeEquals('NA', 'module', {})
end
function suite:test_module_activated()
	self:assertGradeEquals('NA', 'module', {module = 'yes'})
end
function suite:test_module_template_activated()
	self:assertGradeEquals('Template', 'Module', {template = 'yes'})
end
function suite:test_module_template_FQS()
	self:assertGradeEquals('Template', 'Module', {FQS = 'yes'})
end
function suite:test_module_template_overridden()
	self:assertGradeEquals('NA', 'module', {template = '', FQS = 'yes'})
end

-------------------------------------------------------------------------------
-- Undefined tests
-------------------------------------------------------------------------------
function suite:test_undefined()
	self:assertEquals('¬', classMask{})
end
function suite:test_undefined_explicit()
	self:assertEquals('¬', classMask{'¬'})
end

-------------------------------------------------------------------------------
-- Default grade tests
-------------------------------------------------------------------------------
local function makeDefaultTests(t)
	suite['test_default_' .. t.name .. '_inactive'] = function (self)
		self:assertGradeEquals('NA', 'Foo', {}, t.page)
	end
	suite['test_default_' .. t.name .. '_active'] = function (self)
		self:assertGradeEquals(t.expected, 'Foo', {[t.param] = 'yes'}, t.page)
	end
	suite['test_default_' .. t.name .. '_FQS'] = function (self)
		self:assertGradeEquals(t.FQSexpected or t.expected, 'Foo', {FQS = 'yes'}, t.page)
	end
	suite['test_default_' .. t.name .. '_FQS_overridden'] = function (self)
		self:assertGradeEquals(t.FQSexpected or 'NA', 'Foo', {[t.param] = '', FQS = 'yes'}, t.page)
	end
end

makeDefaultTests{name = 'user', expected = 'User', param = 'user', page = 'User talk:Foo', FQSexpected = 'NA'}
makeDefaultTests{name = 'mediawiki', expected = 'NA', param = 'mediawiki', page = 'MediaWiki talk:Foo'}
makeDefaultTests{name = 'timedtext', expected = 'File', param = 'file', page = 'TimedText talk:Foo'}
makeDefaultTests{name = 'module', expected = 'Template', param = 'template', page = 'Module talk:Foo'}
makeDefaultTests{name = 'file', expected = 'File', param = 'file', page = 'File talk:Foo.png'}
makeDefaultTests{name = 'category', expected = 'Category', param = 'category',  page = 'Category talk:Foo'}
makeDefaultTests{name = 'portal', expected = 'Portal',   param = 'portal',    page = 'Portal talk:Foo'}
makeDefaultTests{name = 'template', expected = 'Template', param = 'template',  page = 'Template talk:Foo'}
makeDefaultTests{name = 'project', expected = 'Project',  param = 'project',   page = 'Wikipedia talk:Foo2'}
makeDefaultTests{name = 'draft', expected = 'Draft', param = 'draft', page = 'Draft talk:Foo'}
makeDefaultTests{name = 'help', expected = 'Help',	param = 'help', page = 'Help talk:Foo', FQSexpected = 'NA'}
makeDefaultTests{name = 'timedtext_file', expected = 'NA', param = 'timedtext', page = 'TimedText talk:Foo', FQSexpected = 'File'}
makeDefaultTests{name = 'module_template', expected = 'NA', param = 'module', page = 'Module talk:Foo', FQSexpected = 'Template'}

function suite:test_default_other_namespace()
	self:assertGradeEquals('', 'Foo', {}, 'Talk:Foo2')
end
function suite:test_default_upper_exists()
	self:assertGradeEquals('Some grade', 'Foo', {FOO = 'Some grade'}, 'Phil Ouellette')
end
function suite:test_default_lower_exists()
	self:assertGradeEquals('Foo', 'foO', {foo = 'yes'}, 'Phil Ouellette')
end
function suite:test_default_lower_overridden()
	self:assertGradeEquals('Some grade', 'Foo', {foo = 'yes', FOO = 'Some grade'}, 'Phil Ouellette')
end
function suite:test_default_empty_exists()
	self:assertGradeEquals('Some grade', '', {[''] = 'Some grade'}, 'Phil Ouellette')
end
function suite:test_default_blank_exists()
	self:assertGradeEquals('Some grade', '  ', {[''] = 'Some grade'}, 'Phil Ouellette')
end
function suite:test_auto_disambig()
	self:assertGradeEquals('Disambig', '', {FQS='yes'}, 'Talk:Resilience')
end
function suite:test_auto_disambig2()
	self:assertGradeEquals('Disambig', '', {disambig='yes'}, 'Talk:0K')
end
function suite:test_auto_disambig3()
	self:assertGradeEquals('NA', '', {}, "Talk:St. Paul's Cathedral (disambiguation)")
end
function suite:test_soft_redirect()
	self:assertGradeEquals('NA', '', {}, "'Murica")
end

-------------------------------------------------------------------------------
-- Other tests
-------------------------------------------------------------------------------
function suite:test_whitespace()
	self:assertEquals('FA', classMask({'  FA  '}, 'Phil Ouellette'))
end

return suite