Difference between revisions of "Module:Reply to/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
(expand the test cases)
blackwiki>Mr. Stradivarius
(add special format tests)
Line 2: Line 2:
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local suite = ScribuntoUnit:new()
 
local suite = ScribuntoUnit:new()
 
 
local frame = mw.getCurrentFrame()
 
local frame = mw.getCurrentFrame()
  
Line 31: Line 30:
 
pattern = '^<strong class="error">Error in %[%[Template:Reply to%]%]: ' .. pattern .. '.</strong>$'
 
pattern = '^<strong class="error">Error in %[%[Template:Reply to%]%]: ' .. pattern .. '.</strong>$'
 
self:assertStringContains(pattern, output)
 
self:assertStringContains(pattern, output)
 +
end
 +
 +
function suite:assertContentEquals(expected, actual)
 +
expected = '<span class="template-ping">' .. expected .. '</span>'
 +
self:assertEquals(expected, actual)
 
end
 
end
  
Line 57: Line 61:
  
 
function suite:testOneUsername()
 
function suite:testOneUsername()
self:assertEquals(
+
self:assertContentEquals(
'<span class="template-ping">@[[:User:Example|Example]]:</span>',
+
'@[[:User:Example|Example]]:',
 
replyTo{'Example'}
 
replyTo{'Example'}
 
)
 
)
Line 64: Line 68:
  
 
function suite:testTwoUsernames()
 
function suite:testTwoUsernames()
self:assertEquals(
+
self:assertContentEquals(
'<span class="template-ping">@[[:User:Example|Example]] and [[:User:Example2|Example2]]:</span>',
+
'@[[:User:Example|Example]] and [[:User:Example2|Example2]]:',
 
replyTo{'Example', 'Example2'}
 
replyTo{'Example', 'Example2'}
 
)
 
)
Line 71: Line 75:
  
 
function suite:testThreeUsernames()
 
function suite:testThreeUsernames()
self:assertEquals(
+
self:assertContentEquals(
'<span class="template-ping">@[[:User:Example|Example]], [[:User:Example2|Example2]], and [[:User:Example3|Example3]]:</span>',
+
'@[[:User:Example|Example]], [[:User:Example2|Example2]], and [[:User:Example3|Example3]]:',
 
replyTo{'Example', 'Example2', 'Example3'}
 
replyTo{'Example', 'Example2', 'Example3'}
 
)
 
)
Line 78: Line 82:
  
 
function suite:testFourUsernames()
 
function suite:testFourUsernames()
self:assertEquals(
+
self:assertContentEquals(
'<span class="template-ping">@[[:User:Example|Example]], [[:User:Example2|Example2]], [[:User:Example3|Example3]], and [[:User:Example4|Example4]]:</span>',
+
'@[[:User:Example|Example]], [[:User:Example2|Example2]], [[:User:Example3|Example3]], and [[:User:Example4|Example4]]:',
 
replyTo{'Example', 'Example2', 'Example3', 'Example4'}
 
replyTo{'Example', 'Example2', 'Example3', 'Example4'}
 +
)
 +
end
 +
 +
--------------------------------------------------------------------------------
 +
-- Test special formatting
 +
--------------------------------------------------------------------------------
 +
 +
function suite:testPrefix()
 +
self:assertContentEquals(
 +
'foo[[:User:Example|Example]]:',
 +
replyTo{'Example', prefix = 'foo'}
 +
)
 +
end
 +
 +
function suite:testBlankPrefix()
 +
self:assertContentEquals(
 +
'[[:User:Example|Example]]:',
 +
replyTo{'Example', prefix = ''}
 +
)
 +
end
 +
 +
function suite:testConjunction()
 +
self:assertContentEquals(
 +
'@[[:User:Example|Example]], [[:User:Example2|Example2]], foo [[:User:Example3|Example3]]:',
 +
replyTo{'Example', 'Example2', 'Example3', c = 'foo'}
 +
)
 +
end
 +
 +
function suite:testBlankConjunction()
 +
self:assertContentEquals(
 +
'@[[:User:Example|Example]], [[:User:Example2|Example2]],  [[:User:Example3|Example3]]:', -- FIXME - too many spaces
 +
replyTo{'Example', 'Example2', 'Example3', c = ''}
 +
)
 +
end
 +
 +
function suite:testPunctuation()
 +
self:assertContentEquals(
 +
'@[[:User:Example|Example]]foo',
 +
replyTo{'Example', p = 'foo'}
 +
)
 +
end
 +
 +
function suite:testBlankPunctuation()
 +
self:assertContentEquals(
 +
'@[[:User:Example|Example]]',
 +
replyTo{'Example', p = ''}
 
)
 
)
 
