Module:Yesno/testcases: Difference between revisions

From IDU Wiki
Jump to navigation Jump to search
en>Andrybak
remove code duplication: extract functions runTest and runTestWithDefault
en>Andrybak
m s/runTest/runYesnoTest/
Line 3: Line 3:
local suite = ScribuntoUnit:new()
local suite = ScribuntoUnit:new()


function runTest(expected, inputValue)
local function runYesnoTest(expected, inputValue)
     self:assertEquals(expected, yesno(inputValue))
     self:assertEquals(expected, yesno(inputValue))
end
end


function runTestWithDefault(expected, inputValue)
local function runYesnoTestWithDefault(expected, inputValue)
     self:assertEquals(expected, yesno(inputValue, 'default'))
     self:assertEquals(expected, yesno(inputValue, 'default'))
end
end
Line 16: Line 16:


function suite:testYes()
function suite:testYes()
runTest(true, 'yes')
runYesnoTest(true, 'yes')
end
end


function suite:testY()
function suite:testY()
runTest(true, 'y')
runYesnoTest(true, 'y')
end
end


function suite:testTrueText()
function suite:testTrueText()
runTest(true, 'true')
runYesnoTest(true, 'true')
end
end


function suite:testTrue()
function suite:testTrue()
runTest(true, true)
runYesnoTest(true, true)
end
end


function suite:testOneText()
function suite:testOneText()
runTest(true, '1')
runYesnoTest(true, '1')
end
end


function suite:testOne()
function suite:testOne()
runTest(true, 1)
runYesnoTest(true, 1)
end
end


function suite:testOn()
function suite:testOn()
runTest(true, 'on')
runYesnoTest(true, 'on')
end
end


function suite:testNo()
function suite:testNo()
runTest(false, 'no')
runYesnoTest(false, 'no')
end
end


function suite:testN()
function suite:testN()
runTest(false, 'n')
runYesnoTest(false, 'n')
end
end


function suite:testFalseText()
function suite:testFalseText()
runTest(false, 'false')
runYesnoTest(false, 'false')
end
end


function suite:testFalse()
function suite:testFalse()
runTest(false, false)
runYesnoTest(false, false)
end
end


function suite:testZero()
function suite:testZero()
runTest(false, 0)
runYesnoTest(false, 0)
end
end


function suite:testZeroText()
function suite:testZeroText()
runTest(false, '0')
runYesnoTest(false, '0')
end
end


function suite:testOff()
function suite:testOff()
runTest(false, 'off')
runYesnoTest(false, 'off')
end
end


function suite:testNil()
function suite:testNil()
runTest(nil, nil)
runYesnoTest(nil, nil)
end
end


Line 80: Line 80:


function suite:testYesCaps()
function suite:testYesCaps()
runTest(true, 'Yes')
runYesnoTest(true, 'Yes')
runTest(true, 'YES')
runYesnoTest(true, 'YES')
runTest(true, 'yEs')
runYesnoTest(true, 'yEs')
end
end


function suite:testYCaps()
function suite:testYCaps()
runTest(true, 'Y')
runYesnoTest(true, 'Y')
end
end


function suite:testTrueTextCaps()
function suite:testTrueTextCaps()
runTest(true, 'True')
runYesnoTest(true, 'True')
runTest(true, 'TRUE')
runYesnoTest(true, 'TRUE')
runTest(true, 'trUE')
runYesnoTest(true, 'trUE')
end
end


function suite:testOnCaps()
function suite:testOnCaps()
runTest(true, 'On')
runYesnoTest(true, 'On')
runTest(true, 'ON')
runYesnoTest(true, 'ON')
runTest(true, 'oN')
runYesnoTest(true, 'oN')
end
end


function suite:testNoCaps()
function suite:testNoCaps()
runTest(false, 'No')
runYesnoTest(false, 'No')
runTest(false, 'NO')
runYesnoTest(false, 'NO')
runTest(false, 'nO')
runYesnoTest(false, 'nO')
end
end


function suite:testNCaps()
function suite:testNCaps()
runTest(false, 'N')
runYesnoTest(false, 'N')
end
end


function suite:testFalseTextCaps()
function suite:testFalseTextCaps()
runTest(false, 'False')
runYesnoTest(false, 'False')
runTest(false, 'FALSE')
runYesnoTest(false, 'FALSE')
runTest(false, 'fALSe')
runYesnoTest(false, 'fALSe')
end
end


function suite:testOffCaps()
function suite:testOffCaps()
runTest(false, 'ofF')
runYesnoTest(false, 'ofF')
runTest(false, 'oFf')
runYesnoTest(false, 'oFf')
runTest(false, 'oFF')
runYesnoTest(false, 'oFF')
runTest(false, 'Off')
runYesnoTest(false, 'Off')
runTest(false, 'OfF')
runYesnoTest(false, 'OfF')
runTest(false, 'OFf')
runYesnoTest(false, 'OFf')
runTest(false, 'OFF')
runYesnoTest(false, 'OFF')
end
end


Line 132: Line 132:


