Difference between revisions of "Module:Arguments/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Mr. Stradivarius
(start converting trimming and blank removal tests)
blackwiki>Mr. Stradivarius
(finish trimming and blank removal tests)
Line 30: Line 30:
 
d.untrimmedArgKey = 102
 
d.untrimmedArgKey = 102
 
d.trimmedArg = 'foo bar'
 
d.trimmedArg = 'foo bar'
 +
d.valueFuncValue = 'valueFuncValue'
 +
d.defaultValueFunc = function() return d.valueFuncValue end
 +
d.randomKey = 'a random key: oesidfk374g'
  
 
--------------------------------------------------------------------------
 
--------------------------------------------------------------------------
Line 117: Line 120:
 
end
 
end
  
--[=[
+
function suite:testRemoveBlanksButNoTrimming()
--------------------------------------------------------------------------
+
local args = suite.getDefaultArgs{trim = false}
-- Test no trimming
+
self:assertEquals(nil, args[d.blankArgKey])
--------------------------------------------------------------------------
+
self:assertEquals(nil, args[d.spacesArgKey])
 
+
self:assertEquals(d.untrimmedArg, args[d.untrimmedArgKey])
suite.noTrimming = suite.makeInvokeFunction(keyWithPriority, {trim = false})
 
 
 
function suite:testNoTrimming()
 
local arg = suite.expandTestTemplate('noTrimming', nil, '  argWithPadding  ')
 
self:assertEquals('  argWithPadding  ', arg)
 
 
end
 
end
  
--------------------------------------------------------------------------
+
function suite:testTrimButNoBlankRemoval()
-- Test default blank removal
+
local args = suite.getDefaultArgs{removeBlanks = false}
--------------------------------------------------------------------------
+
self:assertEquals(d.blankArg, args[d.blankArgKey])
 
+
self:assertEquals('', args[d.spacesArgKey])
suite.defaultBlankRemoval = suite.makeInvokeFunction(keyWithPriority)
+
self:assertEquals(d.trimmedArg, args[d.untrimmedArgKey])
 
 
function suite:testDefaultBlankRemoval()
 
local arg = suite.expandTestTemplate('defaultBlankRemoval', nil, '')
 
self:assertEquals(nilArg, arg)
 
 
end
 
end
  
--------------------------------------------------------------------------
+
function suite:testNoTrimOrBlankRemoval()
-- Test no blank removal
+
local args = suite.getDefaultArgs{trim = false, removeBlanks = false}
--------------------------------------------------------------------------
+
self:assertEquals(d.blankArg, args[d.blankArgKey])
 
+
self:assertEquals(d.spacesArg, args[d.spacesArgKey])
suite.noBlankRemoval = suite.makeInvokeFunction(keyWithPriority, {removeBlanks = false})
+
self:assertEquals(d.untrimmedArg, args[d.untrimmedArgKey])
 
 
function suite:testNoBlankRemoval()
 
local arg = suite.expandTestTemplate('noBlankRemoval', nil, '')
 
self:assertEquals('', arg)
 
 
end
 
end
  
Line 154: Line 144:
 
-- Test valueFunc
 
-- Test valueFunc
 
--------------------------------------------------------------------------
 
--------------------------------------------------------------------------
 
suite.valueFunc = suite.makeInvokeFunction(keyWithPriority, {valueFunc = function () return 'valueFuncValue' end})
 
  
 
function suite:testValueFunc()
 
function suite:testValueFunc()
local arg = suite.getDefaultTemplateExpansion('valueFunc')
+
local args = suite.getDefaultArgs{valueFunc = d.defaultValueFunc}
self:assertEquals('valueFuncValue', arg)
+
self:assertEquals(d.valueFuncValue, args[d.randomKey])
 
end
 
end
  
--------------------------------------------------------------------------
+
function suite:testValueFuncPrecedence()
-- Test valueFunc key
+
local args = suite.getDefaultArgs{
--------------------------------------------------------------------------
+
trim = false,
 
+
removeBlanks = false,
suite.valueFuncKey = suite.makeInvokeFunction(keyWithPriority, {
+
valueFunc = d.defaultValueFunc
valueFunc = function (key, val)
+
}
if val then
+
self:assertEquals(d.valueFuncValue, args[1])
return 'valueFuncKey: ' .. tostring(key)
+
self:assertEquals(d.valueFuncValue, args[d.randomKey])
end
+
end
end
 
})
 
  
 
function suite:testValueFuncKey()
 
function suite:testValueFuncKey()
local arg = suite.getDefaultTemplateExpansion('valueFuncKey')
+
local args = suite.getDefaultArgs{valueFunc = function(key, value)
self:assertEquals('valueFuncKey: ' .. tostring(keyWithPriority), arg)
+
return 'valueFunc key: '.. key
 +
end}
 +
self:assertEquals('valueFunc key: foo', args.foo)
 
end
 
end
 
--------------------------------------------------------------------------
 
-- Test valueFunc value
 
--------------------------------------------------------------------------
 
 
suite.valueFuncValue = suite.makeInvokeFunction(keyWithPriority, {
 
valueFunc = function (key, val)
 
if val then
 
return 'valueFuncValue: ' .. val
 
end
 
end
 
})
 
  
 
function suite:testValueFuncValue()
 
function suite:testValueFuncValue()
local arg = suite.getDefaultTemplateExpansion('valueFuncValue')
+
local args = suite.getDefaultArgs{valueFunc = function(key, value)
self:assertEquals('valueFuncValue: ' .. defaultArgs[2], arg)
+
return 'valueFunc value: '.. value
 +
end}
 +
self:assertEquals(
 +
'valueFunc value: ' .. d.uniqueFrameArg,
 +
args[d.uniqueFrameArgKey]
 +
)
 
end
 
end
  
 +
--[=[
 
--------------------------------------------------------------------------
 
--------------------------------------------------------------------------
 
-- Test default arg writing
 
-- Test default arg writing

Revision as of 11:21, 17 April 2014

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

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