Jump to content

Module:List/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 09:27, 24 May 2014 (start the renderList tests). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
-- Unit tests for [[Module:List]]. Click talk page to run tests.

local mList = require('Module:List/sandbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

--------------------------------------------------------------------------------
-- Default values
--------------------------------------------------------------------------------

local d = {}

-- Function names
d.bulletedFunc = 'bulleted'
d.unbulletedFunc = 'unbulleted'
d.horizontalFunc = 'horizontal'
d.orderedFunc = 'ordered'
d.horizontalOrderedFunc = 'horizontal_ordered'

-- List items
d.item1 = 'Foo'
d.item2 = 'Bar'

-- Styles and classes
d.arbitraryStyle = 'text-align: right'
d.arbitraryValue = 'some value'
d.arbitraryClass = 'someclass'
d.hlist = 'hlist'
d.plainlist = 'plainlist'

-- Parameter names
d.itemStyleParam1 = 'item_style1'
d.itemValueParam1 = 'item_value1'

-- Attributes
d.arbitraryStart = '5'

--------------------------------------------------------------------------------
-- 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

--------------------------------------------------------------------------------
-- Test makeListData
--------------------------------------------------------------------------------

function suite:testDataBlank()
	local data = mList.makeListData(d.bulletedFunc, {})
	self:assertEquals('table', type(data))
end

function suite:testDataOneItem()
	local data = mList.makeListData(d.bulletedFunc, {d.item1})
	self:assertEquals(d.item1, data.items[1].content)
end

function suite:testDataTwoItems()
	local data = mList.makeListData(d.bulletedFunc, {d.item1, d.item2})
	self:assertEquals(d.item1, data.items[1].content)
	self:assertEquals(d.item2, data.items[2].content)
end

function suite:testDataItemStyle1()
	local data = mList.makeListData(d.bulletedFunc, {d.item1, [d.itemStyleParam1] = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.items[1].style)
end

function suite:testDataItemStyle1NoContent()
	local data = mList.makeListData(d.bulletedFunc, {[d.itemStyleParam1] = d.arbitraryStyle})
	self:assertEquals(nil, data.items[1])
end

function suite:testDataItemValue1()
	local data = mList.makeListData(d.bulletedFunc, {d.item1, [d.itemValueParam1] = d.arbitraryValue})
	self:assertEquals(d.arbitraryValue, data.items[1].value)
end

function suite:testDataItemValue1NoContent()
	local data = mList.makeListData(d.bulletedFunc, {[d.itemValueParam1] = d.arbitraryValue})
	self:assertEquals(nil, data.items[1])
end

function suite:testDataItemStyle()
	local data = mList.makeListData(d.bulletedFunc, {item_style = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.itemStyle)
end

function suite:testDataListStyle()
	local data = mList.makeListData(d.bulletedFunc, {list_style = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.listStyle)
end

function suite:testDataStart()
	local data = mList.makeListData(d.bulletedFunc, {start = d.arbitraryStart})
	self:assertEquals(d.arbitraryStart, data.start)
end

function suite:testDataHorizontalNumberingFix()
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = '5'})
	self:assertEquals('5', data.start)
	self:assertEquals('listitem 4', data.counterReset)
end

function suite:testDataHorizontalNumberingFixBadInput()
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = 'foo'})
	self:assertEquals('foo', data.start)
	self:assertEquals(nil, data.counterReset)
end

function suite:testDataHorizontalNumberingFixNumberInput()
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = 6})
	self:assertEquals(6, data.start)
	self:assertEquals('listitem 5', data.counterReset)
end

function suite:testDataListTag()
	self:assertEquals('ul', mList.makeListData(d.bulletedFunc, {}).listTag)
	self:assertEquals('ul', mList.makeListData(d.horizontalFunc, {}).listTag)
	self:assertEquals('ul', mList.makeListData(d.unbulletedFunc, {}).listTag)
	self:assertEquals('ol', mList.makeListData(d.orderedFunc, {}).listTag)
	self:assertEquals('ol', mList.makeListData(d.horizontalOrderedFunc, {}).listTag)
end

function suite:testDataListStyleType()
	self:assertEquals('foo', mList.makeListData(d.orderedFunc, {list_style_type = 'foo'}).listStyleType)
	self:assertEquals('foo', mList.makeListData(d.horizontalOrderedFunc, {list_style_type = 'foo'}).listStyleType)
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {list_style_type = 'foo'}).listStyleType)
end

function suite:testDataListStyleTypeAltSyntax()
	self:assertEquals('foo', mList.makeListData(d.orderedFunc, {['list-style-type'] = 'foo'}).listStyleType)
	self:assertEquals('foo', mList.makeListData(d.horizontalOrderedFunc, {['list-style-type'] = 'foo'}).listStyleType)
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {['list-style-type'] = 'foo'}).listStyleType)
end

