Module:Lua banner/testcases

From Bonkipedia

Production

Yes All tests passed.

Name Expected Actual
Yes testMain
Yes testRenderBox
Yes testRenderTrackingCategories
Yes testRenderTrackingCategoriesWithCategory
Yes testRenderTrackingCategoriesWithNocat


Sandbox

Yes All tests passed.

Name Expected Actual
Yes testMain
Yes testRenderBox
Yes testRenderTrackingCategories
Yes testRenderTrackingCategoriesWithCategory
Yes testRenderTrackingCategoriesWithNocat

local mList = require('Module:List')
local mMessageBox = require('Module:Message box')

local p = require('Module:ScribuntoUnit'):new()

local noWishConfig = {
	subpage_blacklist = {
		['doc'] = true
	},
	allow_wishes = false,
	error_category = 'ERRCAT_TITLE',
	-- wish_category = nil, -- should not be accessed
	default_category = 'DEFCAT_TITLE',
	module_categories = {
		['String'] = 'STRINGCAT_TITLE'
	}
}
local withWishConfig = {
	subpage_blacklist = {
		['doc'] = true
	},
	allow_wishes = true,
	-- error_category = nil, -- should not be accessed
	wish_category = 'WISHCAT_TITLE',
	default_category = 'DEFCAT_TITLE',
	module_categories = {
		['String'] = 'STRINGCAT_TITLE'
	}
}
local configMetatable = {
	__index = function(t, k) error("Unexpected field '" .. k .. "' accessed.") end
}
setmetatable(noWishConfig, configMetatable)
setmetatable(withWishConfig, configMetatable)

-- Allow test runner to use both the Module:XXX itself and Module:XXX/sandbox with the same testcases
function p:module()
	return self.frame and self.frame.args and self.frame.args.module or 'Lua banner'
end

function p:box(text)
	local boxArgs = {
		text = text,
		type = 'notice',
		small = true,
		image = '[[File:Lua-logo-nolabel.svg|30px|alt=Lua logo|link=wikipedia:Wikipedia:Lua]]'
	}
	return mMessageBox.main('mbox', boxArgs)
end

function p:boxFromList(moduleLinks, withWishes)
	if #moduleLinks == 0 then
		if withWishes then
			return self:box('This template should use [[wikipedia:Wikipedia:Lua|Lua]]')
		else
			return self:box('<strong class="error">Error: no modules specified</strong>')
		end
	else
		return self:box('Uses [[wikipedia:Wikipedia:Lua|Lua]]:\n' .. mList.makeList('bulleted', moduleLinks))
	end
end

function p:assertTCBoth(args, modules, titleObj, expected)
	local func = require('Module:' .. p:module()).renderTrackingCategories
	self:assertEquals(func(args, modules, titleObj, noWishConfig), expected)
	self:assertEquals(func(args, modules, titleObj, withWishConfig), expected)
end

local function ignoreStripMarkersExceptNoWiki(s)
	-- return mw.text.unstrip(s);
	return mw.text.killMarkers(mw.text.unstripNoWiki(s));
end

function p:assertEqualsIgnoreStripMarkers(a, b, ...)
	if (type(a) == "string") then
		a = ignoreStripMarkersExceptNoWiki(a);
	end
	if (type(b) == "string") then
		b = ignoreStripMarkersExceptNoWiki(b);
	end
	return self:assertEquals(a, b, ...);
end

