Module:Icon/testcases

From Stiles Wiki
< Module:Icon
Revision as of 00:12, 29 August 2021 by imported>Mr. Stradivarius (use descriptive sentences for test cases, and generate the test data table every time, just in case the main module does something funny with it)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at Module:Icon/testcases/doc

Script error: Lua error at line 18: '}' expected (to close '{' at line 7) near '='.

local mIcon = require('Module:Icon/sandbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

-- Use a shortcut function to call mIcon._main using custom icon data.
local function icon(args)
	local data = {
		fa = {
			image = "Featured article star.svg",
			tooltip = "Featured article",
			link = true,
		},
		ga = {
			image = "Symbol support vote.svg",
			tooltip = "Good article",
			link = false,
		},
		stiles.casa_wiki = {
			image = "Stiles.casa Wiki-logo.svg",
			tooltip = "Stiles.casa Wiki page",
		},
		_DEFAULT = {
			image = "Symbol question.svg",
			link = false,
		}
	}
	return mIcon._main(args, data)
end

function suite:assertIsFileLink(s)
	self:assertStringContains('^%[%[File:[^%]]+%]%]$', s)
	self:assertStringContains('|class=noviewer', s, true)
end

local linkPattern = '|link=[|%]]'

function suite:assertLinkIsSuppressed(s)
	self:assertStringContains(linkPattern, s)
end

function suite:assertLinkIsNotSuppressed(s)
	self:assertNotStringContains(linkPattern, s)
end

suite["test _main: when no icon code is specified, a file link is output"] = function(self)
	self:assertIsFileLink(icon{})
end

suite["test _main: when an existing icon code is specified, a file link is output"] = function(self)
	self:assertIsFileLink(icon{'fa'})
end

suite["test _main: when an nonexistent icon code is specified, a file link is output"] = function(self)
	self:assertIsFileLink(icon{'nonexistentcode'})
end

suite["test _main: when an existing code is specified, the relevant image is displayed"] = function(self)
	self:assertStringContains('Symbol support vote.svg', icon{'ga'}, true)
end

suite["test _main: when an existing code is specified, the relevant tooltip is displayed"] = function(self)
	self:assertStringContains('Good article', icon{'ga'}, true)
end

suite["test _main: when no dimensions are specified, the image is output as 16x16 pixels"] = function(self)
	self:assertStringContains('16x16px', icon{})
end

suite["test _main: when custom dimensions are specified, the image is output with those dimensions"] = function(self)
	self:assertStringContains('320px', icon{size = '320px'})
end

suite["test _main: codes can have surrounding whitespace"] = function(self)
	self:assertStringContains('Featured article', icon{'  fa  '})
end

suite["test _main: codes can be upper case"] = function(self)
	self:assertStringContains('Featured article', icon{'FA'})
end

suite["test _main: codes can be specified with the 'class' parameter"] = function(self)
	self:assertStringContains('Featured article', icon{class = 'fa'})
end

suite["test _main: the class parameter has precedence over the first positional parameter"] = function(self)
	self:assertNotStringContains('Featured article', icon{'fa', class = 'ga'})
end

suite["test _main: the class parameter has precedence over the first positional parameter, even if the class parameter is the empty string"] = function(self)
	self:assertNotStringContains('Featured article', icon{'fa', class = ''})
end

suite["test _main: links are suppressed when the entry in the data table has 'link' set to false"] = function(self)
	self:assertLinkIsSuppressed(icon{'ga'})
end

suite["test _main: links are not suppressed when the entry in the data table has 'link' set to true"] = function(self)
	self:assertNotStringContains(linkPattern, icon{'fa'})
end

suite["test _main: links are not suppressed when the entry in the data table has no value for 'link'"] = function(self)	
	self:assertNotStringContains(linkPattern, icon{'stiles.casa_wiki'})
end

suite["test Module:Icon/data: codes can be specified as aliases"] = function(self)	
	self:assertStringContains('Former featured article', mIcon._main{'dfa'})
end

return suite