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'
local nilArg = 'nilArg'
--------------------------------------------------------------------------
-- 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)
if args[key] ~= nil then
return args[key]
else
return nilArg
end
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(nilArg, 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(nilArg, second)
self:assertEquals(defaultArgs.invoke, invoke)
end
--------------------------------------------------------------------------
-- Test default trimming
--------------------------------------------------------------------------
suite.defaultTrimming = suite.makeInvokeFunction(2)
function suite:testDefaultTrimming()
local arg = suite.expandTestTemplate('defaultTrimming', nil, ' argWithPadding ')
self:assertEquals('argWithPadding', arg)
end
--------------------------------------------------------------------------
-- Test no trimming
--------------------------------------------------------------------------
suite.noTrimming = suite.makeInvokeFunction(2, {trim = false})
function suite:testNoTrimming()
local arg = suite.expandTestTemplate('noTrimming', nil, ' argWithPadding ')
self:assertEquals(' argWithPadding ', arg)
end
--------------------------------------------------------------------------
-- Test default blank removal
--------------------------------------------------------------------------
suite.defaultBlankRemoval = suite.makeInvokeFunction(2)
function suite:testDefaultBlankRemoval()
local arg = suite.expandTestTemplate('defaultBlankRemoval', nil, '')
self:assertEquals(nilArg, arg)
end
--------------------------------------------------------------------------
-- Test no blank removal
--------------------------------------------------------------------------
suite.noBlankRemoval = suite.makeInvokeFunction(2, {removeBlanks = false})
function suite:testNoBlankRemoval()
local arg = suite.expandTestTemplate('noBlankRemoval', nil, '')
self:assertEquals('', arg)
end
--------------------------------------------------------------------------
-- Test valueFunc
--------------------------------------------------------------------------
suite.valueFunc = suite.makeInvokeFunction(2, {valueFunc = function () return 'valueFuncValue' end})
function suite:testValueFunc()
local arg = suite.getDefaultTemplateExpansion('valueFunc')
self:assertEquals('valueFuncValue', arg)
end
--------------------------------------------------------------------------
-- Test valueFunc key
--------------------------------------------------------------------------
suite.valueFuncKey = suite.makeInvokeFunction(2, {valueFunc = function (key, val) return 'valueFuncKey: ' .. tostring(key) end})
function suite:testValueFuncKey()
local arg = suite.getDefaultTemplateExpansion('valueFuncKey')
self:assertEquals('valueFuncKey: 2', arg)
end
--------------------------------------------------------------------------
-- Test valueFunc value
--------------------------------------------------------------------------
suite.valueFuncValue = suite.makeInvokeFunction(2)
function suite:testValueFuncValue()
local arg = suite.expandTestTemplate('valueFuncValue', nil, nil)
self:assertEquals('valueFuncValue: ' .. defaultArgs[2], arg)
end
return suite