Module:Arguments/testcases
Appearance
![]() | This is the test cases page for the module Module:Arguments. Results of the test cases. |
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 or '') .. '|' .. (para2 or '') .. '|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
--------------------------------------------------------------------------
-- Test parent first
--------------------------------------------------------------------------
suite.makeArgInvokeFunctions('parentFirst', {parentFirst = true})
function suite:testParentFirst()
local first, second, invoke = suite.getDefaultExpansions('parentFirst')
self:assertEquals(defaultArgs[1], first)
self:assertEquals(defaultArgs[2], second)
self:assertEquals(defaultArgs.invoke, invoke)
end
--------------------------------------------------------------------------
-- Test parent only
--------------------------------------------------------------------------
suite.makeArgInvokeFunctions('parentOnly', {parentOnly = true})
function suite:testParentOnly()
local first, second, invoke = suite.getDefaultExpansions('parentOnly')
self:assertEquals(defaultArgs[1], first)
self:assertEquals(defaultArgs[2], second)
self:assertEquals('', invoke)
end
--------------------------------------------------------------------------
-- Test frame only
--------------------------------------------------------------------------
suite.makeArgInvokeFunctions('frameOnly', {frameOnly = true})
function suite:testFrameOnly()
local first, second, invoke = suite.getDefaultExpansions('frameOnly')
self:assertEquals(defaultArgs.invoke, first)
self:assertEquals('', second)
self:assertEquals(defaultArgs.invoke, invoke)
end
--------------------------------------------------------------------------
-- Test default trimming
--------------------------------------------------------------------------
suite.defaultTrimming = suite.makeInvokeFunction(2)
function suite:testFrameOnly()
local arg = suite.expandTestTemplate('defaultTrimming', nil, ' argWithPadding ')
self:assertEquals('argWithPadding', arg)
end
return suite