!! Version 2
# Force the test runner to ensure the extension is loaded
!! functionhooks
af_keysort
!! endfunctionhooks
# This file tests the #af_keysort parser function
!! test
Test empty array
!! wikitext
{{#af_print: {{#af_keysort: {{AF_EMPTY}} | foo }} }}
!! html
!! end
!! test
Test keysort on list does not change
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list: a | c | b }} | foo }} }}
!! html
!! end
!! test
Test keysort on list does not change numeric key
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list: a | c | b }} | 0 }} }}
!! html
!! end
!! test
Test keysort mixed objects and values
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=John | age=56 }} |
foo |
{{#af_object: name=Harry | age=12 }} |
{{#af_object: name=Bob | age=24 }} |
bar
}} | age }} }}
!! html
!! end
!! test
Test keysort resets keys
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=John | age=56 }} |
{{#af_object: name=Harry | age=12 }} |
{{#af_object: name=Bob | age=24 }}
}} | age }} }}
!! html
!! end
!! test
Test keysort missing key is less
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=John | age=56 }} |
{{#af_object: name=Harry }} |
{{#af_object: name=Bob | age=24 }}
}} | age }} }}
!! html
!! end
!! test
Test keysort missing is less than zero missing
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=John | age=56 }} |
{{#af_object: name=Harry | age=0 }} |
{{#af_object: name=Bob }}
}} | age }} }}
!! html
!! end
!! test
Test keysort descending
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=John | age=56 }} |
{{#af_object: name=Harry | age=12 }} |
{{#af_object: name=Bob | age=24 }}
}} | age | descending=true }} }}
!! html
!! end
!! test
Test keysort case insensitive
!! wikitext
{{#af_print: {{#af_keysort: {{#af_list:
{{#af_object: name=b }} |
{{#af_object: name=B }} |
{{#af_object: name=b }} |
{{#af_object: name=a }} |
{{#af_object: name=A }} |
{{#af_object: name=C }}
}} | name | caseinsensitive=true }} }}
!! html
!! end
!! test
Test too few arguments
!! wikitext
{{#af_keysort: {{#af_list: a | b | c }} }}
!! html
ArrayFunctions (#af_keysort): Expected at least 2 positional parameters, 1 given.
!! end
!! test
Test too many arguments
!! wikitext
{{#af_keysort: {{#af_list: a | b | c }} | a | b }}
!! html
ArrayFunctions (#af_keysort): Expected at most 2 positional parameters, 3 given.
!! end
!! test
Test first argument must be array
!! wikitext
{{#af_keysort: foobar | a }}
!! html
ArrayFunctions (#af_keysort): Could not match expected type array with actual type string for parameter 1 ("foobar").
!! end