Jump to content

Module:String/testcases: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add tests for the empty string and the pipe character, and group escaped test strings together
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
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
return p

Revision as of 09:21, 26 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

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