function suite:testDataValidType()
	self:assertEquals('1', mList.makeListData(d.orderedFunc, {type = '1'}).type)
	self:assertEquals('A', mList.makeListData(d.orderedFunc, {type = 'A'}).type)
	self:assertEquals('a', mList.makeListData(d.orderedFunc, {type = 'a'}).type)
	self:assertEquals('I', mList.makeListData(d.orderedFunc, {type = 'I'}).type)
	self:assertEquals('i', mList.makeListData(d.orderedFunc, {type = 'i'}).type)
end

function suite:testDataInvalidType()
	local data = mList.makeListData(d.orderedFunc, {type = 'foo'})
	self:assertEquals(nil, data.type)
	self:assertEquals('foo', data.listStyleType)
end

function suite:testDataTypeByListType()
	self:assertEquals('1', mList.makeListData(d.orderedFunc, {type = '1'}).type)
	self:assertEquals('1', mList.makeListData(d.horizontalOrderedFunc, {type = '1'}).type)
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {type = '1'}).type)
end

function suite:testDataIndent()
	self:assertEquals('1.6em', mList.makeListData(d.horizontalFunc, {indent = 1}).marginLeft)
	self:assertEquals('3.2em', mList.makeListData(d.horizontalFunc, {indent = 2}).marginLeft)
	self:assertEquals('1.6em', mList.makeListData(d.horizontalFunc, {indent = '1'}).marginLeft)
	self:assertEquals(nil, mList.makeListData(d.horizontalFunc, {}).marginLeft)
end

function suite:testDataIndentByListType()
	self:assertEquals('1.6em', mList.makeListData(d.horizontalFunc, {indent = 1}).marginLeft)
	self:assertEquals('1.6em', mList.makeListData(d.horizontalOrderedFunc, {indent = 1}).marginLeft)
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {indent = 1}).marginLeft)
	self:assertEquals(nil, mList.makeListData(d.unbulletedFunc, {indent = 1}).marginLeft)
	self:assertEquals(nil, mList.makeListData(d.orderedFunc, {indent = 1}).marginLeft)
end

function suite:testDataStyle()
	self:assertEquals(d.arbitraryStyle, mList.makeListData(d.horizontalFunc, {style = d.arbitraryStyle}).style)
end

function suite:testDataClass()
	self:assertArrayContainsString(d.arbitraryClass, mList.makeListData(d.bulletedFunc, {class = d.arbitraryClass}).classes)
end

function suite:testDataListTypeClasses()
	self:assertArrayContainsString(d.hlist, mList.makeListData(d.horizontalFunc, {}).classes)
	self:assertArrayContainsString(d.hlist, mList.makeListData(d.horizontalOrderedFunc, {}).classes)
	self:assertArrayContainsString(d.plainlist, mList.makeListData(d.unbulletedFunc, {}).classes)
end

--------------------------------------------------------------------------------
-- Test deprecated parameters
--------------------------------------------------------------------------------

function suite:testDeprecatedLiStyle()
	local data = mList.makeListData(d.bulletedFunc, {li_style = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.itemStyle)
end

function suite:testDeprecatedLiStyle1()
	local data = mList.makeListData(d.bulletedFunc, {d.item1, li_style1 = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.items[1].style)
end

function suite:testDeprecatedLiStyle1NoContent()
	local data = mList.makeListData(d.bulletedFunc, {li_style1 = d.arbitraryStyle})
	self:assertEquals(nil, data.items[1])
end

function suite:testDeprecatedUlStyle()
	local data = mList.makeListData(d.bulletedFunc, {ul_style = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.listStyle)
end

function suite:testDeprecatedOlStyle()
	local data = mList.makeListData(d.bulletedFunc, {ol_style = d.arbitraryStyle})
	self:assertEquals(d.arbitraryStyle, data.listStyle)
end

--------------------------------------------------------------------------------
-- Test renderList
--------------------------------------------------------------------------------

function suite.makeDataWithOneItem(args)
	local data = {}
	data.classes = {}
	data.items = {}
	data.items[1] = {content = d.item1}
	for k, v in pairs(args or {}) do
		data[k] = v
	end
	return data
end

function suite:testRenderNoItems()
	self:assertEquals('', mList.renderList{})
end

function suite:testRenderOneItem()
	local data = suite.makeDataWithOneItem()
	self:assertEquals('<div><ul><li>' .. d.item1 .. '</li></ul></div>', mList.renderList(data))
end

return suite