function p:testRenderBox()
	local func = require('Module:' .. p:module()).renderBox
	self:assertEqualsIgnoreStripMarkers(func({}, noWishConfig), self:boxFromList{})
	self:assertEqualsIgnoreStripMarkers(func({}, withWishConfig), self:boxFromList({}, true))
	self:assertEqualsIgnoreStripMarkers(func({'Module:Lua banner'}, noWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
	self:assertEqualsIgnoreStripMarkers(func({'Module:Lua banner'}, withWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
end

function p:testRenderTrackingCategories()
	local func = require('Module:' .. p:module()).renderTrackingCategories
	local moduleTitle = mw.title.new('Module:Lua banner')
	local templateTitle = mw.title.new('Template:Lua')
	local templateDocTitle = mw.title.new('Template:Lua/doc')
	self:assertEquals(func({}, {}, moduleTitle, noWishConfig), '[[Category:ERRCAT_TITLE]]')
	self:assertEquals(func({}, {}, moduleTitle, withWishConfig), '')
	self:assertEquals(func({}, {}, templateTitle, noWishConfig), '[[Category:ERRCAT_TITLE]][[Category:DEFCAT_TITLE]]')
	self:assertEquals(func({}, {}, templateTitle, withWishConfig), '[[Category:WISHCAT_TITLE]]')
	self:assertEquals(func({}, {}, templateDocTitle, noWishConfig), '[[Category:ERRCAT_TITLE]]')
	self:assertEquals(func({}, {}, templateDocTitle, withWishConfig), '')
	self:assertTCBoth({}, {'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({}, {'Module:Lua banner'}, templateTitle, '[[Category:DEFCAT_TITLE]]')
	self:assertTCBoth({}, {'Module:Lua banner'}, templateDocTitle, '')
	self:assertTCBoth({}, {'Module:Lua banner', 'Module:String'}, moduleTitle, '')
	self:assertTCBoth({}, {'Module:Lua banner', 'Module:String'}, templateTitle, '[[Category:DEFCAT_TITLE]]')
	self:assertTCBoth({}, {'Module:Lua banner', 'Module:String'}, templateDocTitle, '')
	self:assertTCBoth({}, {'Module:String', 'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({}, {'Module:String', 'Module:Lua banner'}, templateTitle, '[[Category:STRINGCAT_TITLE]]')
	self:assertTCBoth({}, {'Module:String', 'Module:Lua banner'}, templateDocTitle, '')
end

function p:testRenderTrackingCategoriesWithNocat()
	local moduleTitle = mw.title.new('Module:Lua banner')
	local templateTitle = mw.title.new('Template:Lua')
	local templateDocTitle = mw.title.new('Template:Lua/doc')
	self:assertTCBoth({nocat='true'}, {}, moduleTitle, '')
	self:assertTCBoth({nocat='true'}, {}, templateTitle, '')
	self:assertTCBoth({nocat='true'}, {}, templateDocTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner'}, templateTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner'}, templateDocTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner', 'Module:String'}, moduleTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner', 'Module:String'}, templateTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:Lua banner', 'Module:String'}, templateDocTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:String', 'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:String', 'Module:Lua banner'}, templateTitle, '')
	self:assertTCBoth({nocat='true'}, {'Module:String', 'Module:Lua banner'}, templateDocTitle, '')
end

function p:testRenderTrackingCategoriesWithCategory()
	local func = require('Module:' .. p:module()).renderTrackingCategories
	local moduleTitle = mw.title.new('Module:Lua banner')
	local templateTitle = mw.title.new('Template:Lua')
	local templateDocTitle = mw.title.new('Template:Lua/doc')
	self:assertEquals(func({category='catname'}, {}, moduleTitle, noWishConfig), '[[Category:ERRCAT_TITLE]]')
	self:assertEquals(func({category='catname'}, {}, moduleTitle, withWishConfig), '')
	self:assertEquals(func({category='catname'}, {}, templateTitle, noWishConfig), '[[Category:ERRCAT_TITLE]][[Category:catname]]')
	self:assertEquals(func({category='catname'}, {}, templateTitle, withWishConfig), '[[Category:catname]]')
	self:assertEquals(func({category='catname'}, {}, templateDocTitle, noWishConfig), '[[Category:ERRCAT_TITLE]]')
	self:assertEquals(func({category='catname'}, {}, templateDocTitle, withWishConfig), '')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner'}, templateTitle, '[[Category:catname]]')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner'}, templateDocTitle, '')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner', 'Module:String'}, moduleTitle, '')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner', 'Module:String'}, templateTitle, '[[Category:catname]]')
	self:assertTCBoth({category='catname'}, {'Module:Lua banner', 'Module:String'}, templateDocTitle, '')
	self:assertTCBoth({category='catname'}, {'Module:String', 'Module:Lua banner'}, moduleTitle, '')
	self:assertTCBoth({category='catname'}, {'Module:String', 'Module:Lua banner'}, templateTitle, '[[Category:catname]]')
	self:assertTCBoth({category='catname'}, {'Module:String', 'Module:Lua banner'}, templateDocTitle, '')
end

function p:testMain()
	local func = require('Module:' .. p:module())._main
	self:assertEqualsIgnoreStripMarkers(func({}, noWishConfig), self:boxFromList{} .. '[[Category:ERRCAT_TITLE]]')
	self:assertEqualsIgnoreStripMarkers(func({}, withWishConfig), self:boxFromList({}, true))
	self:assertEqualsIgnoreStripMarkers(func({nil}, noWishConfig), self:boxFromList{} .. '[[Category:ERRCAT_TITLE]]')
	self:assertEqualsIgnoreStripMarkers(func({nil}, withWishConfig), self:boxFromList({}, true))
	self:assertEqualsIgnoreStripMarkers(func({'Module:Lua banner'}, noWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
	self:assertEqualsIgnoreStripMarkers(func({'Module:Lua banner'}, withWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
	self:assertEqualsIgnoreStripMarkers(func({nil, 'Module:Lua banner'}, noWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
	self:assertEqualsIgnoreStripMarkers(func({nil, 'Module:Lua banner'}, withWishConfig), self:boxFromList{'[[:Module:Lua banner]]'})
end

return p