end
 
end
  
 
return suite
 
return suite

Revision as of 02:41, 29 November 2016

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

local mReplyTo = require('Module:Reply to') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
local frame = mw.getCurrentFrame()

--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------

local function makeFrameWithParentArgs(args)
	local parent = frame:newChild{title = 'Template:Reply to', args = args}
	local child = parent:newChild{title = 'Module:Reply to'}
	return child
end

local function replyTo(args)
	return mReplyTo.replyto(makeFrameWithParentArgs(args))
end

-- Returns an array of n unique strings.
local function makeNUniqueStrings(n)
	local ret = {}
	for i = 1, n do
		ret[i] = tostring(i)
	end
	return ret
end

function suite:assertHtmlError(pattern, output)
	pattern = '^<strong class="error">Error in %[%[Template:Reply to%]%]: ' .. pattern .. '.</strong>$'
	self:assertStringContains(pattern, output)
end

function suite:assertContentEquals(expected, actual)
	expected = '<span class="template-ping">' .. expected .. '</span>'
	self:assertEquals(expected, actual)
end

--------------------------------------------------------------------------------
-- Error tests
--------------------------------------------------------------------------------

function suite:testNoUsernamesError()
    self:assertHtmlError('Username not given', replyTo{})
end

function suite:testInvalidUsernameError()
    self:assertHtmlError('Input contains forbidden characters', replyTo{'Examp|le'})
end

function suite:testTooManyUsernamesError()
	self:assertHtmlError(
		'More than %d+ names specified',
		replyTo(makeNUniqueStrings(1000)) -- The limit is probably always going to be lower than 1000
	)
end

--------------------------------------------------------------------------------
-- Test defaults
--------------------------------------------------------------------------------

function suite:testOneUsername()
	self:assertContentEquals(
		'@[[:User:Example|Example]]:',
		replyTo{'Example'}
	)
end

function suite:testTwoUsernames()
	self:assertContentEquals(
		'@[[:User:Example|Example]] and [[:User:Example2|Example2]]:',
		replyTo{'Example', 'Example2'}
	)
end

function suite:testThreeUsernames()
	self:assertContentEquals(
		'@[[:User:Example|Example]], [[:User:Example2|Example2]], and [[:User:Example3|Example3]]:',
		replyTo{'Example', 'Example2', 'Example3'}
	)
end

function suite:testFourUsernames()
	self:assertContentEquals(
		'@[[:User:Example|Example]], [[:User:Example2|Example2]], [[:User:Example3|Example3]], and [[:User:Example4|Example4]]:',
		replyTo{'Example', 'Example2', 'Example3', 'Example4'}
	)
end

--------------------------------------------------------------------------------
-- Test special formatting
--------------------------------------------------------------------------------

function suite:testPrefix()
	self:assertContentEquals(
		'foo[[:User:Example|Example]]:',
		replyTo{'Example', prefix = 'foo'}
	)
end

function suite:testBlankPrefix()
	self:assertContentEquals(
		'[[:User:Example|Example]]:',
		replyTo{'Example', prefix = ''}
	)
end

function suite:testConjunction()
	self:assertContentEquals(
		'@[[:User:Example|Example]], [[:User:Example2|Example2]], foo [[:User:Example3|Example3]]:',
		replyTo{'Example', 'Example2', 'Example3', c = 'foo'}
	)
end

function suite:testBlankConjunction()
	self:assertContentEquals(
		'@[[:User:Example|Example]], [[:User:Example2|Example2]],  [[:User:Example3|Example3]]:', -- FIXME - too many spaces
		replyTo{'Example', 'Example2', 'Example3', c = ''}
	)
end

function suite:testPunctuation()
	self:assertContentEquals(
		'@[[:User:Example|Example]]foo',
		replyTo{'Example', p = 'foo'}
	)
end

function suite:testBlankPunctuation()
	self:assertContentEquals(
		'@[[:User:Example|Example]]',
		replyTo{'Example', p = ''}
	)
end

return suite