Difference between revisions of "Module:Yesno/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Andrybak
(remove code duplication: extract functions runTest and runTestWithDefault)
m (49 revisions imported)
 
(11 intermediate revisions by one other user not shown)
Line 1: Line 1:
local yesno = require('Module:Yesno/sandbox')
+
local yesno = require('Module:Yesno')
 +
local yesnoSandbox = require('Module:Yesno/sandbox')
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local suite = ScribuntoUnit:new()
 
local suite = ScribuntoUnit:new()
  
function runTest(expected, inputValue)
+
local function compareLiveAndSandbox(expected, liveValue, sandboxValue)
    self:assertEquals(expected, yesno(inputValue))
+
local message = "Expected " .. tostring(expected) .. ". Got "
 +
suite:assertEquals(expected, liveValue, message .. tostring(liveValue)
 +
.. " from live module.")
 +
suite:assertEquals(expected, sandboxValue, message .. tostring(sandboxValue)
 +
.. " from sandbox.")
 
end
 
end
  
function runTestWithDefault(expected, inputValue)
+
local function runYesnoTest(expected, inputValue)
    self:assertEquals(expected, yesno(inputValue, 'default'))
+
local liveValue = yesno(inputValue)
 +
local sandboxValue = yesnoSandbox(inputValue)
 +
compareLiveAndSandbox(expected, liveValue, sandboxValue)
 +
end
 +
 
 +
local function runYesnoTestWithDefault(expected, inputValue)
 +
local liveValue = yesno(inputValue, 'default')
 +
local sandboxValue = yesnoSandbox(inputValue, 'default')
 +
compareLiveAndSandbox(expected, liveValue, sandboxValue)
 
end
 
end
  
Line 16: Line 29:
  
 
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
 +
 
 +
function suite:testT()
 +
runYesnoTest(true, 't')
 
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
 +
 
 +
function suite:testF()
 +
runYesnoTest(false, 'f')
 
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 101:
  
 
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
 +
 
 +
function suite:testTCaps()
 +
runYesnoTest(true, 'T')
 
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
 +
 
 +
function suite:testFCaps()
 +
runYesnoTest(false, 'F')
 
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 161:
  
 
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 175:
  
 
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 199:
  
 
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
  
 
function suite:testFunctionDefaultSet()
 
function suite:testFunctionDefaultSet()
self:assertEquals('default', yesno(function() return true end))
+
runYesnoTestWithDefault('default', function() return true end)
 
end
 
end
  
 
function suite:testBlankStringDefaultSet()
 
function suite:testBlankStringDefaultSet()
runTestWithDefault('default', '')
+
runYesnoTestWithDefault('default', '')
 
end
 
end
  
Line 194: Line 223:
  
 
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

Latest revision as of 08:25, 30 September 2020

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

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

local function compareLiveAndSandbox(expected, liveValue, sandboxValue)
	local message = "Expected " .. tostring(expected) .. ". Got "
	suite:assertEquals(expected, liveValue, message .. tostring(liveValue)
		.. " from live module.")
	suite:assertEquals(expected, sandboxValue, message .. tostring(sandboxValue)
		.. " from sandbox.")
end

local function runYesnoTest(expected, inputValue)
	local liveValue = yesno(inputValue)
	local sandboxValue = yesnoSandbox(inputValue)
	compareLiveAndSandbox(expected, liveValue, sandboxValue)
end

local function runYesnoTestWithDefault(expected, inputValue)
	local liveValue = yesno(inputValue, 'default')
	local sandboxValue = yesnoSandbox(inputValue, 'default')
	compareLiveAndSandbox(expected, liveValue, sandboxValue)
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:testT()
	runYesnoTest(true, 't')
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:testF()
	runYesnoTest(false, 'f')
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:testTCaps()
	runYesnoTest(true, 'T')
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:testFCaps()
	runYesnoTest(false, 'F')
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()
	runYesnoTestWithDefault('default', 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