!! Version 2 # Force the test runner to ensure the extension is loaded !! functionhooks af_foreach !! endfunctionhooks # This file tests the #af_foreach parser function !! test Test loop over simple list !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | | value | {{{value}}} }} !! html
abc
!! end !! test Test loop over simple list with key !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value | {{{key}}}={{{value}}} }} !! html0=a1=b2=c
!! end !! test Test loop over empty list !! wikitext {{#af_foreach: {{AF_EMPTY}} | key | value | {{{value}}} }} !! html !! end !! test Test loop without key or value !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | | | a }} !! htmlaaa
!! end !! test Test loop over object !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | | value | {{{value}}} }} !! htmlbarfar
!! end !! test Test loop over object with key !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | key | value | {{{key}}}={{{value}}} }} !! htmlfoo=barboo=far
!! end !! test Test loop over object without key or value !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | | | a }} !! htmlaa
!! end !! test Test loop over object with simple delimiter !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | key | value | {{{key}}}={{{value}}} | delimiter=! }} !! htmlfoo=bar!boo=far
!! end !! test Test loop over object with escape sequence !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | key | value | {{{key}}}={{{value}}} | delimiter=\n }} !! htmlfoo=bar boo=far
!! end !! test Test loop over object with escape sequence 2 !! wikitext {{#af_foreach: {{#af_object: foo=bar | boo=far }} | key | value | {{{key}}}={{{value}}} | delimiter=\s }} !! htmlfoo=bar boo=far
!! end !! test Test no body !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value }} !! html !! end !! test Test no value !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key }} !! html !! end !! test Test no key !! wikitext {{#af_foreach: {{#af_list: a | b | c }} }} !! html !! end !! test Test first parameter must be an array !! wikitext {{#af_foreach: foobar | key | value | }} !! htmlArrayFunctions (#af_foreach): Could not match expected type array with actual type string for parameter 1 ("foobar").
!! end !! test Test too many arguments !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value | body | more }} !! htmlArrayFunctions (#af_foreach): Expected at most 4 positional parameters, 5 given.
!! end !! test Test loop over array with single value !! wikitext {{#af_foreach: {{#af_list: single }} | key | value | {{{key}}}={{{value}}} }} !! html0=single
!! end !! test Test loop over empty array !! wikitext {{#af_foreach: {{AF_EMPTY}} | key | value | {{{key}}}={{{value}}} }} !! html !! end !! test Test loop over array with delimiter !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value | {{{value}}} | delimiter=, }} !! htmla,b,c
!! end !! test Test loop over array with no key or value and delimiter !! wikitext {{#af_foreach: {{#af_list: x | y | z }} | | | z | delimiter=; }} !! htmlz;z;z
!! end !! test Test loop over object with complex body !! wikitext {{#af_foreach: {{#af_object: name=John | age=30 }} | key | value | {{{key}}}: {{{value}}} }} !! htmlname: Johnage: 30
!! end !! test Test loop over array with escaped delimiter !! wikitext {{#af_foreach: {{#af_list: 1 | 2 | 3 }} | key | value | {{{value}}} | delimiter=\n }} !! html1 2 3
!! end !! test Test empty array with delimiter !! wikitext {{#af_foreach: {{AF_EMPTY}} | key | value | {{{key}}}={{{value}}} | delimiter=, }} !! html !! end !! test Test object with duplicate keys !! wikitext {{#af_foreach: {{#af_object: key=value1 | key=value2 }} | key | value | {{{key}}}={{{value}}} }} !! htmlkey=value2
!! end !! test Test nested foreach loops !! wikitext {{#af_foreach: {{#af_list: 1 | 2 }} | outerKey | outerValue | {{#af_foreach: {{#af_list: a | b }} | innerKey | innerValue | {{{outerValue}}}:{{{innerValue}}} }} }} !! html1:a1:b2:a2:b
!! end !! test Test invalid array parameter !! wikitext {{#af_foreach: notAnArray | key | value | {{{key}}}={{{value}}} }} !! htmlArrayFunctions (#af_foreach): Could not match expected type array with actual type string for parameter 1 ("notAnArray").
!! end !! test Test missing body with valid array !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value }} !! html !! end !! test Test array with special characters !! wikitext {{#af_foreach: {{#af_list: @ | # | $ }} | key | value | {{{value}}} }} !! html@#$
!! end !! test Test nested loop with delimiter !! wikitext {{#af_foreach: {{#af_list: x | y }} | outerKey | outerValue | {{#af_foreach: {{#af_list: 1 | 2 }} | innerKey | innerValue | {{{outerValue}}}-{{{innerValue}}} | delimiter=; }} | delimiter=, }} !! htmlx-1;x-2,y-1;y-2
!! end !! test Test too many arguments in foreach !! wikitext {{#af_foreach: {{#af_list: a | b | c }} | key | value | body | extra }} !! htmlArrayFunctions (#af_foreach): Expected at most 4 positional parameters, 5 given.
!! end