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.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a3ff7cf76b2f1e9f

Jump to content

Module:For params/testcases

From Wikipedia, the free encyclopedia
-- Unit tests for [[Module:For params]]. Click talk page to run tests.
local p = {}
local TableTools = require('Module:TableTools')

local tests = {
	-- Unnamed parameters only
	{
		name = 'Basic',
		args = {'<nowiki>{{{1}}}</nowiki>'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'No parent args',
		args = {'<nowiki>{{{1}}}</nowiki>'},
		parentArgs = {}
	},
	{
		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 = 'Fixed',
		args = {'<nowiki>{{{1}}}{{{suffix}}}</nowiki>', ' + ', fixed = '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 = 'No index',
		args = {'<nowiki>{{{i}}} should not be substituted</nowiki>.', ' ', noindex = 'y'},
		parentArgs = {'A', 'B', 'C'}
	},
	-- Prefixed parameters
	{
		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'}
	},
	-- Suffixed parameters
	{
		name = 'Suffix',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable'},
		parentArgs = {var1iable = 'A', var2iable = 'B', var3iable = 'C'}
	},
	{
		name = 'Suffix no first number',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable'},
		parentArgs = {variable = 'A', var2iable = 'B', var3iable = 'C'}
	},
	{
		name = 'Suffix first number required',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable', optnum = 'n'},
		parentArgs = {variable = 'A', var2iable = 'B', var3iable = 'C'}
	},
	{
		name = 'Sparse suffix',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable', sparse = 'y'},
		parentArgs = {var1iable = 'A', var2iable = 'B', var30iable = 'C'}
	},
	{
		name = 'Sparse suffix no number first',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable', sparse = 'y'},
		parentArgs = {variable = 'A', var2iable = 'B', var30iable = 'C'}
	},
	{
		name = 'Sparse suffix first number required',
		args = {'<nowiki>{{{variable}}}</nowiki>', ' + ', prefix = 'var', suffix = 'iable', sparse = 'y', optnum = 'n'},
		parentArgs = {variable = 'A', var2iable = 'B', var30iable = 'C'}
	},
	{
		name = 'Suffix only, unset prefix',
		args = {'<nowiki>{{{item}}}</nowiki>', ' + ', suffix = 'item'},
		parentArgs = {['1item'] = 'A', ['2item'] = 'B', ['3item'] = 'C'}
	},
	{
		name = 'Suffix only, blank prefix',
		args = {'<nowiki>{{{item}}}</nowiki>', ' + ', prefix = '', suffix = 'item'},
		parentArgs = {['1item'] = 'A', ['2item'] = 'B', ['3item'] = 'C'}
	},
	-- Multiple prefixes
	{
		name = 'Multiple prefixes',
		args = {
			"<nowiki>{{{i}}}{{#if:{{{header|}}}|{{sp}}('''{{{header}}}''')}} = {{{item|''No item''}}}</nowiki>",
			prefix1 = 'item', prefix2 = 'header', ', ', sparse = 'n'
		},
		parentArgs = {item1 = 'ITM1', header1 = 'HDR1', item2 = 'ITM2', header3 = 'HDR3', item100 = 'Ignored'}
	},
	{
		name = 'Multiple prefixes sparse',
		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 = 'Multiple prefixes with suffix',
		args = {
			"<nowiki>{{{person|{{{person_name|}}}}}}</nowiki>",
			prefix1 = 'person', prefix2 = 'person', suffix2 = '_name', ', ', conj = ', and&#32;'
		},
		parentArgs = {person1 = 'Mr. 1', person1_name = 'Ignored', person2 = 'Ms. 2', person3_name = 'Ms. 3', person100 = 'Ignored'}
	},
	{
		name = 'Multiple prefixes with suffix sparse',
		args = {
			"<nowiki>{{{person|{{{person_name|}}}}}}</nowiki>",
			prefix1 = 'person', prefix2 = 'person', suffix2 = '_name', ', ', conj = ', and&#32;', sparse = 'y'
		},
		parentArgs = {person3 = 'Mr. 3', person3_name = 'Ignored', person4 = 'Ms. 4', person5_name = 'Ms. 5', person100 = 'Mr. 100'}
	},
	-- Extra
	{
		name = 'Prefix extra',
		args = {
			"<nowiki>{{{i}}}{{#if:{{{header|}}}|{{sp}}('''{{{header}}}''')}} = {{{item}}}</nowiki>",
			prefix = 'item', extra = 'header', ', '
		},
		parentArgs = {item1 = 'ITM1', header1 = 'HDR1', item2 = 'ITM2', header3 = 'Ignored'}
	},
	{
		name = 'Multiple extras',
		args = {
			"<nowiki>''{{{name}}}'': Born: {{{born|Unknown}}}, Died: {{{died|N/A}}}</nowiki>",
			prefix = 'name', extra1 = 'born', extra2 = 'died', '<br>'
		},
		parentArgs = {
			name = 'James', born = '1905', died = '1982',
			name2 = 'Bob', born2 = '2000',
			name3 = 'John', died3 = '2012',
			name4 = 'Ryan'
		}
	},
	{
		name = 'Multiple extras with suffix',
		args = {
			"<nowiki>''{{{person_name}}}'': Born: {{{person_born|Unknown}}}, Died: {{{person_died|N/A}}}</nowiki>",
			prefix = 'person', suffix = '_name',
			extra1 = 'person', extrasuffix1 = '_born',
			extra2 = 'person', extrasuffix2 = '_died',
			'<br>'
		},
		parentArgs = {
			person1_name = 'James', person1_born = '1905', person1_died = '1982',
			person2_name = 'Bob', person2_born = '2000',
			person3_name = 'John', person3_died = '2012',
			person4_name = 'Ryan'
		}
	},
	{
		name = 'Multiple extras with suffix using opt num',
		args = {
			"<nowiki>''{{{person_name}}}'': Born: {{{person_born|Unknown}}}, Died: {{{person_died|N/A}}}</nowiki>",
			prefix = 'person', suffix = '_name',
			extra1 = 'person', extrasuffix1 = '_born',
			extra2 = 'person', extrasuffix2 = '_died',
			'<br>'
		},
		parentArgs = {
			person_name = 'James', person_born = '1905', person_died = '1982',
			person2_name = 'Bob', person2_born = '2000',
			person3_name = 'John', person3_died = '2012',
			person4_name = 'Ryan'
		}
	},
	-- Call
	{
		name = 'Call',
		args = {call = '2x'},
		parentArgs = {'A', 'B', 'C'}
	},
	{
		name = 'Call and whitespace separator',
		args = {call = '2x', ' & '},
		parentArgs = {'A', 'B', 'C'}
	},
	-- Wikitext parsing
	{
		name = '&#123;&#123;&#123;|default&#125;&#125;&#125;',
		args = {'<nowiki>{{{|default}}}</nowiki>'},
		parentArgs = {'A'}
	},
	{
		name = 'Doesn\'t over-parse',
		args = {'<nowiki>{{{1}}}</nowiki>'},
		parentArgs = {'{{1x|Should be unparsed}}'}
	},
}

local 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:For params|main' .. paramsStr .. '}}'
		
		out = out .. frame:callParserFunction(
			'#tag',
			{'syntaxhighlight', sourceCode, lang = 'wikitext'}
		) .. '\n'

		out = out .. frame:callParserFunction(
			'#tag',
			{'syntaxhighlight', '{{_TEMPLATE_' .. parentParamsStr .. '}}', lang = 'wikitext'}
		) .. '\n'

		cfg.parentArgs.sourceCode = sourceCode
		local liveRes = frame:expandTemplate{
			title = 'Template:Call wikitext',
			args = cfg.parentArgs
		}
		out = out .. "<p>'''Live'''<br>" .. (liveRes ~= '' and liveRes or "''No output''") .. "</p>" .. '\n'

		cfg.parentArgs.sourceCode = '{{#invoke:For params/sandbox|main' .. paramsStr .. '}}'
		local sandboxRes = frame:expandTemplate{
			title = 'Template:Call wikitext',
			args = cfg.parentArgs
		}
		out = out .. "<p>'''Sandbox'''<br>" .. (sandboxRes ~= '' and sandboxRes or "''No output''") .. "</p>" .. '\n'
	end
	
	return out
end

return p