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/sandbox').getArgs
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
--------------------------------------------------------------------------
-- Default values
--------------------------------------------------------------------------
local d = {}
d.frameTitle = 'Frame title'
d.parentTitle = 'Parent title'
-- Precedence-testing values
d.firstFrameArg = 'first frame argument'
d.firstParentArg = 'first parent argument'
d.secondParentArg = 'second parent argument'
d.uniqueFrameArg = 'unique frame argument'
d.uniqueFrameArgKey = 'uniqueFrameArgKey'
d.uniqueParentArg = 'unique parent argument'
d.uniqueParentArgKey = 'uniqueParentArgKey'
-- Trimming and whitespace values.
-- Whitespace gets trimmed from named parameters, so keys for these need
-- to be numbers
d.blankArg = ''
d.blankArgKey = 100
d.spacesArg = '\n '
d.spacesArgKey = 101
d.untrimmedArg = '\n foo bar '
d.untrimmedArgKey = 102
d.trimmedArg = 'foo bar'
d.valueFuncValue = 'valueFuncValue'
d.defaultValueFunc = function() return d.valueFuncValue end
d.randomKey = 'a random key: oesidfk374g'
--------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------
function suite.getFrames(frameTitle, frameArgs, parentTitle, parentArgs)
local currentFrame = mw.getCurrentFrame()
local parent = currentFrame:newChild{title = parentTitle, args = parentArgs}
local frame = parent:newChild{title = frameTitle, args = frameArgs}
return frame, parent
end
function suite.getDefaultFrames()
local frameTitle = d.frameTitle
local frameArgs = {
d.firstFrameArg,
[d.uniqueFrameArgKey] = d.uniqueFrameArg,
[d.blankArgKey] = d.blankArg,
[d.spacesArgKey] = d.spacesArg,
[d.untrimmedArgKey] = d.untrimmedArg
}
local parentTitle = d.parentTitle
local parentArgs = {
d.firstParentArg,
d.secondParentArg,
[d.uniqueParentArgKey] = d.uniqueParentArg
}
return suite.getFrames(frameTitle, frameArgs, parentTitle, parentArgs)
end
function suite.getDefaultArgs(options)
local frame, parent = suite.getDefaultFrames()
local args = getArgs(frame, options)
return args
end
function suite:assertHtmlError(s)
self:assertTrue(s:find('^<strong class="error">.*</strong>$'))
end
--------------------------------------------------------------------------
-- Test precedence
--------------------------------------------------------------------------
function suite:testDefaultPrecedence()
local args = suite.getDefaultArgs()
self:assertEquals(d.firstFrameArg, args[1])
self:assertEquals(d.secondParentArg, args[2])
self:assertEquals(d.uniqueFrameArg, args[d.uniqueFrameArgKey])
self:assertEquals(d.uniqueParentArg, args[d.uniqueParentArgKey])
end
function suite:testParentFirst()
local args = suite.getDefaultArgs{parentFirst = true}
self:assertEquals(d.firstParentArg, args[1])
self:assertEquals(d.secondParentArg, args[2])
self:assertEquals(d.uniqueFrameArg, args[d.uniqueFrameArgKey])
self:assertEquals(d.uniqueParentArg, args[d.uniqueParentArgKey])
end
function suite:testParentOnly()
local args = suite.getDefaultArgs{parentOnly = true}
self:assertEquals(d.firstParentArg, args[1])
self:assertEquals(d.secondParentArg, args[2])
self:assertEquals(nil, args[d.uniqueFrameArgKey])
self:assertEquals(d.uniqueParentArg, args[d.uniqueParentArgKey])
end
function suite:testFrameOnly()
local args = suite.getDefaultArgs{frameOnly = true}
self:assertEquals(d.firstFrameArg, args[1])
self:assertEquals(nil, args[2])
self:assertEquals(d.uniqueFrameArg, args[d.uniqueFrameArgKey])
self:assertEquals(nil, args[d.uniqueParentArgKey])
end
--------------------------------------------------------------------------
-- Test trimming and blank removal
--------------------------------------------------------------------------
function suite:testDefaultTrimmingAndBlankRemoval()
local args = suite.getDefaultArgs()
self:assertEquals(nil, args[d.blankArgKey])
self:assertEquals(nil, args[d.spacesArgKey])
self:assertEquals(d.trimmedArg, args[d.untrimmedArgKey])
end
function suite:testRemoveBlanksButNoTrimming()
local args = suite.getDefaultArgs{trim = false}
self:assertEquals(nil, args[d.blankArgKey])
self:assertEquals(nil, args[d.spacesArgKey])
self:assertEquals(d.untrimmedArg, args[d.untrimmedArgKey])
end
function suite:testTrimButNoBlankRemoval()
local args = suite.getDefaultArgs{removeBlanks = false}
self:assertEquals(d.blankArg, args[d.blankArgKey])
self:assertEquals('', args[d.spacesArgKey])
self:assertEquals(d.trimmedArg, args[d.untrimmedArgKey])
end
function suite:testNoTrimOrBlankRemoval()
local args = suite.getDefaultArgs{trim = false, removeBlanks = false}
self:assertEquals(d.blankArg, args[d.blankArgKey])
self:assertEquals(d.spacesArg, args[d.spacesArgKey])
self:assertEquals(d.untrimmedArg, args[d.untrimmedArgKey])
end
--------------------------------------------------------------------------
-- Test valueFunc
--------------------------------------------------------------------------
function suite:testValueFunc()
local args = suite.getDefaultArgs{valueFunc = d.defaultValueFunc}
self:assertEquals(d.valueFuncValue, args[d.randomKey])
end
function suite:testValueFuncPrecedence()
local args = suite.getDefaultArgs{
trim = false,
removeBlanks = false,
valueFunc = d.defaultValueFunc
}
self:assertEquals(d.valueFuncValue, args[1])
self:assertEquals(d.valueFuncValue, args[d.randomKey])
end
function suite:testValueFuncKey()
local args = suite.getDefaultArgs{valueFunc = function(key, value)
return 'valueFunc key: '.. key
end}
self:assertEquals('valueFunc key: foo', args.foo)
end
function suite:testValueFuncValue()
local args = suite.getDefaultArgs{valueFunc = function(key, value)
return 'valueFunc value: '.. value
end}
self:assertEquals(
'valueFunc value: ' .. d.uniqueFrameArg,
args[d.uniqueFrameArgKey]
)
end
--[=[
--------------------------------------------------------------------------
-- Test default arg writing
--------------------------------------------------------------------------
suite.defaultArgWriting = suite.makeInvokeFunction(arbitraryKey, nil, valueWrittenToArgs)
function suite:testDefaultArgWriting()
local arg = suite.getDefaultTemplateExpansion('defaultArgWriting')
self:assertEquals(valueWrittenToArgs, arg)
end
--------------------------------------------------------------------------
-- Test default arg overwrite
--------------------------------------------------------------------------
suite.defaultArgOverwrite = suite.makeInvokeFunction(keyWithPriority, nil, overwrittenValue)
function suite:testDefaultArgOverwrite()
local arg = suite.getDefaultTemplateExpansion('defaultArgOverwrite')
self:assertEquals(overwrittenValue, arg)
end
--------------------------------------------------------------------------
-- Test read only
--------------------------------------------------------------------------
suite.readOnly = suite.makeInvokeFunction(arbitraryKey, {readOnly = true}, valueWrittenToArgs)
function suite:testReadOnly()
local arg = suite.getDefaultTemplateExpansion('readOnly')
self:assertHtmlError(arg)
end
--------------------------------------------------------------------------
-- Test no overwrite
--------------------------------------------------------------------------
suite.noOverwrite = suite.makeInvokeFunction(keyWithPriority, {noOverwrite = true}, overwrittenValue)
function suite:testNoOverwrite()
local arg = suite.getDefaultTemplateExpansion('noOverwrite')
self:assertHtmlError(arg)
end
--------------------------------------------------------------------------
-- Test making existing arg nil
--------------------------------------------------------------------------
function suite:testMakeExistingArgNil()
end
--]=]
return suite