Jump to content

Module:Template test case: Difference between revisions

start creating Invocation classes for getting template invocations from the arguments
(tentative TestCase class syntax)
(start creating Invocation classes for getting template invocations from the arguments)
Line 1: Line 1:
-- This module provides several methods to generate test cases.
-- This module provides several methods to generate test cases.


local mTableTools = require('Module:TableTools')
local libraryUtil = require('libraryUtil')
local libraryUtil = require('libraryUtil')
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local checkType = libraryUtil.checkType
 
-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
 
--[[
local function validateTemplateOptions()
-- Add the template names for the first two templates if they weren't
-- specified.
do
local title = mw.title.getCurrentTitle().basePageTitle
local template
if title.namespace == 10 then
template = title.text
elseif title.namespace == 0 then
template = ':' .. title.prefixedText
else
template = title.prefixedText
end
local templatePage = title.prefixedText
templateOptions[1] = templateOptions[1] or {}
templateOptions[1].templatePage = templateOptions[1].template or templatePage
templateOptions[1].template = templateOptions[1].template or template
templateOptions[2] = templateOptions[2] or {}
templateOptions[2].templatePage = templateOptions[2].template or templatePage .. '/sandbox'
templateOptions[2].template = templateOptions[2].template or template .. '/sandbox'
end
 
-- Validate options for three or more templates.
if #templateOptions >= 3 then
for i = 3, #templateOptions do
local template = templateOptions[i].template
if not template then
error('arguments for a third or subsequent ' ..
'template were found, but no template name ' ..
'was specified', 3)
end
end
end
end
--]]
 
local function parseTemplateOptions(origOptions)
-- Given a table of raw options, returns a table of general options
-- and template options.
local templateOptions = mTableTools.numData(origOptions, true)
local options = templateOptions.other
templateOptions.other = nil
return options, templateOptions
end
 
-------------------------------------------------------------------------------
-- Invocation class
-------------------------------------------------------------------------------
 
local Invocation = {}
Invocation.__index = Invocation
 
function Invocation.new()
local obj = setmetatable({}, TableInvocation)
return obj
end
 
function Invocation:setOptions(t)
self._options = t
end
 
function Invocation:getOptions()
return self._options
end
 
function Invocation:setTemplateOptions(t)
self._templateOptions = t
end
 
function Invocation:getTemplateOptions()
return self._templateOptions
end
 
-------------------------------------------------------------------------------
-- Nowiki invocation class
-------------------------------------------------------------------------------
 
local NowikiInvocation = setmetatable({}, Invocation)
NowikiInvocation.__index = NowikiInvocation
 
function NowikiInvocation.new(args)
checkType('NowikiInvocation.new', 'args', args, 'table')
local obj = Invocation.new()
setmetatable(obj, NowikiInvocation)
 
local options = {}
 
return obj
end
 
function NowikiInvocation:getInvocation(template)
end
 
function NowikiInvocation:getOutput(template)
end
 
-------------------------------------------------------------------------------
-- Table invocation class
-------------------------------------------------------------------------------
 
local TableInvocation = {}
TableInvocation.__index = TableInvocation
 
function TableInvocation.new(args)
checkType('TableInvocation.new', 'args', args, 'table')
local obj = Invocation.new()
setmetatable(obj, TableInvocation)
 
local rawOptions, invokeArgs = {}, {}
for k, v in pairs(args) do
local optionKey = type(k) == 'string' and k:match('^_(.*)$')
if optionKey then
rawOptions[optionKey] = v
else
invokeArgs[k] = v
end
end
obj.invokeArgs = invokeArgs
local options, templateOptions = parseTemplateOptions(rawOptions)
obj:setOptions(options)
obj:setTemplateOptions(templateOptions)
 
return obj
end
 
function NowikiInvocation:getInvocation(template)
end
 
function NowikiInvocation:getOutput(template)
end
 
-------------------------------------------------------------------------------
-- TestCase class
-------------------------------------------------------------------------------
 
local TestCase = {}
TestCase.__index = TestCase
 
function TestCase.new(invocationObj)
checkType('TestCase.new', 'invocationObj', invocationObj, 'table')
local obj = setmetatable({}, TestCase)
return obj
end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Line 27: Line 177:


-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- TestCase class
-- Exports
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
local TestCase = {}
TestCase.__index = TestCase
function TestCase.new(t)
-- Validate the input
checkTypeForNamedArg('TestCase.new', 'invocation', t.invocation, 'table')
checkTypeForNamedArg('TestCase.new', 'templates', t.templates, 'table')
checkTypeForNamedArg('TestCase.new', 'options', t.options, 'table', true)
t.options = t.options or {}
local obj = setmetatable({}, TestCase)
return obj
end
Cookies help us deliver our services. By using our services, you agree to our use of cookies.