!! Version 2 # Force the test runner to ensure the extension is loaded !! functionhooks af_get !! endfunctionhooks # This file tests the #af_get parser function !! test Test get numeric key !! wikitext {{#af_get: {{#af_list: a | b | c }} | 0 }}{{#af_get: {{#af_list: a | b | c }} | 1 }} !! html

ab

!! end !! test Test get string key !! wikitext {{#af_get: {{#af_object: foo=bar | boo=far }} | boo }} !! html

far

!! end !! test Test get boolean !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_bool: yes }} }} | 0 }} }} !! html

true

!! end !! test Test get list !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_list: a | b | c }} }} | 0 }} }} !! html !! end !! test Test get nested value, numeric keys !! wikitext {{#af_get: {{#af_list: {{#af_list: a | b | c }} }} | 0 | 1 }} !! html

b

!! end !! test Test get nested value, string keys !! wikitext {{#af_get: {{#af_object: foo={{#af_object: foo=bar | boo=far }} }} | foo | boo }} !! html

far

!! end !! test Test get nested value, mixed keys !! wikitext {{#af_get: {{#af_list: {{#af_object: foo=bar | boo=far }} }} | 0 | boo }} !! html

far

!! end !! test Test get value, numeric string keys !! wikitext {{#af_get: {{#af_object: 0=foo | 1=bar }} | 1 }} !! html

bar

!! end !! test Test get non-existent value !! wikitext {{#af_get: {{#af_object: foo=foo | boo=bar }} | quz }} !! html !! end !! test Test get non-existent value in subarray !! wikitext {{#af_get: {{#af_list: a | b | {{#af_list: c | d }} }} | 2 | 2 }} !! html !! end !! test Test get no keys !! wikitext {{#af_print: {{#af_get: {{#af_object: foo=foo | boo=bar }} }} }} !! html !! end !! test Test get wildcard !! wikitext {{#af_print: {{#af_get: {{#af_object: a={{#af_object: a=a | b=b | c=c }} | b={{#af_object: a=d | b=e | c=f }} | c={{#af_object: a=g | b=h | c=i }} }} | * | a | 0 }} }} !! html

a

!! end !! test Test get reverse !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c }} | <- | 0 }} }} !! html

c

!! end !! test Test double reverse !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c }} | <- | <- | 0 }} }} !! html

a

!! end !! test Test get flatten once already flat !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c }} | >< | 0 }} }} !! html

a

!! end !! test Test get flatten once !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_list: a | b | c }} | {{#af_list: a | b | c }} | {{#af_list: a | b | c }} }} | >< | 0 }} }} !! html

a

!! end !! test Test get flatten recursive already flat !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c }} | >><< | 0 }} }} !! html

a

!! end !! test Test get flatten recursive !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_list: {{#af_list: a | b | c }} | {{#af_list: a | b | c }} | {{#af_list: a | b | c }} }} }} | >><< | 0 }} }} !! html

a

!! end !! test Test get unique !! wikitext {{#af_print: {{#af_get: {{#af_list: a | a | b | c }} | # | 1 }} }} !! html

!! end !! test Test get slice simple !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c | d | e }} | 1..3 }} }} !! html !! end !! test Test get slice no upper bound !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c | d | e }} | 1.. }} }} !! html !! end !! test Test get slice lower upper bound !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c | d | e }} | 3..1 }} }} !! html !! end !! test Test invalid type for first argument !! wikitext {{#af_get: foobar }} !! html

ArrayFunctions (#af_get): Could not match expected type array with actual type string for parameter 1 ("foobar").

!! end !! test Test get first value !! wikitext {{#af_get: {{#af_list: x | y | z }} | 0 }} !! html

x

!! end !! test Test get last value !! wikitext {{#af_get: {{#af_list: a | b | c }} | <- | 0 }} !! html

c

!! end !! test Test get value by numeric string key !! wikitext {{#af_get: {{#af_object: 1=one | 2=two }} | 2 }} !! html

two

!! end !! test Test get from nested object !! wikitext {{#af_get: {{#af_object: outer={{#af_object: inner=value }} }} | outer | inner }} !! html

value

!! end !! test Test get deeply nested list !! wikitext {{#af_get: {{#af_list: {{#af_list: {{#af_list: a | b }} }} }} | 0 | 0 | 1 }} !! html

b

!! end !! test Test get from mixed array and object !! wikitext {{#af_get: {{#af_list: {{#af_object: key=value }} | element }} | 0 | key }} !! html

value

!! end !! test Test get with invalid key type !! wikitext {{#af_get: {{#af_list: a | b | c }} | invalidKey }} !! html !! end !! test Test get with invalid nested key !! wikitext {{#af_get: {{#af_list: {{#af_list: a | b | c }} }} | 0 | invalidKey }} !! html !! end !! test Test get wildcard key on flat object !! wikitext {{#af_print: {{#af_get: {{#af_object: foo=bar | boo=far }} | * }} }} !! html !! end !! test Test get wildcard key on nested object !! wikitext {{#af_print: {{#af_get: {{#af_object: a={{#af_object: b=1 | c=2 }} | d={{#af_object: e=3 | f=4 }} }} | * | b }} }} !! html

1

!! end !! test Test get with flatten operator once !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_list: a | b }} | c }} | >< | 2 }} }} !! html

c

!! end !! test Test get with flatten operator recursively !! wikitext {{#af_print: {{#af_get: {{#af_list: {{#af_list: {{#af_list: a | b }} }} }} | >><< | 0 }} }} !! html

a

!! end !! test Test get unique from list !! wikitext {{#af_print: {{#af_get: {{#af_list: x | x | y | z | z }} | # }} }} !! html !! end !! test Test get reverse slice !! wikitext {{#af_print: {{#af_get: {{#af_list: a | b | c | d | e }} | 3..1 }} }} !! html !! end !! test Test get invalid argument type !! wikitext {{#af_get: notAnArray }} !! html

ArrayFunctions (#af_get): Could not match expected type array with actual type string for parameter 1 ("notAnArray").

!! end !! test Test get empty list !! wikitext {{#af_get: {{AF_EMPTY}} | 0 }} !! html !! end !! test Test get multiple wildcards !! wikitext {{#af_print: {{#af_get: {{#af_object: a={{#af_object: x=1 | y=2 }} | b={{#af_object: x=3 | y=4 }} }} | * | x }} }} !! html !! end !! test Test get with no keys returns entire array !! wikitext {{#af_print: {{#af_get: {{#af_list: 1 | 2 | 3 }} }} }} !! html !! end