Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

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

From Wikipedia, the free encyclopedia
-- 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 = 'Whitespace separator',
		args = {'<nowiki>* {{{1}}}</nowiki>', '\n'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Conjunction',
		args = {'<nowiki>{{{1}}}</nowiki>', ' + ', conj = '{{sp}}={{sp}}'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Start',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', ', ', start = 3},
		parentArgs = {'A', 'B', 'C', 'D', 'E'}
	},
	{
		name = 'Extra',
		args = {'<nowiki>{{{1}}}{{{suffix}}}</nowiki>', ' + ', extra = 'suffix'},
		parentArgs = {'A', 'B', 'C', suffix = 'i'}
	},
	{
		name = 'Sparse',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', ', ', sparse = 'y'},
		parentArgs = {'A', 'B', 'C', 'D', [1000] = 'E'}
	},
	{
		name = 'Sparse and start',
		args = {'<nowiki>{{{i}}} = {{{1}}}</nowiki>', start = 3, ', ', sparse = 'y'},
		parentArgs = {'A', 'B', 'C', 'D', [1000] = 'E'}
	},
	{
		name = 'Prefix',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var'},
		parentArgs = {var1 = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'No first number',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var'},
		parentArgs = {var = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'First number required',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var', optnum = 'n'},
		parentArgs = {var = 'A', var2 = 'B', var3 = 'C'}
	},
	{
		name = 'Sparse prefix',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var', sparse = 'y'},
		parentArgs = {var1 = 'A', var2 = 'B', var30 = 'C'}
	},
	{
		name = 'Sparse no number first',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var', sparse = 'y'},
		parentArgs = {var = 'A', var2 = 'B', var30 = 'C'}
	},
	{
		name = 'Sparse first number required',
		args = {'<nowiki>{{{var}}}</nowiki>', ' + ', prefix = 'var', sparse = 'y', optnum = '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', ', ', 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)', ', '
		},
		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'}
	},
	{
		name = 'Call and whitespace separator',
		args = {call = '2x', ' & '},
		parentArgs = {'A', 'B', 'C'}
	}
}

function joinArgs(args)
	local res = ''
	
	for k, v in TableTools.sortedPairs(args) do
		res = res .. '|' .. (type(k) ~= 'number' and k .. '=' or '') .. 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