Jump to content

Module:Sandbox/BrandonXLF/Module:Map params/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by BrandonXLF (talk | contribs) at 17:33, 5 September 2024 (Add space). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
-- Unit tests for [[Module:{{ROOTPAGENAME}}]]. Click talk page to run tests,.
local p = {}
local TableTools = require('Module:TableTools')

local tests = {
	{
		name = 'Basic',
		args = {'<nowiki>{{{1}}}</nowiki>'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Separator',
		args = {'<nowiki>{{{1}}}</nowiki>', sep = '{{sp}}+{{sp}}'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Conjunction',
		args = {'<nowiki>{{{1}}}</nowiki>', sep = '{{sp}}+{{sp}}', conj = '{{sp}}={{sp}}'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Start',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', start = 3, sep = ',{{sp}}'},
		parentArgs = {'A', 'B', 'C', 'D', 'E'}
	},
	{
		name = 'Extra',
		args = {'<nowiki>{{{1}}}{{{suffix}}}</nowiki>', extra = 'suffix', sep = '{{sp}}+{{sp}}'},
		parentArgs = {'A', 'B', 'C', suffix = 'i'}
	},
	{
		name = 'Sparse',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', sep = ',{{sp}}', sparse = 'y'},
		parentArgs = {'A', 'B', 'C', 'D', [1000] = 'E'}
	},
	{
		name = 'Sparse and start',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', start = 3, sep = ',{{sp}}', sparse = 'y'},
		parentArgs = {'A', 'B', 'C', 'D', [1000] = 'E'}
	},
	{
		name = 'Prefix',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var'},
		parentArgs = {var1 = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'No first number',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var'},
		parentArgs = {var = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'First number required',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var', optnum = 'n'},
		parentArgs = {var = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'Sparse prefix',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var', sparse = 'y'},
		parentArgs = {var1 = 'A', var2 = 'B', var30 = 'C'}
	},
	{
		name = 'Sparse no number first',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var', sparse = 'y'},
		parentArgs = {var = 'A', var2 = 'B', var30 = 'C'}
	},
	{
		name = 'Sparse first number required',
		args = {'<nowiki>{{{var}}}</nowiki>', sep = '{{sp}}+{{sp}}', prefix = 'var', sparse = 'y', opnum = 'n'},
		parentArgs = {var = 'A', var2 = 'B', var30 = 'C'}
	},
	{
		name = 'Multiple prefixes',
		args = {
			"<nowiki>{{{i}}}{{#if:{{{header|}}}|{{sp}}('''{{{header}}}''')}} = {{{item|''No item''}}}</nowiki>",
			prefix1 = 'item', prefix2 = 'header', sep = ',{{sp}}', sparse = 'y'
		},
		parentArgs = {item3 = 'ITM3', header3 = 'HDR3', item4 = 'ITM4', header5 = 'HDR5', item100 = 'ITM100'}
	},
	{
		name = 'Prefix extra',
		args = {
			"<nowiki>{{{i}}}{{#if:{{{header|}}}|{{sp}}('''{{{header}}}''')}} = {{{item}}}</nowiki>",
			prefix = 'item', extra = 'header(i)', sep = ',{{sp}}'
		},
		parentArgs = {item1 = 'ITM1', header1 = 'HDR1', item2 = 'ITM2', header3 = 'HDR3'}
	},
	{
		name = 'No expand wikitext',
		args = {'<nowiki>{{2x|{{{1}}}}}</nowiki>', expand = 'n'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'No expand without nowiki',
		args = {'{{2x|{{{1}}}}}', expand = 'n'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Call',
		args = {call = '2x'},
		parentArgs = {'A', 'B', 'C'}
	}
}

function joinArgs(args)
	local res = ''
	
	for k, v in TableTools.sortedPairs(args) do
		res = res .. '|' .. k .. '=' .. v
	end
	
	return res
end

function p.test(frame)
	local out = ''
	
	for _, cfg in ipairs(tests) do
		out = out .. '==' .. cfg.name .. '==\n'
		
		local paramsStr = joinArgs(cfg.args)
		local parentParamsStr = joinArgs(cfg.parentArgs)
		local sourceCode = '{{#invoke:Sandbox/BrandonXLF/Module:Map params|map' .. paramsStr .. '}}'
		
		cfg.parentArgs.sourceCode = sourceCode
		
		out = out .. frame:callParserFunction(
			'#tag',
			{'syntaxhighlight', sourceCode, lang = 'wikitext'}
		) .. '\n'

		out = out .. frame:callParserFunction(
			'#tag',
			{'syntaxhighlight', '{{_TEMPLATE_' .. parentParamsStr .. '}}', lang = 'wikitext'}
		) .. '\n'
		
		local res = frame:expandTemplate{
			title = 'Template:Call wikitext',
			args = cfg.parentArgs
		}
		
		out = out .. "<p>'''Live'''<br>" .. (res ~= '' and res or "''No output''") .. '</p>\n'
	end
	
	return out
end

return p