Difference between revisions of "Module:Arguments/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
(test getting the testcase module invocation)
blackwiki>Mr. Stradivarius
(more abstraction)
Line 4: Line 4:
  
 
-- Constants
 
-- Constants
local firstInvokeArg = 'firstInvokeArg'
+
 
local defaultFirstTemplateArg = 'firstTemplateArg'
+
local defaultArgs = {}
local defaultSecondTemplateArg = 'secondTemplateArg'
+
 
 +
defaultArgs.invoke = 'firstInvokeArg'
 +
defaultArgs[1] = 'firstTemplateArg'
 +
defaultArgs[2]  = 'secondTemplateArg'
  
 
--------------------------------------------------------------------------
 
--------------------------------------------------------------------------
Line 25: Line 28:
  
 
function suite.getDefaultTemplateExpansion(funcName)
 
function suite.getDefaultTemplateExpansion(funcName)
return suite.expandTestTemplate(funcName, defaultFirstTemplateArg, defaultSecondTemplateArg)
+
return suite.expandTestTemplate(funcName, defaultArgs[1], defaultArgs[2])
 
end
 
end
  
Line 34: Line 37:
 
end
 
end
  
function suite.createInvokeFunction(key, options)
+
function suite.getDefaultExpansions(testcaseName)
 +
local first = suite.getDefaultTemplateExpansion(testcaseName .. 'First')
 +
local second = suite.getDefaultTemplateExpansion(testcaseName .. 'Second')
 +
local invoke = suite.getInvocation(testcaseName .. 'First')
 +
return first, second, invoke
 +
end
 +
 
 +
function suite.makeInvokeFunction(key, options)
 
return function (frame)
 
return function (frame)
 
options = options or {}
 
options = options or {}
Line 40: Line 50:
 
return args[key]
 
return args[key]
 
end
 
end
 +
end
 +
 +
function suite.makeArgInvokeFunctions(testcaseName, options)
 +
suite[testcaseName .. 'First'] = suite.makeInvokeFunction(1, options)
 +
suite[testcaseName .. 'Second'] = suite.makeInvokeFunction(2, options)
 
end
 
end
  
Line 46: Line 61:
 
--------------------------------------------------------------------------
 
--------------------------------------------------------------------------
  
suite.defaultPrecedenceFirst = suite.createInvokeFunction(1)
+
suite.makeArgInvokeFunctions('defaultPrecedence')
suite.defaultPrecedenceSecond = suite.createInvokeFunction(2)
 
  
 
function suite:testDefaultPrecedence()
 
function suite:testDefaultPrecedence()
local first = suite.getDefaultTemplateExpansion('defaultPrecedenceFirst')
+
local first, second, invoke = suite.getDefaultExpansions('defaultPrecedence')
local second = suite.getDefaultTemplateExpansion('defaultPrecedenceSecond')
+
self:assertEquals(defaultArgs.invoke, first)
local invoke = suite.getInvocation('defaultPrecedenceFirst')
+
self:assertEquals(defaultArgs[2], second)
self:assertEquals(firstInvokeArg, first)
+
self:assertEquals(defaultArgs.invoke, invoke)
self:assertEquals(defaultSecondTemplateArg, second)
 
self:assertEquals(firstInvokeArg, invoke)
 
 
end
 
end
  
 
return suite
 
return suite

Revision as of 02:13, 10 December 2013

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

local getArgs = require('Module:Arguments').getArgs
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

-- Constants

local defaultArgs = {}

defaultArgs.invoke = 'firstInvokeArg'
defaultArgs[1] = 'firstTemplateArg'
defaultArgs[2]  = 'secondTemplateArg'

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

------------------ Template invocations used by the module --------------------
-- Module talk:Arguments/testInvoke:
-- {{#invoke:arguments/testcases|{{{function|}}}|firstInvokeArg}}
-- Module talk:Arguments/testTemplate:
-- {{Module talk:Arguments/testInvoke|{{{1|}}}|{{{2|}}}|blank=|function={{{function|}}}}}

function suite.expandTestTemplate(funcName, para1, para2)
	local frame = mw.getCurrentFrame()
	local val = frame:preprocess('{{Module talk:Arguments/testTemplate|' .. para1 .. '|' .. para2 .. '|function=' .. funcName .. '}}')
	return val
end

function suite.getDefaultTemplateExpansion(funcName)
	return suite.expandTestTemplate(funcName, defaultArgs[1], defaultArgs[2])
end

function suite.getInvocation(funcName)
	local frame = mw.getCurrentFrame()
	local val = frame:preprocess('{{Module talk:Arguments/testInvoke|function=' .. funcName .. '}}')
	return val
end

function suite.getDefaultExpansions(testcaseName)
	local first = suite.getDefaultTemplateExpansion(testcaseName .. 'First')
	local second = suite.getDefaultTemplateExpansion(testcaseName .. 'Second')
	local invoke = suite.getInvocation(testcaseName .. 'First')
	return first, second, invoke
end

function suite.makeInvokeFunction(key, options)
	return function (frame)
		options = options or {}
		local args = getArgs(frame, options)
		return args[key]
	end
end

function suite.makeArgInvokeFunctions(testcaseName, options)
	suite[testcaseName .. 'First'] = suite.makeInvokeFunction(1, options)
	suite[testcaseName .. 'Second'] = suite.makeInvokeFunction(2, options)
end

--------------------------------------------------------------------------
-- Test default precedence
--------------------------------------------------------------------------

suite.makeArgInvokeFunctions('defaultPrecedence')

function suite:testDefaultPrecedence()
	local first, second, invoke = suite.getDefaultExpansions('defaultPrecedence')
	self:assertEquals(defaultArgs.invoke, first)
	self:assertEquals(defaultArgs[2], second)
	self:assertEquals(defaultArgs.invoke, invoke)
end

return suite