<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bitcrush.io/laserwiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ATNT%2Ftestcases</id>
	<title>Module:TNT/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://bitcrush.io/laserwiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ATNT%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:TNT/testcases&amp;action=history"/>
	<updated>2026-04-13T00:53:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:TNT/testcases&amp;diff=5921&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:TNT/testcases&amp;diff=5921&amp;oldid=prev"/>
		<updated>2020-09-17T18:37:05Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:37, 17 September 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:TNT/testcases&amp;diff=5920&amp;oldid=prev</id>
		<title>mw&gt;Tacsipacsi: fix some more quotation marks, rename a test case to avoid overwriting a previous one—what language is this that it doesn’t issue even a warning when overwriting methods?!</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:TNT/testcases&amp;diff=5920&amp;oldid=prev"/>
		<updated>2019-06-28T20:40:48Z</updated>

		<summary type="html">&lt;p&gt;fix some more quotation marks, rename a test case to avoid overwriting a previous one—what language is this that it doesn’t issue even a warning when overwriting methods?!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local p = ScribuntoUnit:new()&lt;br /&gt;
local libName = &amp;#039;TNT&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Helper to run all tests using sandbox version of the library from the debug console. To run against main lib, use  =p.run()&lt;br /&gt;
function p.runSandbox()&lt;br /&gt;
	local frame = mw.getCurrentFrame():newChild{title=&amp;#039;testcases&amp;#039;, args={module=libName .. &amp;#039;/sandbox&amp;#039;, displayMode=&amp;#039;log&amp;#039;}}&lt;br /&gt;
	return p.run(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Allow test runner to use both the main library and the sandbox of the library with the same testcases&lt;br /&gt;
function p:module()&lt;br /&gt;
	return self.frame and self.frame.args.module or libName&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:invokeLib(wikicode)&lt;br /&gt;
	return &amp;#039;{{#invoke:&amp;#039; .. p:module() .. &amp;#039;|&amp;#039; .. wikicode .. &amp;#039;}}&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
       Library-specific tests&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p:test_msg()&lt;br /&gt;
	-- dataset resolution&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text&amp;#039;), &amp;#039;msg01&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases|text&amp;#039;), &amp;#039;msg02&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039;msg| I18n/Module:TNT/testcases.tab |text&amp;#039;), &amp;#039;msg03&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039;msg| I18n/Module:TNT/testcases |text&amp;#039;), &amp;#039;msg04&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- spacing&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039; msg | I18n/Module:TNT/testcases.tab | text &amp;#039;), &amp;#039;msg11&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039; \n msg \n | \n I18n/Module:TNT/testcases.tab \n | \n text \n &amp;#039;), &amp;#039;msg12&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text|lang=ru&amp;#039;), &amp;#039;msg13&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text|lang=fr&amp;#039;), &amp;#039;msg14&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- 1 parameter&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_1|a&amp;#039;), &amp;#039;msg21&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_1| a &amp;#039;), &amp;#039;msg22&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_1| \na \n &amp;#039;), &amp;#039;msg23&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст абв&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_1|абв|lang=ru&amp;#039;), &amp;#039;msg24&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- multiple parameters&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a and b&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_2|a|b&amp;#039;), &amp;#039;msg31&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a and b&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_2| a | b &amp;#039;), &amp;#039;msg32&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message a and b&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_2| \na \n | \nb \n &amp;#039;), &amp;#039;msg33&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст абв и где&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_2|абв|где|lang=ru&amp;#039;), &amp;#039;msg34&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- parameters as part of wiki text&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message [[a|b]]&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_link|a|b&amp;#039;), &amp;#039;msg41&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;text message [[a|b]]&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_link| a | b &amp;#039;), &amp;#039;msg42&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст [[абв|где]]&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_link|абв|где|lang=ru&amp;#039;), &amp;#039;msg43&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- fallbacks&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_no_en&amp;#039;), &amp;#039;msg51&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_no_en|lang=ru&amp;#039;), &amp;#039;msg52&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;текст&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT/testcases.tab|text_no_en|lang=fr&amp;#039;), &amp;#039;msg53&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_msg_format()&lt;br /&gt;
	local tnt = require(&amp;#039;Module:&amp;#039; .. p:module())&lt;br /&gt;
	self:assertEquals(&amp;#039;text message&amp;#039;, tnt.format(&amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text&amp;#039;), &amp;#039;format01&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message a&amp;#039;, tnt.format(&amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_1&amp;#039;, &amp;#039;a&amp;#039;), &amp;#039;format02&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message foo and bar&amp;#039;, tnt.format(&amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_2&amp;#039;, &amp;#039;foo&amp;#039;, &amp;#039;bar&amp;#039;), &amp;#039;format03&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message foo and bar&amp;#039;, tnt.format(&amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_2&amp;#039;, {&amp;#039;foo&amp;#039;, &amp;#039;bar&amp;#039;}), &amp;#039;format04&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	self:assertThrows(function() tnt.format() end, &amp;quot;bad argument #1 to &amp;#039;format&amp;#039; (string expected, got nil)&amp;quot;, &amp;#039;format11&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.format(&amp;#039;Module:TNT/testcases&amp;#039;) end, &amp;quot;bad argument #2 to &amp;#039;format&amp;#039; (string expected, got nil)&amp;quot;, &amp;#039;format12&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.format(&amp;#039;_bad_name_&amp;#039;, &amp;#039;foo&amp;#039;) end, &amp;#039;Dataset [[c:Data:_bad_name_.tab]] is not valid&amp;#039;, &amp;#039;format13&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.format(&amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;_bad_msg&amp;#039;) end, &amp;#039;Message “_bad_msg” does not exist in dataset [[c:Data:I18n/Module:TNT/testcases]]&amp;#039;, &amp;#039;format14&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_msg_format_in_language()&lt;br /&gt;
	local tnt = require(&amp;#039;Module:&amp;#039; .. p:module())&lt;br /&gt;
	self:assertEquals(&amp;#039;text message&amp;#039;, tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text&amp;#039;), &amp;#039;formatInLanguage01&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message a&amp;#039;, tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_1&amp;#039;, &amp;#039;a&amp;#039;), &amp;#039;formatInLanguage02&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message foo and bar&amp;#039;, tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_2&amp;#039;, &amp;#039;foo&amp;#039;, &amp;#039;bar&amp;#039;), &amp;#039;formatInLanguage03&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;text message foo and bar&amp;#039;, tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_2&amp;#039;, {&amp;#039;foo&amp;#039;, &amp;#039;bar&amp;#039;}), &amp;#039;formatInLanguage04&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;текст абв&amp;#039;, tnt.formatInLanguage(&amp;#039;ru&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;text_1&amp;#039;, &amp;#039;абв&amp;#039;), &amp;#039;formatInLanguage03&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	self:assertThrows(function() tnt.formatInLanguage() end, &amp;quot;bad argument #1 to &amp;#039;formatInLanguage&amp;#039; (string expected, got nil)&amp;quot;, &amp;#039;formatInLanguage11&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.formatInLanguage(&amp;#039;en&amp;#039;) end, &amp;quot;bad argument #2 to &amp;#039;formatInLanguage&amp;#039; (string expected, got nil)&amp;quot;, &amp;#039;formatInLanguage12&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;Module:TNT/testcases&amp;#039;) end, &amp;quot;bad argument #3 to &amp;#039;formatInLanguage&amp;#039; (string expected, got nil)&amp;quot;, &amp;#039;formatInLanguage12&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;_bad_name_&amp;#039;, &amp;#039;foo&amp;#039;) end, &amp;#039;Dataset [[c:Data:_bad_name_.tab]] is not valid&amp;#039;, &amp;#039;formatInLanguage13&amp;#039;)&lt;br /&gt;
	self:assertThrows(function() tnt.formatInLanguage(&amp;#039;en&amp;#039;, &amp;#039;I18n/Module:TNT/testcases&amp;#039;, &amp;#039;_bad_msg&amp;#039;) end, &amp;#039;Message “_bad_msg” does not exist in dataset [[c:Data:I18n/Module:TNT/testcases]]&amp;#039;, &amp;#039;formatInLanguage14&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:assertResultError(errorText, text, message)&lt;br /&gt;
	local actual = self.frame:preprocess(text)&lt;br /&gt;
	self:assertStringContains(&amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;scribunto-error&amp;quot; id=&amp;quot;mw-scribunto-error-&amp;#039;, actual, true, message)&lt;br /&gt;
	self:assertStringContains(errorText .. &amp;#039;.&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;#039;, actual, true, message)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_msg_errors()&lt;br /&gt;
	-- The error messages might change if https://commons.wikimedia.org/wiki/Data:I18n/Module:TNT.tab changes for English&lt;br /&gt;
	self:assertResultError(&amp;#039;First parameter must be the name of the Commons dataset&amp;#039;, p:invokeLib(&amp;#039;msg&amp;#039;), &amp;#039;msgerr01&amp;#039;)&lt;br /&gt;
	self:assertResultError(&amp;#039;First parameter must be the name of the Commons dataset&amp;#039;, p:invokeLib(&amp;#039;msg|lang=pl&amp;#039;), &amp;#039;msgerr02&amp;#039;)&lt;br /&gt;
	self:assertResultError(&amp;#039;Dataset [[c:Data:_bad_name_.tab]] is not valid&amp;#039;, p:invokeLib(&amp;#039;msg|_bad_name_&amp;#039;), &amp;#039;msgerr03&amp;#039;)&lt;br /&gt;
	self:assertResultError(&amp;#039;Message “_bad_msg_” does not exist in dataset [[c:Data:I18n/Module:TNT]]&amp;#039;, p:invokeLib(&amp;#039;msg|I18n/Module:TNT|_bad_msg_&amp;#039;), &amp;#039;msgerr04&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_link()&lt;br /&gt;
	self:assertResultEquals(&amp;#039;c:Data:abc.tab&amp;#039;, p:invokeLib(&amp;#039;link|abc.tab&amp;#039;), &amp;#039;link01&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;c:Data:abc.tab&amp;#039;, p:invokeLib(&amp;#039; link | abc.tab &amp;#039;), &amp;#039;link02&amp;#039;)&lt;br /&gt;
	self:assertResultEquals(&amp;#039;c:Data:abc.tab&amp;#039;, p:invokeLib(&amp;#039; link |\n abc.tab\n &amp;#039;), &amp;#039;link03&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p:test_doc()&lt;br /&gt;
	local tnt = require(&amp;#039;Module:&amp;#039; .. p:module())&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
			&amp;#039;{&amp;quot;paramOrder&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;],&amp;quot;description&amp;quot;:&amp;quot;DO NOT EDIT OR TRANSLATE unless you are changing unit tests&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;suggested&amp;quot;:false,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;required&amp;quot;:true,&amp;quot;label&amp;quot;:&amp;quot;en_label_1&amp;quot;,&amp;quot;example&amp;quot;:&amp;quot;en_example_1&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;en_desc_1&amp;quot;},&amp;quot;2&amp;quot;:{&amp;quot;suggested&amp;quot;:true,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;required&amp;quot;:false,&amp;quot;label&amp;quot;:&amp;quot;fr_label_2&amp;quot;,&amp;quot;example&amp;quot;:&amp;quot;pl_example_2&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;en_desc_2&amp;quot;}}}&amp;#039;,&lt;br /&gt;
			tnt.getTemplateData(&amp;#039;Templatedata/Module:TNT/testcases templatedata 1&amp;#039;),&lt;br /&gt;
			&amp;#039;doc01&amp;#039;)&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
			&amp;#039;{&amp;quot;paramOrder&amp;quot;:[&amp;quot;param1&amp;quot;,&amp;quot;param2&amp;quot;],&amp;quot;description&amp;quot;:&amp;quot;DO NOT EDIT OR TRANSLATE unless you are changing unit tests&amp;quot;,&amp;quot;params&amp;quot;:{&amp;quot;param2&amp;quot;:{&amp;quot;suggested&amp;quot;:true,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;required&amp;quot;:false,&amp;quot;label&amp;quot;:&amp;quot;fr_label_2&amp;quot;,&amp;quot;example&amp;quot;:&amp;quot;pl_example_2&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;en_desc_2&amp;quot;},&amp;quot;param1&amp;quot;:{&amp;quot;suggested&amp;quot;:false,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;required&amp;quot;:true,&amp;quot;label&amp;quot;:&amp;quot;en_label_1&amp;quot;,&amp;quot;example&amp;quot;:&amp;quot;en_example_1&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;en_desc_1&amp;quot;}}}&amp;#039;,&lt;br /&gt;
			tnt.getTemplateData(&amp;#039;Templatedata/Module:TNT/testcases templatedata 2&amp;#039;),&lt;br /&gt;
			&amp;#039;doc02&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>mw&gt;Tacsipacsi</name></author>
	</entry>
</feed>