Difference between revisions of "Module:String/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
(add tests for the empty string and the pipe character, and group escaped test strings together)
blackwiki>Gonnym
(add the join() testcases from the merged module. The other functions of that module weren't merged so left those testcases)
Line 1: Line 1:
 
-- Unit tests for [[Module:String]]. Click talk page to run tests.
 
-- Unit tests for [[Module:String]]. Click talk page to run tests.
 
local p = require('Module:UnitTests')
 
local p = require('Module:UnitTests')
+
 
 
function p:test_len()
 
function p:test_len()
    self:preprocess_equals_many('{{#invoke:String/sandbox|len|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|len|', '}}', {
        {' foo ', '5'},
+
{' foo ', '5'},
        {'s= foo ', '3'},
+
{'s= foo ', '3'},
        {'', '0'},
+
{'', '0'},
        {'s=', '0'},
+
{'s=', '0'},
        {'  ', '3'},
+
{'  ', '3'},
        {'最近の更新', '5'},
+
{'最近の更新', '5'},
    })
+
})
 
end
 
end
  
 
function p:test_replace()
 
function p:test_replace()
    self:preprocess_equals_many('{{#invoke:String/sandbox|replace|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|replace|', '}}', {
        {'1.1.1.1|.|/', '1/1/1/1'},
+
{'1.1.1.1|.|/', '1/1/1/1'},
        {'alpha (beta)| (| gamma (', 'alpha gamma (beta)'},
+
{'alpha (beta)| (| gamma (', 'alpha gamma (beta)'},
        {'Dog (cat)|%s%(.*%)||plain=false', 'Dog'},
+
{'Dog (cat)|%s%(.*%)||plain=false', 'Dog'},
    })
+
})
 
end
 
end
  
 
function p:test_match()
 
function p:test_match()
    self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', {
        {'dog (cat)|%((%a-)%)', 'cat'},
+
{'dog (cat)|%((%a-)%)', 'cat'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|2', 'fish'},
+
{'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|no_category=true', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
+
{'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
+
})
 
end
 
end
 +
 
function p:test_match()
 
function p:test_match()
    self:preprocess_equals_many('{{#invoke:String|match|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String|match|', '}}', {
        {'dog (cat)|%((%a-)%)', 'cat'},
+
{'dog (cat)|%((%a-)%)', 'cat'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|2', 'fish'},
+
{'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|no_category=true', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
+
{'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
+
})
    self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|match|', '}}', {
        {'dog (cat)|%((%a-)%)', 'cat'},
+
{'dog (cat)|%((%a-)%)', 'cat'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||-1', 'fish'},
        {'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)||2', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
+
{'dog (cat) (canary) (fish)|%((%a-)%)|6|1', 'canary'},
        {'dog (cat) (canary) (fish)|%((%a-)%)|6|2', 'fish'},
+
{'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|no_category=true', '<strong class="error">String Module Error: Match not found</strong>'},
        {'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
+
{'dog (cat)|%((%a-)%)||2|ignore_errors=true', ''},
    })
+
})
 
end
 
end
  
 
function p:test_find()
 
function p:test_find()
    self:preprocess_equals_many('{{#invoke:String/sandbox|find|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|find|', '}}', {
        {'', '0'},
+
{'', '0'},
        {'source=', '0'},
+
{'source=', '0'},
        {'source=|target=', '0'},
+
{'source=|target=', '0'},
        {'source=|target=Bob', '0'},
+
{'source=|target=Bob', '0'},
        {'Bob|Joe', '0'},
+
{'Bob|Joe', '0'},
        {'Bob|b', '3'},
+
{'Bob|b', '3'},
        {'Bob Joe|oe', '6'},
+
{'Bob Joe|oe', '6'},
        {'source= Bob |o', '2'},
+
{'source= Bob |o', '2'},
        {' Bob |o', '3'},
+
{' Bob |o', '3'},
        {'높지만 급격히|만', '3'},
+
{'높지만 급격히|만', '3'},
        {'source=BAAAB|target=%w|plain=false', '1'},
+
{'source=BAAAB|target=%w|plain=false', '1'},
        {'source=BAAAB|target=%w|start=3|plain=false', '3'},
+
{'source=BAAAB|target=%w|start=3|plain=false', '3'},
        {'source=BAAAB|target=(%w)%1|plain=false', '2'},
+
{'source=BAAAB|target=(%w)%1|plain=false', '2'},
    })
+
})
 
end
 
end
  
 
function p:test_rep()
 
function p:test_rep()
    self:preprocess_equals_many('{{#invoke:String|rep|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String|rep|', '}}', {
        {'abc|1', 'abc'},
+
{'abc|1', 'abc'},
        {'a b|7', 'a ba ba ba ba ba ba b'},
+
{'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|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', ''},
+
{'bla|glug|ignore_errors=true', ''},
        {'àèò|3', 'àèòàèòàèò'}
+
{'àèò|3', 'àèòàèòàèò'}
    })
+
})
    self:preprocess_equals_many('{{#invoke:String/sandbox|rep|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|rep|', '}}', {
        {'abc|1', 'abc'},
+
{'abc|1', 'abc'},
        {'a b|7', 'a ba ba ba ba ba ba b'},
+
{'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|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', ''},
+
{'bla|glug|ignore_errors=true', ''},
        {'àèò|3', 'àèòàèòàèò'}
+
{'àèò|3', 'àèòàèòàèò'}
    })
+
})
 
end
 
end
  
 
function p:test_escapePattern()
 
function p:test_escapePattern()
    self:preprocess_equals_many('{{#invoke:String/sandbox|escapePattern|', '}}', {
+
self:preprocess_equals_many('{{#invoke:String/sandbox|escapePattern|', '}}', {
        {'foo', 'foo'},
+
{'foo', 'foo'},
        {'A.D.', 'A%.D%.'},
+
{'A.D.', 'A%.D%.'},
        {'0123', '0123'},
+
{'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
+
{'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
+
{'{{!}}', '|'}, -- Need to escape the template pipe syntax
        {'1==', '='}, -- Need to escape the "foo = bar" template 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>'},
    })
+
})
 +
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
 
end
 +
  
 
return p
 
return p

Revision as of 09:21, 26 May 2019

Documentation for this module may be created at Module:String/testcases/doc

-- 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

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