function suite:testOneTextConversion()
function suite:testOneTextConversion()
runTest(true, '1.0')
runYesnoTest(true, '1.0')
runTest(true, '001')
runYesnoTest(true, '001')
end
end


function suite:testZeroTextConversion()
function suite:testZeroTextConversion()
runTest(false, '0.0')
runYesnoTest(false, '0.0')
runTest(false, '000')
runYesnoTest(false, '000')
end
end


Line 146: Line 146:


function suite:testStringNoDefault()
function suite:testStringNoDefault()
runTest(nil, 'foo')
runYesnoTest(nil, 'foo')
end
end


function suite:testNumberNoDefault()
function suite:testNumberNoDefault()
runTest(nil, 100)
runYesnoTest(nil, 100)
end
end


function suite:testTableNoDefault()
function suite:testTableNoDefault()
runTest(nil, {})
runYesnoTest(nil, {})
end
end


function suite:testFunctionNoDefault()
function suite:testFunctionNoDefault()
runTest(nil, function() return true end)
runYesnoTest(nil, function() return true end)
end
end


function suite:testBlankStringNoDefault()
function suite:testBlankStringNoDefault()
runTest(nil, '')
runYesnoTest(nil, '')
end
end


Line 170: Line 170:


function suite:testStringDefaultSet()
function suite:testStringDefaultSet()
runTestWithDefault('default', 'foo')
runYesnoTestWithDefault('default', 'foo')
end
end


function suite:testNumberDefaultSet()
function suite:testNumberDefaultSet()
runTestWithDefault('default', 100)
runYesnoTestWithDefault('default', 100)
end
end


function suite:testTableDefaultSet()
function suite:testTableDefaultSet()
runTestWithDefault('default', {})
runYesnoTestWithDefault('default', {})
end
end


Line 186: Line 186:


function suite:testBlankStringDefaultSet()
function suite:testBlankStringDefaultSet()
runTestWithDefault('default', '')
runYesnoTestWithDefault('default', '')
end
end


Line 194: Line 194:


function suite:testYesDefaultPrecedence()
function suite:testYesDefaultPrecedence()
runTestWithDefault(true, 'yes')
runYesnoTestWithDefault(true, 'yes')
end
end


function suite:testYDefaultPrecedence()
function suite:testYDefaultPrecedence()
runTestWithDefault(true, 'y')
runYesnoTestWithDefault(true, 'y')
end
end


function suite:testTrueTextDefaultPrecedence()
function suite:testTrueTextDefaultPrecedence()
runTestWithDefault(true, 'true')
runYesnoTestWithDefault(true, 'true')
end
end


function suite:testTrueDefaultPrecedence()
function suite:testTrueDefaultPrecedence()
runTestWithDefault(true, true)
runYesnoTestWithDefault(true, true)
end
end


function suite:testOneTextDefaultPrecedence()
function suite:testOneTextDefaultPrecedence()
runTestWithDefault(true, '1')
runYesnoTestWithDefault(true, '1')
end
end


function suite:testOneDefaultPrecedence()
function suite:testOneDefaultPrecedence()
runTestWithDefault(true, 1)
runYesnoTestWithDefault(true, 1)
end
end


function suite:testNoDefaultPrecedence()
function suite:testNoDefaultPrecedence()
runTestWithDefault(false, 'no')
runYesnoTestWithDefault(false, 'no')
end
end


function suite:testNDefaultPrecedence()
function suite:testNDefaultPrecedence()
runTestWithDefault(false, 'n')
runYesnoTestWithDefault(false, 'n')
end
end


function suite:testFalseTextDefaultPrecedence()
function suite:testFalseTextDefaultPrecedence()
runTestWithDefault(false, 'false')
runYesnoTestWithDefault(false, 'false')
end
end


function suite:testFalseDefaultPrecedence()
function suite:testFalseDefaultPrecedence()
runTestWithDefault(false, false)
runYesnoTestWithDefault(false, false)
end
end


function suite:testZeroDefaultPrecedence()
function suite:testZeroDefaultPrecedence()
runTestWithDefault(false, 0)
runYesnoTestWithDefault(false, 0)
end
end


function suite:testZeroTextDefaultPrecedence()
function suite:testZeroTextDefaultPrecedence()
runTestWithDefault(false, '0')
runYesnoTestWithDefault(false, '0')
end
end


function suite:testNilDefaultPrecedence()
function suite:testNilDefaultPrecedence()
runTestWithDefault(nil, nil)
runYesnoTestWithDefault(nil, nil)
end
end


return suite
return suite

Revision as of 01:29, 1 April 2020

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

