Jump to content

Module:String/testcases: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
fix syntax for the no pattern test
add tests for the empty string and the pipe character, and group escaped test strings together
Line 107: Line 107:
{'!', '!'},
{'!', '!'},
{'"', '"'},
{'"', '"'},
{'x#', 'x#'}, -- We can't just test "#" because it will be interpreted as a list
{'&', '&'},
{'&', '&'},
{"'", "'"},
{"'", "'"},
{'1==', '='}, -- Need to escape the "foo = bar" template syntax
{'{', '{'},
{'{', '{'},
{'}', '}'},
{'}', '}'},
{'`', '`'},
{'`', '`'},
{'@', '@'},
{'@', '@'},
{'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
{',', ','},
{',', ','},
{'<', '<'},
{'<', '<'},
Line 125: Line 121:
{'~', '~'},
{'~', '~'},
{' ', ' '},
{' ', ' '},
{'', ''},
{'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', '<strong class="error">String Module Error: No pattern string specified</strong>'},
{'no_category=true', '<strong class="error">String Module Error: No pattern string specified</strong>'},
})
})

Revision as of 14:55, 3 May 2019

-- 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', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
end
function p:test_match()
    self:preprocess_equals_many('{{#invoke:String|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', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
    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', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
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', '<strong class="error">String Module Error: function rep expects a number as second parameter, received "glug"</strong>'},
        {'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', '<strong class="error">String Module Error: function rep expects a number as second parameter, received "glug"</strong>'},
        {'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', '<strong class="error">String Module Error: No pattern string specified</strong>'},
    })
end

return p