<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://moasspedia.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AList%2Ftestcases</id>
	<title>Module:List/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://moasspedia.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AList%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://moasspedia.org/w/index.php?title=Module:List/testcases&amp;action=history"/>
	<updated>2026-04-13T20:38:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://moasspedia.org/w/index.php?title=Module:List/testcases&amp;diff=2280&amp;oldid=prev</id>
		<title>Wikipedia&gt;Petr Matas: adding testTrimming()</title>
		<link rel="alternate" type="text/html" href="https://moasspedia.org/w/index.php?title=Module:List/testcases&amp;diff=2280&amp;oldid=prev"/>
		<updated>2019-09-12T07:22:17Z</updated>

		<summary type="html">&lt;p&gt;adding testTrimming()&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Unit tests for [[Module:List]]. Click talk page to run tests.&lt;br /&gt;
&lt;br /&gt;
local mList = require(&amp;#039;Module:List/sandbox&amp;#039;)&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Default values&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local d = {}&lt;br /&gt;
&lt;br /&gt;
-- Function names&lt;br /&gt;
d.bulletedFunc = &amp;#039;bulleted&amp;#039;&lt;br /&gt;
d.unbulletedFunc = &amp;#039;unbulleted&amp;#039;&lt;br /&gt;
d.horizontalFunc = &amp;#039;horizontal&amp;#039;&lt;br /&gt;
d.orderedFunc = &amp;#039;ordered&amp;#039;&lt;br /&gt;
d.horizontalOrderedFunc = &amp;#039;horizontal_ordered&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- List items&lt;br /&gt;
d.item1 = &amp;#039;Foo&amp;#039;&lt;br /&gt;
d.item2 = &amp;#039;Bar&amp;#039;&lt;br /&gt;
d.itemNested = &amp;#039;\n*Subitem 1\n*Subitem 2&amp;#039;  -- The leading LF must not be trimmed from such item&lt;br /&gt;
&lt;br /&gt;
-- Styles and classes&lt;br /&gt;
d.arbitraryStyle = &amp;#039;text-align: right&amp;#039;&lt;br /&gt;
d.arbitraryValue = &amp;#039;some value&amp;#039;&lt;br /&gt;
d.arbitraryClass = &amp;#039;someclass&amp;#039;&lt;br /&gt;
d.arbitraryClass2 = &amp;#039;someclass2&amp;#039;&lt;br /&gt;
d.hlist = &amp;#039;hlist hlist-separated&amp;#039;&lt;br /&gt;
d.plainlist = &amp;#039;plainlist&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Parameter names&lt;br /&gt;
d.itemStyleParam1 = &amp;#039;item1_style&amp;#039;&lt;br /&gt;
d.itemValueParam1 = &amp;#039;item1_value&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Attributes&lt;br /&gt;
d.arbitraryStart = &amp;#039;5&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
d.trackingCategory = &amp;#039;[[Category:List templates with deprecated parameters]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:assertArrayContainsString(expected, t)&lt;br /&gt;
	-- This only works on arrays that only contain strings.&lt;br /&gt;
	local sep = &amp;#039;|SEPARATOR|&amp;#039;&lt;br /&gt;
	local concatenated = sep .. table.concat(t, sep) .. sep&lt;br /&gt;
	self:assertStringContains(sep .. expected .. sep, concatenated, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test makeListData&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testDataBlank()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {})&lt;br /&gt;
	self:assertEquals(&amp;#039;table&amp;#039;, type(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataOneItem()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1})&lt;br /&gt;
	self:assertEquals(d.item1, data.items[1].content)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataTwoItems()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1, d.item2})&lt;br /&gt;
	self:assertEquals(d.item1, data.items[1].content)&lt;br /&gt;
	self:assertEquals(d.item2, data.items[2].content)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataItemStyle1()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1, [d.itemStyleParam1] = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, data.items[1].style)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataItemStyle1NoContent()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {[d.itemStyleParam1] = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(nil, data.items[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataItemValue1()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1, [d.itemValueParam1] = d.arbitraryValue})&lt;br /&gt;
	self:assertEquals(d.arbitraryValue, data.items[1].value)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataItemValue1NoContent()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {[d.itemValueParam1] = d.arbitraryValue})&lt;br /&gt;
	self:assertEquals(nil, data.items[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataItemStyle()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {item_style = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, data.itemStyle)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataListStyle()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {list_style = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, data.listStyle)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataStart()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {start = d.arbitraryStart})&lt;br /&gt;
	self:assertEquals(d.arbitraryStart, data.start)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataHorizontalNumberingFix()&lt;br /&gt;
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = &amp;#039;5&amp;#039;})&lt;br /&gt;
	self:assertEquals(&amp;#039;5&amp;#039;, data.start)&lt;br /&gt;
	self:assertEquals(&amp;#039;listitem 4&amp;#039;, data.counterReset)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataHorizontalNumberingFixBadInput()&lt;br /&gt;
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = &amp;#039;foo&amp;#039;})&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, data.start)&lt;br /&gt;
	self:assertEquals(nil, data.counterReset)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataHorizontalNumberingFixNumberInput()&lt;br /&gt;
	local data = mList.makeListData(d.horizontalOrderedFunc, {start = 6})&lt;br /&gt;
	self:assertEquals(6, data.start)&lt;br /&gt;
	self:assertEquals(&amp;#039;listitem 5&amp;#039;, data.counterReset)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataListTag()&lt;br /&gt;
	self:assertEquals(&amp;#039;ul&amp;#039;, mList.makeListData(d.bulletedFunc, {}).listTag)&lt;br /&gt;
	self:assertEquals(&amp;#039;ul&amp;#039;, mList.makeListData(d.horizontalFunc, {}).listTag)&lt;br /&gt;
	self:assertEquals(&amp;#039;ul&amp;#039;, mList.makeListData(d.unbulletedFunc, {}).listTag)&lt;br /&gt;
	self:assertEquals(&amp;#039;ol&amp;#039;, mList.makeListData(d.orderedFunc, {}).listTag)&lt;br /&gt;
	self:assertEquals(&amp;#039;ol&amp;#039;, mList.makeListData(d.horizontalOrderedFunc, {}).listTag)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataListStyleType()&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, mList.makeListData(d.orderedFunc, {list_style_type = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, mList.makeListData(d.horizontalOrderedFunc, {list_style_type = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {list_style_type = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataListStyleTypeAltSyntax()&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, mList.makeListData(d.orderedFunc, {[&amp;#039;list-style-type&amp;#039;] = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, mList.makeListData(d.horizontalOrderedFunc, {[&amp;#039;list-style-type&amp;#039;] = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {[&amp;#039;list-style-type&amp;#039;] = &amp;#039;foo&amp;#039;}).listStyleType)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataValidType()&lt;br /&gt;
	self:assertEquals(&amp;#039;1&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;1&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(&amp;#039;A&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;A&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(&amp;#039;a&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;a&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(&amp;#039;I&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;I&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(&amp;#039;i&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;i&amp;#039;}).type)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataInvalidType()&lt;br /&gt;
	local data = mList.makeListData(d.orderedFunc, {type = &amp;#039;foo&amp;#039;})&lt;br /&gt;
	self:assertEquals(nil, data.type)&lt;br /&gt;
	self:assertEquals(&amp;#039;foo&amp;#039;, data.listStyleType)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataTypeByListType()&lt;br /&gt;
	self:assertEquals(&amp;#039;1&amp;#039;, mList.makeListData(d.orderedFunc, {type = &amp;#039;1&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(&amp;#039;1&amp;#039;, mList.makeListData(d.horizontalOrderedFunc, {type = &amp;#039;1&amp;#039;}).type)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {type = &amp;#039;1&amp;#039;}).type)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataIndent()&lt;br /&gt;
	self:assertEquals(&amp;#039;1.6em&amp;#039;, mList.makeListData(d.horizontalFunc, {indent = 1}).marginLeft)&lt;br /&gt;
	self:assertEquals(&amp;#039;3.2em&amp;#039;, mList.makeListData(d.horizontalFunc, {indent = 2}).marginLeft)&lt;br /&gt;
	self:assertEquals(&amp;#039;1.6em&amp;#039;, mList.makeListData(d.horizontalFunc, {indent = &amp;#039;1&amp;#039;}).marginLeft)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.horizontalFunc, {}).marginLeft)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataIndentByListType()&lt;br /&gt;
	self:assertEquals(&amp;#039;1.6em&amp;#039;, mList.makeListData(d.horizontalFunc, {indent = 1}).marginLeft)&lt;br /&gt;
	self:assertEquals(&amp;#039;1.6em&amp;#039;, mList.makeListData(d.horizontalOrderedFunc, {indent = 1}).marginLeft)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.bulletedFunc, {indent = 1}).marginLeft)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.unbulletedFunc, {indent = 1}).marginLeft)&lt;br /&gt;
	self:assertEquals(nil, mList.makeListData(d.orderedFunc, {indent = 1}).marginLeft)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataStyle()&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, mList.makeListData(d.horizontalFunc, {style = d.arbitraryStyle}).style)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataClass()&lt;br /&gt;
	self:assertArrayContainsString(d.arbitraryClass, mList.makeListData(d.bulletedFunc, {class = d.arbitraryClass}).classes)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDataListTypeClasses()&lt;br /&gt;
	self:assertArrayContainsString(d.hlist, mList.makeListData(d.horizontalFunc, {}).classes)&lt;br /&gt;
	self:assertArrayContainsString(d.hlist, mList.makeListData(d.horizontalOrderedFunc, {}).classes)&lt;br /&gt;
	self:assertArrayContainsString(d.plainlist, mList.makeListData(d.unbulletedFunc, {}).classes)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test deprecated parameters&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testDeprecatedItemStyle1()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1, item_style1 = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, data.items[1].style)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDeprecatedItemStyle1NoContent()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {item_style1 = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(nil, data.items[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDeprecatedValueStyle1()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {d.item1, item_value1 = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(d.arbitraryStyle, data.items[1].value)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testDeprecatedValueStyle1NoContent()&lt;br /&gt;
	local data = mList.makeListData(d.bulletedFunc, {item_value1 = d.arbitraryStyle})&lt;br /&gt;
	self:assertEquals(nil, data.items[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test tracking categories&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testTrackingCategoriesItem1Style()&lt;br /&gt;
	local result = mList.renderTrackingCategories{item1_style = d.arbitraryStyle}&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTrackingCategoriesItemStyle1()&lt;br /&gt;
	local result = mList.renderTrackingCategories{item_style1 = d.arbitraryStyle}&lt;br /&gt;
	self:assertEquals(d.trackingCategory, result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTrackingCategoriesItemStyle4()&lt;br /&gt;
	local result = mList.renderTrackingCategories{item_style4 = d.arbitraryStyle}&lt;br /&gt;
	self:assertEquals(d.trackingCategory, result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTrackingCategoriesItemValue1()&lt;br /&gt;
	local result = mList.renderTrackingCategories{item_value1 = d.arbitraryValue}&lt;br /&gt;
	self:assertEquals(d.trackingCategory, result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Test renderList&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite.makeDataWithOneItem(args)&lt;br /&gt;
	local data = {}&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	data.items[1] = {content = d.item1}&lt;br /&gt;
	for k, v in pairs(args or {}) do&lt;br /&gt;
		data[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite.cleanPattern(s)&lt;br /&gt;
	-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
	s = s:gsub(&amp;#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite.makePattern(tag, attr, s1, s2)&lt;br /&gt;
	-- For making a pattern to use with assertStringContains inside a specific attribute and HTML tag.&lt;br /&gt;
	s1 = suite.cleanPattern(s1)&lt;br /&gt;
	if s2 then&lt;br /&gt;
		s2 = suite.cleanPattern(s2)&lt;br /&gt;
	end&lt;br /&gt;
	local ssep = &amp;#039;&amp;#039;&lt;br /&gt;
	if s2 then&lt;br /&gt;
		ssep = &amp;#039;%s*:%s*&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	s2 = s2 or &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;&amp;lt;%s[^&amp;gt;]-%s=&amp;quot;[^&amp;quot;&amp;gt;]-%s%s%s[^&amp;quot;&amp;gt;]-&amp;quot;[^&amp;gt;]-&amp;gt;&amp;#039;,&lt;br /&gt;
		tag,&lt;br /&gt;
		attr,&lt;br /&gt;
		s1,&lt;br /&gt;
		ssep,&lt;br /&gt;
		s2&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderNoItems()&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, mList.renderList{})&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, mList.renderList{items = {}})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderOneItem()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	self:assertStringContains(&amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ul&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ul&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;, mList.renderList(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderTwoItems()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	data.items[2] = {content = d.item2}&lt;br /&gt;
	self:assertStringContains(&amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ul&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item2) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ul&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;, mList.renderList(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderOneClass()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	data.classes[1] = d.arbitraryClass&lt;br /&gt;
	self:assertStringContains(&amp;#039;&amp;lt;div class=&amp;quot;&amp;#039; .. d.arbitraryClass .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;, mList.renderList(data), true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderTwoClasses()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	data.classes[1] = d.arbitraryClass&lt;br /&gt;
	data.classes[2] = d.arbitraryClass2&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;class&amp;#039;, d.arbitraryClass .. &amp;#039; &amp;#039; .. d.arbitraryClass2)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderMarginLeft()&lt;br /&gt;
	local data = self.makeDataWithOneItem{marginLeft = &amp;#039;5px&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;margin-left&amp;#039;, &amp;#039;5px&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStyle()&lt;br /&gt;
	local data = self.makeDataWithOneItem{style = &amp;#039;foo:bar&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;foo:bar&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderListTag()&lt;br /&gt;
	local data = self.makeDataWithOneItem{listTag = &amp;#039;ol&amp;#039;}&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;div&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&amp;#039; .. d.item1 .. &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;, mList.renderList(data))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStart()&lt;br /&gt;
	local data = self.makeDataWithOneItem{start = &amp;#039;7&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;start&amp;#039;, &amp;#039;7&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderStartNumber()&lt;br /&gt;
	local data = self.makeDataWithOneItem{start = 7}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;start&amp;#039;, &amp;#039;7&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderType()&lt;br /&gt;
	local data = self.makeDataWithOneItem{type = &amp;#039;i&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;type&amp;#039;, &amp;#039;i&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderCounterReset()&lt;br /&gt;
	local data = self.makeDataWithOneItem{counterReset = &amp;#039;item 3&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;counter-reset&amp;#039;, &amp;#039;item 3&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderListStyleType()&lt;br /&gt;
	local data = self.makeDataWithOneItem{listStyleType = &amp;#039;roman&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;list-style-type&amp;#039;, &amp;#039;roman&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderListStyle()&lt;br /&gt;
	local data = self.makeDataWithOneItem{listStyle = &amp;#039;bar:baz&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;ul&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;bar:baz&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderItemStyle()&lt;br /&gt;
	local data = self.makeDataWithOneItem{itemStyle = &amp;#039;qux:foo&amp;#039;}&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;li&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;qux:foo&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderItemStyleTwoItems()&lt;br /&gt;
	local data = self.makeDataWithOneItem{itemStyle = &amp;#039;bar:foo&amp;#039;}&lt;br /&gt;
	data.items[2] = {content = d.item2}&lt;br /&gt;
	local tagPattern = self.makePattern(&amp;#039;li&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;bar:foo&amp;#039;)&lt;br /&gt;
	local pattern = tagPattern .. d.item1 .. &amp;#039;&amp;lt;/li&amp;gt;&amp;#039; .. tagPattern .. d.item2&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderItem1Style()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	data.items[1].style = &amp;#039;baz:foo&amp;#039;&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;li&amp;#039;, &amp;#039;style&amp;#039;, &amp;#039;baz:foo&amp;#039;)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testRenderItem1Value()&lt;br /&gt;
	local data = self.makeDataWithOneItem()&lt;br /&gt;
	data.items[1].value = d.arbitraryValue&lt;br /&gt;
	local pattern = self.makePattern(&amp;#039;li&amp;#039;, &amp;#039;value&amp;#039;, d.arbitraryValue)&lt;br /&gt;
	self:assertStringContains(pattern, mList.renderList(data), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Whole-module tests&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:testBulleted()&lt;br /&gt;
	local actual = mList[d.bulletedFunc]{d.item1}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ul&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ul&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testUnbulleted()&lt;br /&gt;
	local actual = mList[d.unbulletedFunc]{d.item1}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;#039; .. self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;class&amp;#039;, &amp;#039;plainlist&amp;#039;) .. &amp;#039;%s*&amp;lt;ul&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ul&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testHorizontal()&lt;br /&gt;
	local actual = mList[d.horizontalFunc]{d.item1}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;#039; .. self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;class&amp;#039;, &amp;#039;hlist&amp;#039;) .. &amp;#039;%s*&amp;lt;ul&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ul&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testOrdered()&lt;br /&gt;
	local actual = mList[d.orderedFunc]{d.item1}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ol&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ol&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testHorizontalOrdered()&lt;br /&gt;
	local actual = mList[d.horizontalOrderedFunc]{d.item1}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;#039; .. self.makePattern(&amp;#039;div&amp;#039;, &amp;#039;class&amp;#039;, &amp;#039;hlist&amp;#039;) .. &amp;#039;%s*&amp;lt;ol&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.item1) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ol&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testTrimming()&lt;br /&gt;
	local actual = mList[d.orderedFunc]{&amp;#039;\n Foo \n&amp;#039;}&lt;br /&gt;
	-- Now many templates expect the arguments to be trimmed&lt;br /&gt;
	local pattern = &amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ol&amp;gt;%s*&amp;lt;li&amp;gt;&amp;#039; .. self.cleanPattern(&amp;#039;Foo&amp;#039;) .. &amp;#039;&amp;lt;/li&amp;gt;%s*&amp;lt;/ol&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:testNested()&lt;br /&gt;
	local actual = mList[d.orderedFunc]{d.itemNested}&lt;br /&gt;
	local pattern = &amp;#039;^&amp;lt;div&amp;gt;%s*&amp;lt;ol&amp;gt;%s*&amp;lt;li&amp;gt;%s*&amp;#039; .. self.cleanPattern(d.itemNested) .. &amp;#039;%s*&amp;lt;/li&amp;gt;%s*&amp;lt;/ol&amp;gt;%s*&amp;lt;/div&amp;gt;$&amp;#039;&lt;br /&gt;
	self:assertStringContains(pattern, actual, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>Wikipedia&gt;Petr Matas</name></author>
	</entry>
</feed>