Module:String/testcases

-- Unit tests for Module:String. Click talk page to run tests.

local p = require('Module:UnitTests')

function p:test_len()

self:preprocess_equals_many('{{#invoke:String/sandbox|len|', '}}', {

{' foo ', '5'},

{'s= foo ', '3'},

{'', '0'},

{'s=', '0'},

{' ', '3'},

{'最近の更新', '5'},

})

end

function p:test_replace()

self:preprocess_equals_many('{{#invoke:String/sandbox|replace|', '}}', {

{'1.1.1.1|.|/', '1/1/1/1'},

{'alpha (beta)| (| gamma (', 'alpha gamma (beta)'},

{'Dog (cat)|%s%(.*%)||plain=false', 'Dog'},

})

end

function p:test_match()

self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', {

{'dog (cat)|%((%a-)%)', 'cat'},

{'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},

{'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},

{'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},

{'dog (cat) (canary) (fish)|%((%a-)%)|6|2', 'fish'},

{'dog (cat)|%((%a-)%)||2|no_category=true', 'String Module Error: Match not found'},

{'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},

})

end

function p:test_match()

local cases = {

{'dog (cat)|%((%a-)%)', 'cat'},

{'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},

{'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},

{'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},

{'dog (cat) (canary) (fish)|%((%a-)%)|6|2', 'fish'},

{'dog (cat)|%((%a-)%)||2|no_category=true', 'String Module Error: Match not found'},

{'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},

}

self:preprocess_equals_many('{{#invoke:String|match|', '}}', cases)

self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', cases)

end

function p:test_match_reverse()

local cases = {

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-1', '6'},

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-2', '5'},

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-4', '3'},

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-5', '2'},

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-6', '1'},

{'a (1) (2) (3) (4) (5) (6) (a)|%((%d)%)||-7|no_category=true', 'String Module Error: Match not found'},

}

self:preprocess_equals_many('{{#invoke:String|match|', '}}', cases)

self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', cases)

end

function p:test_find()

self:preprocess_equals_many('{{#invoke:String/sandbox|find|', '}}', {

{'', '0'},

{'source=', '0'},

{'source=|target=', '0'},

{'source=|target=Bob', '0'},

{'Bob|Joe', '0'},

{'Bob|b', '3'},

{'Bob Joe|oe', '6'},

{'source= Bob |o', '2'},

{' Bob |o', '3'},

{'높지만 급격히|만', '3'},

{'source=BAAAB|target=%w|plain=false', '1'},

{'source=BAAAB|target=%w|start=3|plain=false', '3'},

{'source=BAAAB|target=(%w)%1|plain=false', '2'},

})

end

function p:test_rep()

self:preprocess_equals_many('{{#invoke:String|rep|', '}}', {

{'abc|1', 'abc'},

{'a b|7', 'a ba ba ba ba ba ba b'},

{'bla|glug|no_category=true', 'String Module Error: function rep expects a number as second parameter, received "glug"'},

{'bla|glug|ignore_errors=true', ''},

{'àèò|3', 'àèòàèòàèò'}

})

self:preprocess_equals_many('{{#invoke:String/sandbox|rep|', '}}', {

{'abc|1', 'abc'},

{'a b|7', 'a ba ba ba ba ba ba b'},

{'bla|glug|no_category=true', 'String Module Error: function rep expects a number as second parameter, received "glug"'},

{'bla|glug|ignore_errors=true', ''},

{'àèò|3', 'àèòàèòàèò'}

})

end

function p:test_escapePattern()

self:preprocess_equals_many('{{#invoke:String/sandbox|escapePattern|', '}}', {

{'foo', 'foo'},

{'A.D.', 'A%.D%.'},

{'0123', '0123'},

{'^', '%^'},

{'$', '%$'},

{'(', '%('},

{')', '%)'},

{'%', '%%'},

{'.', '%.'},

{'[', '%['},

{']', '%]'},

{'*', '%*'},

{'+', '%+'},

{'-', '%-'},

{'?', '%?'},

{'!', '!'},

{'"', '"'},

{'&', '&'},

{"'", "'"},

{'{', '{'},

{'}', '}'},

{'`', '`'},

{'@', '@'},

{',', ','},

{'<', '<'},

{'>', '>'},

{'/', '/'},

{'_', '_'},

{'\\', '\\'},

{'~', '~'},

{' ', ' '},

{, },

{'x#', 'x#'}, -- We can't just test "#" because it will be interpreted as a list

{'x;', 'x;'}, -- We can't just test ";" because it will be interpreted as a list

{'x:', 'x:'}, -- We can't just test ":" because it will be interpreted as a list

{'{{!}}', '|'}, -- Need to escape the template pipe syntax

{'1==', '='}, -- Need to escape the "foo = bar" template syntax

{'no_category=true', 'String Module Error: No pattern string specified'},

})

end

function p:test_join()

self:preprocess_equals_many('{{#invoke:String/sandbox|join|', '}}', {

{, },

{'X', ''},

{'X|a', 'a'},

{'X|a|b', 'aXb'},

{'X|a|b|c', 'aXbXc'},

{'X|a|b|c|d', 'aXbXcXd'},

{'X|a|b||d', 'aXbXd'},

{'X|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z', 'aXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXz'}

})

end

return p