local yesno = require('Module:Yesno/sandbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

local function runYesnoTest(expected, inputValue)
    self:assertEquals(expected, yesno(inputValue))
end

local function runYesnoTestWithDefault(expected, inputValue)
    self:assertEquals(expected, yesno(inputValue, 'default'))
end

--------------------------------------------------------------------------------
-- Basic tests
--------------------------------------------------------------------------------

function suite:testYes()
	runYesnoTest(true, 'yes')
end

function suite:testY()
	runYesnoTest(true, 'y')
end

function suite:testTrueText()
	runYesnoTest(true, 'true')
end

function suite:testTrue()
	runYesnoTest(true, true)
end

function suite:testOneText()
	runYesnoTest(true, '1')
end

function suite:testOne()
	runYesnoTest(true, 1)
end

function suite:testOn()
	runYesnoTest(true, 'on')
end

function suite:testNo()
	runYesnoTest(false, 'no')
end

function suite:testN()
	runYesnoTest(false, 'n')
end

function suite:testFalseText()
	runYesnoTest(false, 'false')
end

function suite:testFalse()
	runYesnoTest(false, false)
end

function suite:testZero()
	runYesnoTest(false, 0)
end

function suite:testZeroText()
	runYesnoTest(false, '0')
end

function suite:testOff()
	runYesnoTest(false, 'off')
end

function suite:testNil()
	runYesnoTest(nil, nil)
end

--------------------------------------------------------------------------------
-- Capitalisation tests
--------------------------------------------------------------------------------

function suite:testYesCaps()
	runYesnoTest(true, 'Yes')
	runYesnoTest(true, 'YES')
	runYesnoTest(true, 'yEs')
end

function suite:testYCaps()
	runYesnoTest(true, 'Y')
end

function suite:testTrueTextCaps()
	runYesnoTest(true, 'True')
	runYesnoTest(true, 'TRUE')
	runYesnoTest(true, 'trUE')
end

function suite:testOnCaps()
	runYesnoTest(true, 'On')
	runYesnoTest(true, 'ON')
	runYesnoTest(true, 'oN')
end

function suite:testNoCaps()
	runYesnoTest(false, 'No')
	runYesnoTest(false, 'NO')
	runYesnoTest(false, 'nO')
end

function suite:testNCaps()
	runYesnoTest(false, 'N')
end

function suite:testFalseTextCaps()
	runYesnoTest(false, 'False')
	runYesnoTest(false, 'FALSE')
	runYesnoTest(false, 'fALSe')
end

function suite:testOffCaps()
	runYesnoTest(false, 'ofF')
	runYesnoTest(false, 'oFf')
	runYesnoTest(false, 'oFF')
	runYesnoTest(false, 'Off')
	runYesnoTest(false, 'OfF')
	runYesnoTest(false, 'OFf')
	runYesnoTest(false, 'OFF')
end

--------------------------------------------------------------------------------
-- Number conversion tests
--------------------------------------------------------------------------------

function suite:testOneTextConversion()
	runYesnoTest(true, '1.0')
	runYesnoTest(true, '001')
end

function suite:testZeroTextConversion()
	runYesnoTest(false, '0.0')
	runYesnoTest(false, '000')
end

--------------------------------------------------------------------------------
-- Test no default set
--------------------------------------------------------------------------------

function suite:testStringNoDefault()
	runYesnoTest(nil, 'foo')
end

function suite:testNumberNoDefault()
	runYesnoTest(nil, 100)
end

function suite:testTableNoDefault()
	runYesnoTest(nil, {})
end

function suite:testFunctionNoDefault()
	runYesnoTest(nil, function() return true end)
end

function suite:testBlankStringNoDefault()
	runYesnoTest(nil, '')
end

--------------------------------------------------------------------------------
-- Test default set
--------------------------------------------------------------------------------

function suite:testStringDefaultSet()
	runYesnoTestWithDefault('default', 'foo')
end

function suite:testNumberDefaultSet()
	runYesnoTestWithDefault('default', 100)
end

function suite:testTableDefaultSet()
	runYesnoTestWithDefault('default', {})
end

function suite:testFunctionDefaultSet()
	self:assertEquals('default', yesno(function() return true end))
end

function suite:testBlankStringDefaultSet()
	runYesnoTestWithDefault('default', '')
end

--------------------------------------------------------------------------------
-- Test default precedence with true, false, and nil
--------------------------------------------------------------------------------

function suite:testYesDefaultPrecedence()
	runYesnoTestWithDefault(true, 'yes')
end

function suite:testYDefaultPrecedence()
	runYesnoTestWithDefault(true, 'y')
end

function suite:testTrueTextDefaultPrecedence()
	runYesnoTestWithDefault(true, 'true')
end

function suite:testTrueDefaultPrecedence()
	runYesnoTestWithDefault(true, true)
end

function suite:testOneTextDefaultPrecedence()
	runYesnoTestWithDefault(true, '1')
end

function suite:testOneDefaultPrecedence()
	runYesnoTestWithDefault(true, 1)
end

function suite:testNoDefaultPrecedence()
	runYesnoTestWithDefault(false, 'no')
end

function suite:testNDefaultPrecedence()
	runYesnoTestWithDefault(false, 'n')
end

function suite:testFalseTextDefaultPrecedence()
	runYesnoTestWithDefault(false, 'false')
end

function suite:testFalseDefaultPrecedence()
	runYesnoTestWithDefault(false, false)
end

function suite:testZeroDefaultPrecedence()
	runYesnoTestWithDefault(false, 0)
end

function suite:testZeroTextDefaultPrecedence()
	runYesnoTestWithDefault(false, '0')
end

function suite:testNilDefaultPrecedence()
	runYesnoTestWithDefault(nil, nil)
end

return suite