<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AClass_mask%2Ftestcases</id>
	<title>Module:Class mask/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AClass_mask%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Class_mask/testcases&amp;action=history"/>
	<updated>2026-06-07T10:51:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Class_mask/testcases&amp;diff=135676&amp;oldid=prev</id>
		<title>imported&gt;Mr. Stradivarius: test the module</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Class_mask/testcases&amp;diff=135676&amp;oldid=prev"/>
		<updated>2015-01-19T00:19:39Z</updated>

		<summary type="html">&lt;p&gt;test the module&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local mClassMask = require(&amp;#039;Module:Class mask&amp;#039;)&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function classMask(args, title)&lt;br /&gt;
	if title then&lt;br /&gt;
		title = mw.title.new(title)&lt;br /&gt;
	end&lt;br /&gt;
	return mClassMask._main(args, title)&lt;br /&gt;
	-- return frame:expandTemplate{title = &amp;#039;Class mask&amp;#039;, args = args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function copyTable(t1, t2)&lt;br /&gt;
	for k, v in pairs(t2) do&lt;br /&gt;
		t1[k] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function unity(t1, t2)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	copyTable(ret, t1)&lt;br /&gt;
	copyTable(ret, t2)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Custom assert methods&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:assertGradeEquals(expected, grade, args, title)&lt;br /&gt;
	self:assertEquals(expected, classMask(unity(args, {grade}), title))&lt;br /&gt;
	self:assertEquals(expected, classMask(unity(args, {grade:upper()}), title))&lt;br /&gt;
	self:assertEquals(expected, classMask(unity(args, {grade:lower()}), title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Default scale tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeDefaultScaleTests(t)&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, t.trigger, {})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_no&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;&amp;#039;, t.trigger, {[t.param] = &amp;#039;no&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;FA&amp;#039;, expected = &amp;#039;FA&amp;#039;, trigger = &amp;#039;FA&amp;#039;, param = &amp;#039;fa&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;FL&amp;#039;, expected = &amp;#039;FL&amp;#039;, trigger = &amp;#039;FL&amp;#039;, param = &amp;#039;fl&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;A&amp;#039;, expected = &amp;#039;A&amp;#039;, trigger = &amp;#039;A&amp;#039;, param = &amp;#039;a&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;GA&amp;#039;, expected = &amp;#039;GA&amp;#039;, trigger = &amp;#039;GA&amp;#039;, param = &amp;#039;ga&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;C&amp;#039;, expected = &amp;#039;C&amp;#039;, trigger = &amp;#039;C&amp;#039;, param = &amp;#039;c&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;start&amp;#039;, expected = &amp;#039;Start&amp;#039;, trigger = &amp;#039;Start&amp;#039;, param = &amp;#039;start&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;stub&amp;#039;, expected = &amp;#039;Stub&amp;#039;, trigger = &amp;#039;Stub&amp;#039;, param = &amp;#039;stub&amp;#039;}&lt;br /&gt;
makeDefaultScaleTests{name = &amp;#039;list&amp;#039;, expected = &amp;#039;List&amp;#039;, trigger = &amp;#039;List&amp;#039;, param = &amp;#039;list&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- B grade tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_normal()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;B&amp;#039;, &amp;#039;B&amp;#039;, {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_normal_no()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;&amp;#039;, &amp;#039;B&amp;#039;, {b = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_all_yes()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;B&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_yes_aliases()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;B&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;YES&amp;#039;, b2 = &amp;#039;y&amp;#039;, b3 = &amp;#039;Y&amp;#039;, b4 = &amp;#039;1&amp;#039;, b5 = &amp;#039;pass&amp;#039;, b6 = &amp;#039;PASS&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;B&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;n/a&amp;#039;, b2 = &amp;#039;N/A&amp;#039;, b3 = &amp;#039;na&amp;#039;, b4 = &amp;#039;NA&amp;#039;, b5 = &amp;#039;¬&amp;#039;, b6 = &amp;#039;unused&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;B&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;UNUSED&amp;#039;, b2 = nil, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_all_no()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;no&amp;#039;, b2 = &amp;#039;no&amp;#039;, b3 = &amp;#039;no&amp;#039;, b4 = &amp;#039;no&amp;#039;, b5 = &amp;#039;no&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_no_aliases()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;NO&amp;#039;,       b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;n&amp;#039;,        b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;N&amp;#039;,        b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;0&amp;#039;,        b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;fail&amp;#039;,     b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;FAIL&amp;#039;,     b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;&amp;lt;yes/no&amp;gt;&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;&amp;lt;YES/NO&amp;gt;&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes/no&amp;#039;,   b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;YES/NO&amp;#039;,   b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;&amp;#039;,         b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;foo&amp;#039;,      b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YYYYYN()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YYYYNN()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;no&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YYYNNN()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;yes&amp;#039;, b4 = &amp;#039;no&amp;#039;, b5 = &amp;#039;no&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YYNNNN()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;no&amp;#039;, b4 = &amp;#039;no&amp;#039;, b5 = &amp;#039;no&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YNNNNN()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;no&amp;#039;, b3 = &amp;#039;no&amp;#039;, b4 = &amp;#039;no&amp;#039;, b5 = &amp;#039;no&amp;#039;, b6 = &amp;#039;no&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_B_extended_YYNYYY()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;C&amp;#039;, &amp;#039;B&amp;#039;, {b1 = &amp;#039;yes&amp;#039;, b2 = &amp;#039;yes&amp;#039;, b3 = &amp;#039;no&amp;#039;, b4 = &amp;#039;yes&amp;#039;, b5 = &amp;#039;yes&amp;#039;, b6 = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Full quality scale grade tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeFQSTests(t)&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_default&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, t.trigger, {})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_activated&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, t.trigger, {[t.param] = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if t.aliases then&lt;br /&gt;
		suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_aliases&amp;#039;] = function (self)&lt;br /&gt;
			for _, alias in ipairs(t.aliases) do&lt;br /&gt;
				self:assertGradeEquals(t.expected, alias, {[t.param] = &amp;#039;yes&amp;#039;})&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_FQS&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, t.trigger, {FQS = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
makeFQSTests{name = &amp;#039;file&amp;#039;,     expected = &amp;#039;File&amp;#039;,     param = &amp;#039;file&amp;#039;,     trigger = &amp;#039;File&amp;#039;,     aliases = {&amp;#039;Image&amp;#039;, &amp;#039;Img&amp;#039;}}&lt;br /&gt;
makeFQSTests{name = &amp;#039;category&amp;#039;, expected = &amp;#039;Category&amp;#039;, param = &amp;#039;category&amp;#039;, trigger = &amp;#039;Category&amp;#039;, aliases = {&amp;#039;Cat&amp;#039;, &amp;#039;Categ&amp;#039;}}&lt;br /&gt;
makeFQSTests{name = &amp;#039;disambig&amp;#039;, expected = &amp;#039;Disambig&amp;#039;, param = &amp;#039;disambig&amp;#039;, trigger = &amp;#039;Disambig&amp;#039;, aliases = {&amp;#039;Disambiguation&amp;#039;, &amp;#039;Disamb&amp;#039;, &amp;#039;Dab&amp;#039;}}&lt;br /&gt;
makeFQSTests{name = &amp;#039;portal&amp;#039;,   expected = &amp;#039;Portal&amp;#039;,   param = &amp;#039;portal&amp;#039;,   trigger = &amp;#039;Portal&amp;#039;}&lt;br /&gt;
makeFQSTests{name = &amp;#039;template&amp;#039;, expected = &amp;#039;Template&amp;#039;, param = &amp;#039;template&amp;#039;, trigger = &amp;#039;Template&amp;#039;, aliases = {&amp;#039;Temp&amp;#039;, &amp;#039;Tpl&amp;#039;, &amp;#039;Templ&amp;#039;}}&lt;br /&gt;
makeFQSTests{name = &amp;#039;project&amp;#039;,  expected = &amp;#039;Project&amp;#039;,  param = &amp;#039;project&amp;#039;,  trigger = &amp;#039;Project&amp;#039;}&lt;br /&gt;
makeFQSTests{name = &amp;#039;draft&amp;#039;,    expected = &amp;#039;Draft&amp;#039;,    param = &amp;#039;draft&amp;#039;,    trigger = &amp;#039;Draft&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
function suite:test_FQS_override()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;File&amp;#039;, {file = &amp;#039;&amp;#039;, FQS = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Other standard grade tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeOtherTests(t)&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_default&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, t.trigger, {})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_activated&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, t.trigger, {[t.param] = &amp;#039;yes&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if t.aliases then&lt;br /&gt;
		suite[&amp;#039;test_&amp;#039; .. t.name .. &amp;#039;_aliases&amp;#039;] = function (self)&lt;br /&gt;
			for _, alias in ipairs(t.aliases) do&lt;br /&gt;
				self:assertGradeEquals(t.expected, alias, {[t.param] = &amp;#039;yes&amp;#039;})&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
makeOtherTests{name = &amp;#039;redirect&amp;#039;, expected = &amp;#039;Redirect&amp;#039;, param = &amp;#039;redirect&amp;#039;, trigger = &amp;#039;Redirect&amp;#039;, aliases = {&amp;#039;Red&amp;#039;, &amp;#039;Redir&amp;#039;}}&lt;br /&gt;
makeOtherTests{name = &amp;#039;book&amp;#039;,     expected = &amp;#039;Book&amp;#039;,     param = &amp;#039;book&amp;#039;,     trigger = &amp;#039;Book&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- FM tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_FM_default()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;FM&amp;#039;, {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_FM_activated()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;FM&amp;#039;, &amp;#039;FM&amp;#039;, {fm = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_FM_file_activated()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;File&amp;#039;, &amp;#039;FM&amp;#039;, {file = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_FM_file_FQS()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;File&amp;#039;, &amp;#039;FM&amp;#039;, {FQS = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_FM_file_overridden()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;FM&amp;#039;, {file = &amp;#039;&amp;#039;, FQS = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Undefined tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_undefined()&lt;br /&gt;
	self:assertEquals(&amp;#039;¬&amp;#039;, classMask{})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_undefined_explicit()&lt;br /&gt;
	self:assertEquals(&amp;#039;¬&amp;#039;, classMask{&amp;#039;¬&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- NA grade tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeNAForceTests(t)&lt;br /&gt;
	suite[&amp;#039;test_NA_force_&amp;#039; .. t.name .. &amp;#039;_default&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_NA_force_&amp;#039; .. t.name .. &amp;#039;_activated&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;yes&amp;#039;, [t.param] = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_NA_force_&amp;#039; .. t.name .. &amp;#039;_FQS&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;yes&amp;#039;, FQS = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_NA_force_&amp;#039; .. t.name .. &amp;#039;_FQS_overridden&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;yes&amp;#039;, [t.param] = &amp;#039;&amp;#039;, FQS = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
makeNAForceTests{name = &amp;#039;file&amp;#039;,     title = &amp;#039;File talk:Foo.png&amp;#039;, expected = &amp;#039;File&amp;#039;,     param = &amp;#039;file&amp;#039;}&lt;br /&gt;
makeNAForceTests{name = &amp;#039;category&amp;#039;, title = &amp;#039;Category talk:Foo&amp;#039;, expected = &amp;#039;Category&amp;#039;, param = &amp;#039;category&amp;#039;}&lt;br /&gt;
makeNAForceTests{name = &amp;#039;portal&amp;#039;,   title = &amp;#039;Portal talk:Foo&amp;#039;,   expected = &amp;#039;Portal&amp;#039;,   param = &amp;#039;portal&amp;#039;}&lt;br /&gt;
makeNAForceTests{name = &amp;#039;template&amp;#039;, title = &amp;#039;Template talk:Foo&amp;#039;, expected = &amp;#039;Template&amp;#039;, param = &amp;#039;template&amp;#039;}&lt;br /&gt;
makeNAForceTests{name = &amp;#039;project&amp;#039;,  title = &amp;#039;Project talk:Foo&amp;#039;,  expected = &amp;#039;Project&amp;#039;,  param = &amp;#039;project&amp;#039;}&lt;br /&gt;
makeNAForceTests{name = &amp;#039;draft&amp;#039;,    title = &amp;#039;Draft talk:Foo&amp;#039;,    expected = &amp;#039;Draft&amp;#039;,    param = &amp;#039;draft&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
function suite:test_NA_no_force()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;no&amp;#039;})&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_NA_force_default()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;NA&amp;#039;, {forceNA = &amp;#039;yes&amp;#039;}, &amp;#039;Talk:Foo&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Default grade tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeDefaultTests(t)&lt;br /&gt;
	suite[&amp;#039;test_default_&amp;#039; .. t.name .. &amp;#039;_inactive&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;Foo&amp;#039;, {}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_default_&amp;#039; .. t.name .. &amp;#039;_active&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, &amp;#039;Foo&amp;#039;, {[t.param] = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_default_&amp;#039; .. t.name .. &amp;#039;_FQS&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(t.expected, &amp;#039;Foo&amp;#039;, {FQS = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	suite[&amp;#039;test_default_&amp;#039; .. t.name .. &amp;#039;_FQS_overridden&amp;#039;] = function (self)&lt;br /&gt;
		self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;Foo&amp;#039;, {[t.param] = &amp;#039;&amp;#039;, FQS = &amp;#039;yes&amp;#039;}, t.title)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
makeDefaultTests{name = &amp;#039;user&amp;#039;,      expected = &amp;#039;NA&amp;#039;,       param = &amp;#039;user&amp;#039;,      title = &amp;#039;User talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;mediawiki&amp;#039;, expected = &amp;#039;NA&amp;#039;,       param = &amp;#039;mediawiki&amp;#039;, title = &amp;#039;MediaWiki talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;timedtext&amp;#039;, expected = &amp;#039;NA&amp;#039;,       param = &amp;#039;timedtext&amp;#039;, title = &amp;#039;TimedText talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;module&amp;#039;,    expected = &amp;#039;NA&amp;#039;,       param = &amp;#039;module&amp;#039;,    title = &amp;#039;Module talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;help&amp;#039;,      expected = &amp;#039;NA&amp;#039;,       param = &amp;#039;help&amp;#039;,      title = &amp;#039;Help talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;file&amp;#039;,      expected = &amp;#039;File&amp;#039;,     param = &amp;#039;file&amp;#039;,      title = &amp;#039;File talk:Foo.png&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;category&amp;#039;,  expected = &amp;#039;Category&amp;#039;, param = &amp;#039;category&amp;#039;,  title = &amp;#039;Category talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;portal&amp;#039;,    expected = &amp;#039;Portal&amp;#039;,   param = &amp;#039;portal&amp;#039;,    title = &amp;#039;Portal talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;template&amp;#039;,  expected = &amp;#039;Template&amp;#039;, param = &amp;#039;template&amp;#039;,  title = &amp;#039;Template talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;project&amp;#039;,   expected = &amp;#039;Project&amp;#039;,  param = &amp;#039;project&amp;#039;,   title = &amp;#039;Wikipedia talk:Foo&amp;#039;}&lt;br /&gt;
makeDefaultTests{name = &amp;#039;draft&amp;#039;,     expected = &amp;#039;Draft&amp;#039;,    param = &amp;#039;draft&amp;#039;,     title = &amp;#039;Draft talk:Foo&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_book_inactive()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;NA&amp;#039;, &amp;#039;Foo&amp;#039;, {}, &amp;#039;Book talk:Foo&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_book_active()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Book&amp;#039;, &amp;#039;Foo&amp;#039;, {book = &amp;#039;yes&amp;#039;}, &amp;#039;Book talk:Foo&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_other_namespace()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;&amp;#039;, &amp;#039;Foo&amp;#039;, {}, &amp;#039;Talk:Foo&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_upper_exists()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Some grade&amp;#039;, &amp;#039;Foo&amp;#039;, {FOO = &amp;#039;Some grade&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_lower_exists()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Foo&amp;#039;, &amp;#039;foO&amp;#039;, {foo = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_lower_overridden()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Some grade&amp;#039;, &amp;#039;Foo&amp;#039;, {foo = &amp;#039;yes&amp;#039;, FOO = &amp;#039;Some grade&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_empty_exists()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Some grade&amp;#039;, &amp;#039;&amp;#039;, {[&amp;#039;&amp;#039;] = &amp;#039;Some grade&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_blank_exists()&lt;br /&gt;
	self:assertGradeEquals(&amp;#039;Some grade&amp;#039;, &amp;#039;  &amp;#039;, {[&amp;#039;&amp;#039;] = &amp;#039;Some grade&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_unicode_upper_exists()&lt;br /&gt;
	self:assertEquals(&amp;#039;Some value&amp;#039;, classMask{&amp;#039;ğÖÖ&amp;#039;, [&amp;#039;ĞÖÖ&amp;#039;] = &amp;#039;Some value&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_unicode_lower_exists()&lt;br /&gt;
	self:assertEquals(&amp;#039;Ğöö&amp;#039;, classMask{&amp;#039;ğÖÖ&amp;#039;, [&amp;#039;ğöö&amp;#039;] = &amp;#039;yes&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_default_unicode_lower_overridden()&lt;br /&gt;
	self:assertEquals(&amp;#039;Some value&amp;#039;, classMask{&amp;#039;ğÖÖ&amp;#039;, [&amp;#039;ğöö&amp;#039;] = &amp;#039;yes&amp;#039;, [&amp;#039;ĞÖÖ&amp;#039;] = &amp;#039;Some value&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Doc warning tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_doc_warning()&lt;br /&gt;
	self:assertStringContains(&lt;br /&gt;
		frame:expandTemplate{title = &amp;#039;Class mask/doc warning&amp;#039;},&lt;br /&gt;
		classMask({}, &amp;#039;Template:Foo/class&amp;#039;),&lt;br /&gt;
		true&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Other tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_whitespace()&lt;br /&gt;
	self:assertEquals(&amp;#039;FA&amp;#039;, classMask{&amp;#039;  FA  &amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>imported&gt;Mr. Stradivarius</name></author>
	</entry>
</feed>