<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AWDFormat%2Ftestcases</id>
	<title>Модуль:WDFormat/testcases - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AWDFormat%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:WDFormat/testcases&amp;action=history"/>
	<updated>2026-04-11T12:25:46Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:WDFormat/testcases&amp;diff=238721&amp;oldid=prev</id>
		<title>Karaby: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:WDFormat/testcases&amp;diff=238721&amp;oldid=prev"/>
		<updated>2025-07-27T15:38:08Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 15:38, 27 июля 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff:1.41:old-238720:rev-238721 --&gt;
&lt;/table&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:WDFormat/testcases&amp;diff=238720&amp;oldid=prev</id>
		<title>Буквица&gt;D6194c-1cc: Добавлены тесты на пути к полям</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:WDFormat/testcases&amp;diff=238720&amp;oldid=prev"/>
		<updated>2024-01-07T10:32:56Z</updated>

		<summary type="html">&lt;p&gt;Добавлены тесты на пути к полям&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local suite = require(&amp;#039;Модуль:ScribuntoUnit&amp;#039;):new()&lt;br /&gt;
local formatter = require(&amp;#039;Модуль:WDFormat&amp;#039;)&lt;br /&gt;
local f = formatter.f&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_oneField()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;name&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		name = { value = &amp;#039;Some name&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Some name&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_ensureEndsAndDelimiter()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		groups = {&lt;br /&gt;
			{&lt;br /&gt;
				{&lt;br /&gt;
					field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					ensureEnds = &amp;#039;:&amp;#039;,&lt;br /&gt;
					delimiter = &amp;#039; &amp;#039;,&lt;br /&gt;
					field = &amp;#039;subtitle&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;some name&amp;#039; },&lt;br /&gt;
		subtitle = { value = &amp;#039;some other text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Some name: some other text.&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_delimiter_function()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			groups = {&lt;br /&gt;
				{&lt;br /&gt;
					field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					delimiter = function()&lt;br /&gt;
						return &amp;#039;: &amp;#039;&lt;br /&gt;
					end,&lt;br /&gt;
					field = &amp;#039;subtitle&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;some name&amp;#039; },&lt;br /&gt;
		subtitle = { value = &amp;#039;some other text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Some name: some other text.&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_capitalize()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
				delimiter = &amp;#039; &amp;#039;,&lt;br /&gt;
				field = &amp;#039;subtitle&amp;#039;,&lt;br /&gt;
				capitalize = true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;some name&amp;#039; },&lt;br /&gt;
		subtitle = { value = &amp;#039;some other text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;some name. Some other text.&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_wikilink()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				format = { f.wikilink },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { entity = &amp;#039;Q9377&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;[[Почка]]&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_link()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				urlField = &amp;#039;url&amp;#039;,&lt;br /&gt;
				format = { f.link },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;Example&amp;#039; },&lt;br /&gt;
		url = { value = &amp;#039;http://example.com&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;[http://example.com Example]&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_wikisource()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				urlField = &amp;#039;url&amp;#039;,&lt;br /&gt;
				format = { f.wikisource },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { entity = &amp;#039;Q19147272&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;[[s:ГОСТ Р 7.0.5—2008|ГОСТ Р 7.0.5—2008]]&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_linkOrder()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				wikilink = &amp;#039;ГОСТ&amp;#039;,&lt;br /&gt;
				urlField = &amp;#039;url&amp;#039;,&lt;br /&gt;
				format = { f.wikisource, f.wikilink, f.link },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { entity = &amp;#039;Q19147272&amp;#039; },&lt;br /&gt;
		url = { value = &amp;#039;http://example.com&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;[[s:ГОСТ Р 7.0.5—2008|ГОСТ Р 7.0.5—2008]]&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_person()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;author1&amp;#039;,&lt;br /&gt;
				format = { f.person },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
				field = &amp;#039;author1&amp;#039;,&lt;br /&gt;
				format = { f.personReversed },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
				field = &amp;#039;author2&amp;#039;,&lt;br /&gt;
				format = { f.person },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
				field = &amp;#039;author2&amp;#039;,&lt;br /&gt;
				format = { f.personReversedNoComma },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		author1 = {&lt;br /&gt;
			value = &amp;#039;Name Patronym Family&amp;#039;,&lt;br /&gt;
			components = {&lt;br /&gt;
				givenName = { value = &amp;#039;Name&amp;#039; },&lt;br /&gt;
				familyName = { value = &amp;#039;Family&amp;#039; },&lt;br /&gt;
				ancestorName = { value = &amp;#039;Patronym&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		author2 = {&lt;br /&gt;
			value = &amp;#039;Name Family&amp;#039;,&lt;br /&gt;
			components = {&lt;br /&gt;
				givenName = { value = &amp;#039;Name&amp;#039; },&lt;br /&gt;
				familyName = { value = &amp;#039;Family&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;N.&amp;amp;nbsp;P.&amp;amp;nbsp;Family; Family,&amp;amp;nbsp;N.&amp;amp;nbsp;P.; N.&amp;amp;nbsp;Family; Family&amp;amp;nbsp;N.&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_person_multipleNames()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;author&amp;#039;,&lt;br /&gt;
				format = { f.person },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		author = {&lt;br /&gt;
			value = &amp;#039;FirstName SecondName ThirdName Patronym Family&amp;#039;,&lt;br /&gt;
			components = {&lt;br /&gt;
				givenName = { { value = &amp;#039;FirstName&amp;#039; }, { value = &amp;#039;SecondName&amp;#039; }, { value = &amp;#039;ThirdName&amp;#039; } },&lt;br /&gt;
				familyName = { value = &amp;#039;Family&amp;#039; },&lt;br /&gt;
				ancestorName = { value = &amp;#039;Patronym&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;F.&amp;amp;nbsp;S.&amp;amp;nbsp;T.&amp;amp;nbsp;P.&amp;amp;nbsp;Family&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_rootTag()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
			classes = {&lt;br /&gt;
				&amp;#039;class1&amp;#039;,&lt;br /&gt;
				&amp;#039;class2&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			attr = {&lt;br /&gt;
				id = &amp;#039;test&amp;#039;,&lt;br /&gt;
				style = &amp;#039;font-weight:bold;&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;Text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span class=&amp;quot;class1 class2&amp;quot; id=&amp;quot;test&amp;quot; style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;Text&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_tableTag()&lt;br /&gt;
	local profileGroup = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;tr&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;th&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			field = &amp;#039;title&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;td&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			field = &amp;#039;value&amp;#039;,&lt;br /&gt;
			capitalize = true,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;table&amp;#039;,&lt;br /&gt;
			classes = { &amp;#039;infobox&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
		profileGroup,&lt;br /&gt;
		profileGroup,&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;caption&amp;#039; },&lt;br /&gt;
		value = { value = &amp;#039;text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;table class=&amp;quot;infobox&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Caption&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Text&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Caption&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Text&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_innerTags()&lt;br /&gt;
	local profileGroup = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;tbody&amp;#039;,&lt;br /&gt;
			attr = { style=&amp;#039;background-color: #ddd;&amp;#039; },&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;tr&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;th&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			field = &amp;#039;title&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;td&amp;#039;,&lt;br /&gt;
				tag = {&lt;br /&gt;
					name = &amp;#039;div&amp;#039;,&lt;br /&gt;
					attr = { style=&amp;#039;font-size: 10pt;&amp;#039; }&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			field = &amp;#039;value&amp;#039;,&lt;br /&gt;
			capitalize = true,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;div&amp;#039;,&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;table&amp;#039;,&lt;br /&gt;
				classes = { &amp;#039;infobox&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		profileGroup,&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;caption&amp;#039; },&lt;br /&gt;
		value = { value = &amp;#039;text&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;div&amp;gt;&amp;lt;table class=&amp;quot;infobox&amp;quot;&amp;gt;&amp;lt;tbody style=&amp;quot;background-color: #ddd;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Caption&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;Text&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_recurseGroups()&lt;br /&gt;
	local profileGroup = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;tr&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;th&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			field = &amp;#039;title&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			tag = {&lt;br /&gt;
				name = &amp;#039;td&amp;#039;,&lt;br /&gt;
				tag = {&lt;br /&gt;
					name = &amp;#039;ul&amp;#039;&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				tag = {&lt;br /&gt;
					name = &amp;#039;li&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					tag = { name = &amp;#039;b&amp;#039; },&lt;br /&gt;
					field = &amp;#039;name1&amp;#039;,&lt;br /&gt;
					capitalize = false,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					ensureEnds = &amp;#039;:&amp;#039;,&lt;br /&gt;
					delimiter = &amp;#039; &amp;#039;,&lt;br /&gt;
					field = &amp;#039;value1&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				tag = {&lt;br /&gt;
					name = &amp;#039;li&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					tag = { name = &amp;#039;b&amp;#039; },&lt;br /&gt;
					field = &amp;#039;name2&amp;#039;,&lt;br /&gt;
					capitalize = false,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					ensureEnds = &amp;#039;:&amp;#039;,&lt;br /&gt;
					delimiter = &amp;#039; &amp;#039;,&lt;br /&gt;
					field = &amp;#039;value2&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;table&amp;#039;,&lt;br /&gt;
			classes = { &amp;#039;infobox&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
		profileGroup,&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;caption&amp;#039; },&lt;br /&gt;
		name1 = { value = &amp;#039;title1&amp;#039; },&lt;br /&gt;
		value1 = { value = &amp;#039;text1&amp;#039; },&lt;br /&gt;
		name2 = { value = &amp;#039;title2&amp;#039; },&lt;br /&gt;
		value2 = { value = &amp;#039;text2&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;table class=&amp;quot;infobox&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Caption&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;title1&amp;lt;/b&amp;gt;: text1&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;title2&amp;lt;/b&amp;gt;: text2&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_array()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				itemsDelimiter = &amp;#039;/&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
				field = { &amp;#039;title&amp;#039;, 2 },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { { value = 1 }, { value = 2 }, { value = 3 } },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;1/2/3; 2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_date()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = { &amp;#039;date&amp;#039;, sub=&amp;#039;year&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;/&amp;#039;,&lt;br /&gt;
				field = { &amp;#039;date&amp;#039;, sub=&amp;#039;month&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;/&amp;#039;,&lt;br /&gt;
				field = { &amp;#039;date&amp;#039;, sub=&amp;#039;day&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = { &amp;#039;date&amp;#039; },&lt;br /&gt;
				format = { f.date },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		date = { value = { year=2022, month=12, day=4, timestamp=&amp;#039;2022-12-04&amp;#039; } },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source, &amp;#039;en&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;2022/12/4; 4 December 2022&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_groups_delimiter()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;1&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			delimiter = &amp;#039;; &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;2&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, {})&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;1; 2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_prefixAndSuffix()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;table&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			prefix = &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				prefix = &amp;#039;&amp;lt;td&amp;gt;&amp;#039;,&lt;br /&gt;
				field = { &amp;#039;title&amp;#039; },&lt;br /&gt;
				suffix = &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			suffix = &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { value = &amp;#039;Do not ever do like this! It could break ensureEnds! Use tag instead.&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Do not ever do like this! It could break ensureEnds! Use tag instead.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_arrayCapitalize()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				itemsDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		title = { { value=&amp;#039;first&amp;#039; }, { value=&amp;#039;second&amp;#039; }, { value=&amp;#039;third&amp;#039; } },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;First, second, third&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_arrayForceCapitalize()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;empty&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				itemsDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
				capitalize = true,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		empty = { value = &amp;#039;&amp;#039; },&lt;br /&gt;
		title = { { value=&amp;#039;first&amp;#039; }, { value=&amp;#039;second&amp;#039; }, { value=&amp;#039;third&amp;#039; } },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;First, second, third&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_squareBrackets()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;name&amp;#039;,&lt;br /&gt;
				format = { f.squareBrackets },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		name = { value = &amp;#039;Some name&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;&amp;amp;lsqb;Some name&amp;amp;rsqb;&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_conflicts()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflTrue1&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;n1&amp;#039;, &amp;#039;NoN1&amp;#039;, &amp;#039;NoN2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflTrue2&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;n1&amp;#039;, { &amp;#039;n3&amp;#039;, &amp;#039;noN2&amp;#039;, &amp;#039;noN3&amp;#039; }, &amp;#039;noN1&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflFalse1&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;noN1&amp;#039;, &amp;#039;noN2&amp;#039;, &amp;#039;noN3&amp;#039; },&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflFalse2&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;noN1&amp;#039;, { &amp;#039;n1&amp;#039;, &amp;#039;noN&amp;#039; }, &amp;#039;noN2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		n1 = { value = &amp;#039;n1&amp;#039; },&lt;br /&gt;
		n2 = { value = &amp;#039;n2&amp;#039; },&lt;br /&gt;
		n3 = { value = &amp;#039;n3&amp;#039; },&lt;br /&gt;
		n4 = { value = &amp;#039;n4&amp;#039; },&lt;br /&gt;
		n5 = { value = &amp;#039;n5&amp;#039; },&lt;br /&gt;
		conflTrue1 = { value = &amp;#039;conflTrue1&amp;#039; },&lt;br /&gt;
		conflTrue2 = { value = &amp;#039;conflTrue2&amp;#039; },&lt;br /&gt;
		conflFalse1 = { value = &amp;#039;conflFalse1&amp;#039; },&lt;br /&gt;
		conflFalse2 = { value = &amp;#039;conflFalse2&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;conflFalse1, conflFalse2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_depends()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depTrue1&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, &amp;#039;n3&amp;#039;, &amp;#039;n2&amp;#039; },&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depTrue2&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, { &amp;#039;n2&amp;#039;, &amp;#039;noN&amp;#039;, &amp;#039;noOtherN&amp;#039; }, &amp;#039;n2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depFalse1&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, &amp;#039;noN&amp;#039;, &amp;#039;n2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depFalse2&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, { &amp;#039;noN&amp;#039;, &amp;#039;noOtherN&amp;#039; }, &amp;#039;n2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		n1 = { value = &amp;#039;n1&amp;#039; },&lt;br /&gt;
		n2 = { value = &amp;#039;n2&amp;#039; },&lt;br /&gt;
		n3 = { value = &amp;#039;n3&amp;#039; },&lt;br /&gt;
		n4 = { value = &amp;#039;n4&amp;#039; },&lt;br /&gt;
		n5 = { value = &amp;#039;n5&amp;#039; },&lt;br /&gt;
		depTrue1 = { value = &amp;#039;depTrue1&amp;#039; },&lt;br /&gt;
		depTrue2 = { value = &amp;#039;depTrue2&amp;#039; },&lt;br /&gt;
		depFalse1 = { value = &amp;#039;depFalse1&amp;#039; },&lt;br /&gt;
		depFalse2 = { value = &amp;#039;depFalse2&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;depTrue1, depTrue2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_depends_recursive()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depTrue&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, { { &amp;#039;n3&amp;#039;, &amp;#039;n4&amp;#039; }, &amp;#039;noN&amp;#039;, &amp;#039;noOtherN&amp;#039; }, &amp;#039;n2&amp;#039; },&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;depFalse&amp;#039;,&lt;br /&gt;
				depends = { &amp;#039;n1&amp;#039;, { { &amp;#039;n3&amp;#039;, &amp;#039;noN&amp;#039; }, &amp;#039;noN&amp;#039;, &amp;#039;noOtherN&amp;#039; }, &amp;#039;n2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		n1 = { value = &amp;#039;n1&amp;#039; },&lt;br /&gt;
		n2 = { value = &amp;#039;n2&amp;#039; },&lt;br /&gt;
		n3 = { value = &amp;#039;n3&amp;#039; },&lt;br /&gt;
		n4 = { value = &amp;#039;n4&amp;#039; },&lt;br /&gt;
		n5 = { value = &amp;#039;n5&amp;#039; },&lt;br /&gt;
		depTrue = { value = &amp;#039;depTrue&amp;#039; },&lt;br /&gt;
		depFalse = { value = &amp;#039;depFalse&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;depTrue&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_conflicts_recursive()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			delimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflTrue&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;noN1&amp;#039;, { { &amp;#039;n3&amp;#039;, &amp;#039;noN3&amp;#039; }, &amp;#039;n1&amp;#039;, &amp;#039;n2&amp;#039; }, &amp;#039;noN2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;conflFalse&amp;#039;,&lt;br /&gt;
				conflicts = { &amp;#039;noN1&amp;#039;, { { &amp;#039;noN3&amp;#039;, &amp;#039;noN4&amp;#039; }, &amp;#039;n1&amp;#039;, &amp;#039;n2&amp;#039; }, &amp;#039;noN2&amp;#039; },&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		n1 = { value = &amp;#039;n1&amp;#039; },&lt;br /&gt;
		n2 = { value = &amp;#039;n2&amp;#039; },&lt;br /&gt;
		n3 = { value = &amp;#039;n3&amp;#039; },&lt;br /&gt;
		n4 = { value = &amp;#039;n4&amp;#039; },&lt;br /&gt;
		n5 = { value = &amp;#039;n5&amp;#039; },&lt;br /&gt;
		conflTrue = { value = &amp;#039;conflTrue&amp;#039; },&lt;br /&gt;
		conflFalse = { value = &amp;#039;conflFalse&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;conflFalse&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_isStatic_visible()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				isStatic = true,&lt;br /&gt;
				{&lt;br /&gt;
					value = &amp;#039;static&amp;#039;,&lt;br /&gt;
					capitalize = false,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;non-static&amp;#039;,&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;static, non-static&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_isStatic_hidden()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			delimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				isStatic = true,&lt;br /&gt;
				{&lt;br /&gt;
					value = &amp;#039;static&amp;#039;,&lt;br /&gt;
					capitalize = false,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = nil,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_isStatic_hidden_in_array()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			isStatic = true,&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;title&amp;#039;,&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			delimiter = &amp;#039; : &amp;#039;,&lt;br /&gt;
			field = &amp;#039;name&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		{&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name = { value = &amp;#039;t2&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;title : t2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_isStatic_hidden_in_array_in_additional_group()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039; : &amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				isStatic = true,&lt;br /&gt;
				{&lt;br /&gt;
					value = &amp;#039;title&amp;#039;,&lt;br /&gt;
					capitalize = false,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;name&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		{&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			name = { value = &amp;#039;t2&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;title : t2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_nested_array()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			childDelimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
			field = &amp;#039;tests&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				field = &amp;#039;title&amp;#039;,&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;: &amp;#039;,&lt;br /&gt;
				field = &amp;#039;value&amp;#039;,&lt;br /&gt;
				capitalize = false,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		tests = {&lt;br /&gt;
			{&lt;br /&gt;
				title = { value = &amp;#039;t1&amp;#039; },&lt;br /&gt;
				value = { value = &amp;#039;1&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				title = { value = &amp;#039;t2&amp;#039; },&lt;br /&gt;
				value = { value = &amp;#039;2&amp;#039; },&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;t1: 1, t2: 2&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_group_prefix_with_delimiter()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			value = &amp;#039;A&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
			delimiter = &amp;#039; — &amp;#039;,&lt;br /&gt;
			prefix = &amp;#039;(&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;B&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				delimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
				value = &amp;#039;C&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			suffix = &amp;#039;)&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;A. — (B, C)&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_group_prefix_with_delimiter_inside_another_group()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			value = &amp;#039;A&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			{&lt;br /&gt;
				ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
				delimiter = &amp;#039; — &amp;#039;,&lt;br /&gt;
				prefix = &amp;#039;(&amp;#039;,&lt;br /&gt;
				{&lt;br /&gt;
					value = &amp;#039;B&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					delimiter = &amp;#039;, &amp;#039;,&lt;br /&gt;
					value = &amp;#039;C&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				suffix = &amp;#039;)&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;A. — (B, C)&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_group_childDelimiter_and_childEnsureEnds()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			value = &amp;#039;A&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			ensureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
			delimiter = &amp;#039; — &amp;#039;,&lt;br /&gt;
			childEnsureEnds = &amp;#039;.&amp;#039;,&lt;br /&gt;
			childDelimiter = &amp;#039; &amp;#039;,&lt;br /&gt;
			prefix = &amp;#039;(&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;B&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;C&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;D&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			suffix = &amp;#039;)&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;A. — (B. C. D)&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_group_passthrough()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			value = &amp;#039;a&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			passthrough = true,&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;b&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;c&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				value = &amp;#039;d&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			value = &amp;#039;e&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Abcde&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_depends_fieldPath()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			depends = { isPath=true, &amp;#039;f1&amp;#039;, &amp;#039;sub2&amp;#039; },&lt;br /&gt;
			field = &amp;#039;f1&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			depends = { isPath=true, &amp;#039;f1&amp;#039;, &amp;#039;sub3&amp;#039; },&lt;br /&gt;
			field = &amp;#039;f1&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		f1 = {&lt;br /&gt;
			value = &amp;#039;Ok&amp;#039;,&lt;br /&gt;
			components = {&lt;br /&gt;
				sub1 = {&lt;br /&gt;
					value = &amp;#039;Ok&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
				sub2 = {&lt;br /&gt;
					value = &amp;#039;Not ok&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Ok&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_format_fieldPath()&lt;br /&gt;
	local profile = {&lt;br /&gt;
		{&lt;br /&gt;
			field = { isPath=true, &amp;#039;parent&amp;#039;, &amp;#039;child1&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			field = { isPath=true, &amp;#039;parent&amp;#039;, &amp;#039;child2&amp;#039; },&lt;br /&gt;
		},&lt;br /&gt;
		tag = {&lt;br /&gt;
			name = &amp;#039;span&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local source = {&lt;br /&gt;
		parent = {&lt;br /&gt;
			value = &amp;#039;Missed&amp;#039;,&lt;br /&gt;
			components = {&lt;br /&gt;
				child1 = {&lt;br /&gt;
					value = &amp;#039;Ok&amp;#039;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local wikitext = formatter.format(profile, source)&lt;br /&gt;
&lt;br /&gt;
	self:assertEquals(&amp;#039;&amp;lt;span&amp;gt;Ok&amp;lt;/span&amp;gt;&amp;#039;, wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>Буквица&gt;D6194c-1cc</name></author>
	</entry>
</feed>