Template:Test-params/doc
Documentation
This template exists only to collect examples that illustrate certain vagaries of MediaWiki templates — in particular, cases where whitespace is or is not preserved, and how that affects the perceived definedness and truth value of the parameters passed to the template.
This is obviously only for the benefit of template editors (and maybe some template users) on this wiki, so the template should generally not be used outside of this very documentation page (and possibly on talk pages, to explain unexpected template behavior).
Usage
{{test-params}}{{test-params|…}}{{test-params|…|…}}
The only parameters this template checks for are the first two positional ones and their named equivalents, 1 and 2. Their behavior in the examples where they are named (e.g., using |1=) is the same as for any other named parameter.
Examples
In all examples, "fallback value" is the value of "{{{1|{{{2|default}}}}}}".
No parameters
{{test-params}}⇒ 1 undefined; 2 undefined; fallback value = "default"
Positional only: empty and whitespace
{{test-params|}}⇒ 1 defined and false (); 2 undefined; fallback value = ""{{test-params||}}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params|| }}⇒ 1 defined and false (); 2 defined and false ( ); fallback value = ""{{test-params| }}⇒ 1 defined and false ( ); 2 undefined; fallback value = " "{{test-params| |}}⇒ 1 defined and false ( ); 2 defined and false (); fallback value = " "{{test-params| | }}⇒ 1 defined and false ( ); 2 defined and false ( ); fallback value = " "
Named only: empty and whitespace values
{{test-params|1=}}⇒ 1 defined and false (); 2 undefined; fallback value = ""{{test-params|1= }}⇒ 1 defined and false (); 2 undefined; fallback value = ""{{test-params|1=|2=}}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params|1=|2= }}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params|1= |2=}}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params|1= |2= }}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""
Named but unrecognized parameter (not checked for) and empty positional
{{test-params|ignored=}}⇒ 1 undefined; 2 undefined; fallback value = "default"{{test-params|ignored=|}}⇒ 1 defined and false (); 2 undefined; fallback value = ""{{test-params||ignored=}}⇒ 1 defined and false (); 2 undefined; fallback value = ""{{test-params||ignored=|}}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""
Mix of named and positional: empty and whitespace values
{{test-params|1=|}}⇒ 1 defined and false (); 2 undefined; fallback value = "" [bad call: 1 defined twice]{{test-params|1=| }}⇒ 1 defined and false ( ); 2 undefined; fallback value = " " [bad call: 1 defined twice]{{test-params|1= |}}⇒ 1 defined and false (); 2 undefined; fallback value = "" [bad call: 1 defined twice]{{test-params|1= | }}⇒ 1 defined and false ( ); 2 undefined; fallback value = " " [bad call: 1 defined twice]{{test-params||2=}}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params||2= }}⇒ 1 defined and false (); 2 defined and false (); fallback value = ""{{test-params| |2=}}⇒ 1 defined and false ( ); 2 defined and false (); fallback value = " "{{test-params| |2= }}⇒ 1 defined and false ( ); 2 defined and false (); fallback value = " "
Positional only: values with optional leading/trailing whitespace
{{test-params|foo}}⇒ 1 defined and true (foo); 2 undefined; fallback value = "foo"{{test-params|foo|bar}}⇒ 1 defined and true (foo); 2 defined and true (bar); fallback value = "foo"{{test-params| foo | bar }}⇒ 1 defined and true ( foo ); 2 defined and true ( bar ); fallback value = " foo "
Named only: values with optional leading/trailing whitespace
{{test-params|1=foo}}⇒ 1 defined and true (foo); 2 undefined; fallback value = "foo"{{test-params|1=foo|2=bar}}⇒ 1 defined and true (foo); 2 defined and true (bar); fallback value = "foo"{{test-params|1= foo |2= bar }}⇒ 1 defined and true (foo); 2 defined and true (bar); fallback value = "foo"
Positional only: non-whitespace and empty/whitespace-only values
{{test-params|foo|}}⇒ 1 defined and true (foo); 2 defined and false (); fallback value = "foo"{{test-params|foo| }}⇒ 1 defined and true (foo); 2 defined and false ( ); fallback value = "foo"{{test-params||bar}}⇒ 1 defined and false (); 2 defined and true (bar); fallback value = ""{{test-params| |bar}}⇒ 1 defined and false ( ); 2 defined and true (bar); fallback value = " "
Named only: non-whitespace and empty/whitespace-only values
{{test-params|1=foo|2=}}⇒ 1 defined and true (foo); 2 defined and false (); fallback value = "foo"{{test-params|1=foo|2= }}⇒ 1 defined and true (foo); 2 defined and false (); fallback value = "foo"{{test-params|1=|2=bar}}⇒ 1 defined and false (); 2 defined and true (bar); fallback value = ""{{test-params|1= |2=bar}}⇒ 1 defined and false (); 2 defined and true (bar); fallback value = ""
Mix of named with non-whitespace values and empty/whitespace positional
{{test-params|1=foo|}}⇒ 1 defined and false (); 2 undefined; fallback value = "" [bad call: 1 defined twice]{{test-params|1=foo| }}⇒ 1 defined and false ( ); 2 undefined; fallback value = " " [bad call: 1 defined twice]{{test-params||2=bar}}⇒ 1 defined and false (); 2 defined and true (bar); fallback value = ""{{test-params| |2=bar}}⇒ 1 defined and false ( ); 2 defined and true (bar); fallback value = " "
Mix of positional with non-whitespace values and empty/whitespace-only named
{{test-params|foo|2=}}⇒ 1 defined and true (foo); 2 defined and false (); fallback value = "foo"{{test-params|foo|2= }}⇒ 1 defined and true (foo); 2 defined and false (); fallback value = "foo"{{test-params|foo|2=bar}}⇒ 1 defined and true (foo); 2 defined and true (bar); fallback value = "foo"{{test-params|1=|bar}}⇒ 1 defined and true (bar); 2 undefined; fallback value = "bar" [bad call: 1 defined twice]{{test-params|1= |bar}}⇒ 1 defined and true (bar); 2 undefined; fallback value = "bar" [bad call: 1 defined twice]{{test-params|1=foo|bar}}⇒ 1 defined and true (bar); 2 undefined; fallback value = "bar" [bad call: 1 defined twice]
See also
{{test-if}}— a similar template documenting how whitespace is handled when using the{{#if:}}parser function