Jump to content

Module:Side box/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 12:48, 1 June 2014 (finish makeData tests). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local mSideBox = require('Module:Side box')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

--------------------------------------------------------------------------------
-- Default values
--------------------------------------------------------------------------------
 
local d = {}


--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
 
function suite:assertArrayContainsString(expected, t)
	-- This only works on arrays that only contain strings.
	local sep = '|SEPARATOR|'
	local concatenated = sep .. table.concat(t, sep) .. sep
	self:assertStringContains(sep .. expected .. sep, concatenated, true)
end

function suite:assertNotArrayContainsString(expected, t)
	-- This only works on arrays that only contain strings.
	local sep = '|SEPARATOR|'
	local concatenated = sep .. table.concat(t, sep) .. sep
	self:assertNotStringContains(sep .. expected .. sep, concatenated, true)
end

--------------------------------------------------------------------------------
-- Test makeData
--------------------------------------------------------------------------------

function suite:testDataBlank()
	self:assertEquals('table', type(mSideBox.makeData{}))
	self:assertEquals('table', type(mSideBox.makeData{}.classes))
end

function suite:testDataMetadata()
	suite:assertNotArrayContainsString('metadata', mSideBox.makeData{}.classes)
	suite:assertNotArrayContainsString('metadata', mSideBox.makeData{metadata = 'no'}.classes)
	suite:assertNotArrayContainsString('metadata', mSideBox.makeData{metadata = false}.classes)
	suite:assertArrayContainsString('metadata', mSideBox.makeData{metadata = 'yes'}.classes)
	suite:assertArrayContainsString('metadata', mSideBox.makeData{metadata = true}.classes)
	suite:assertArrayContainsString('metadata', mSideBox.makeData{metadata = 'foo'}.classes)
end

function suite:testDataLeft()
	suite:assertArrayContainsString('mbox-small', mSideBox.makeData{}.classes)
	suite:assertArrayContainsString('mbox-small', mSideBox.makeData{position = 'right'}.classes)
	suite:assertArrayContainsString('mbox-small', mSideBox.makeData{position = 'asdf'}.classes)
	suite:assertArrayContainsString('mbox-small-left', mSideBox.makeData{position = 'left'}.classes)
	suite:assertArrayContainsString('mbox-small-left', mSideBox.makeData{position = 'Left'}.classes)
	suite:assertArrayContainsString('mbox-small-left', mSideBox.makeData{position = 'LEFT'}.classes)
end

function suite:testDataClass()
	suite:assertArrayContainsString('some-class', mSideBox.makeData{class = 'some-class'}.classes)
end

function suite:testDataStyle()
	suite:assertEquals('foo:bar', mSideBox.makeData{style = 'foo:bar'}.style)
end

function suite:testDataTextstyle()
	suite:assertEquals('foo:bar', mSideBox.makeData{textstyle = 'foo:bar'}.textstyle)
end

function suite:testDataAbove()
	suite:assertEquals('some above text', mSideBox.makeData{above = 'some above text'}.above)
end

function suite:testDataAbovestyle()
	suite:assertEquals('foo:bar', mSideBox.makeData{abovestyle = 'foo:bar'}.abovestyle)
end

function suite:testDataText()
	suite:assertEquals('some text', mSideBox.makeData{text = 'some text'}.text)
end

function suite:testDataImage()
	suite:assertEquals('[[File:Example.png|thumb]]', mSideBox.makeData{image = '[[File:Example.png|thumb]]'}.image)
end

function suite:testDataImageright()
	suite:assertEquals('[[File:Example.png|thumb]]', mSideBox.makeData{imageright = '[[File:Example.png|thumb]]'}.imageright)
end

function suite:testDataBelow()
	suite:assertEquals('some below text', mSideBox.makeData{below = 'some below text'}.below)
end

--------------------------------------------------------------------------------
-- Test renderSidebox
--------------------------------------------------------------------------------

function suite.cleanPattern(s)
	-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
	s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
	return s
end
 
function suite.makePattern(tag, attr, s1, s2)
	-- For making a pattern to use with assertStringContains inside a specific attribute and HTML tag.
	s1 = suite.cleanPattern(s1)
	if s2 then
		s2 = suite.cleanPattern(s2)
	end
	local ssep = ''
	if s2 then
		ssep = '%s*:%s*'
	end
	s2 = s2 or ''
	return string.format(
		'<%s[^>]-%s="[^">]-%s%s%s[^">]-">',
		tag,
		attr,
		s1,
		ssep,
		s2
	)
end

return suite