Difference between revisions of "Module:Yesno/testcases"

From blackwiki
Jump to navigation Jump to search
blackwiki>Andrybak
m (fix typo)
blackwiki>Andrybak
(remove code duplication: extract functions runTest and runTestWithDefault)
Line 2: Line 2:
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local ScribuntoUnit = require('Module:ScribuntoUnit')
 
local suite = ScribuntoUnit:new()
 
local suite = ScribuntoUnit:new()
 +
 +
function runTest(expected, inputValue)
 +
    self:assertEquals(expected, yesno(inputValue))
 +
end
 +
 +
function runTestWithDefault(expected, inputValue)
 +
    self:assertEquals(expected, yesno(inputValue, 'default'))
 +
end
  
 
--------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------
Line 8: Line 16:
  
 
function suite:testYes()
 
function suite:testYes()
self:assertEquals(true, yesno('yes'))
+
runTest(true, 'yes')
 
end
 
end
  
 
function suite:testY()
 
function suite:testY()
self:assertEquals(true, yesno('y'))
+
runTest(true, 'y')
 
end
 
end
  
 
function suite:testTrueText()
 
function suite:testTrueText()
self:assertEquals(true, yesno('true'))
+
runTest(true, 'true')
 
end
 
end
  
 
function suite:testTrue()
 
function suite:testTrue()
self:assertEquals(true, yesno(true))
+
runTest(true, true)
 
end
 
end
  
 
function suite:testOneText()
 
function suite:testOneText()
self:assertEquals(true, yesno('1'))
+
runTest(true, '1')
 
end
 
end
  
 
function suite:testOne()
 
function suite:testOne()
self:assertEquals(true, yesno(1))
+
runTest(true, 1)
 
end
 
end
  
 
function suite:testOn()
 
function suite:testOn()
self:assertEquals(true, yesno('on'))
+
runTest(true, 'on')
 
end
 
end
  
 
function suite:testNo()
 
function suite:testNo()
self:assertEquals(false, yesno('no'))
+
runTest(false, 'no')
 
end
 
end
  
 
function suite:testN()
 
function suite:testN()
self:assertEquals(false, yesno('n'))
+
runTest(false, 'n')
 
end
 
end
  
 
function suite:testFalseText()
 
function suite:testFalseText()
self:assertEquals(false, yesno('false'))
+
runTest(false, 'false')
 
end
 
end
  
 
function suite:testFalse()
 
function suite:testFalse()
self:assertEquals(false, yesno(false))
+
runTest(false, false)
 
end
 
end
  
 
function suite:testZero()
 
function suite:testZero()
self:assertEquals(false, yesno(0))
+
runTest(false, 0)
 
end
 
end
  
 
function suite:testZeroText()
 
function suite:testZeroText()
self:assertEquals(false, yesno('0'))
+
runTest(false, '0')
 
end
 
end
  
 
function suite:testOff()
 
function suite:testOff()
self:assertEquals(false, yesno('off'))
+
runTest(false, 'off')
 
end
 
end
  
 
function suite:testNil()
 
function suite:testNil()
self:assertEquals(nil, yesno(nil))
+
runTest(nil, nil)
 
end
 
end
  
Line 72: Line 80:
  
 
function suite:testYesCaps()
 
function suite:testYesCaps()
self:assertEquals(true, yesno('Yes'))
+
runTest(true, 'Yes')
self:assertEquals(true, yesno('YES'))
+
runTest(true, 'YES')
self:assertEquals(true, yesno('yEs'))
+
runTest(true, 'yEs')
 
end
 
end
  
 
function suite:testYCaps()
 
function suite:testYCaps()
self:assertEquals(true, yesno('Y'))
+
runTest(true, 'Y')
 
end
 
end
  
 
function suite:testTrueTextCaps()
 
function suite:testTrueTextCaps()
self:assertEquals(true, yesno('True'))
+
runTest(true, 'True')
self:assertEquals(true, yesno('TRUE'))
+
runTest(true, 'TRUE')
self:assertEquals(true, yesno('trUE'))
+
runTest(true, 'trUE')
 
end
 
end
  
 
function suite:testOnCaps()
 
function suite:testOnCaps()
self:assertEquals(true, yesno('On'))
+
runTest(true, 'On')
self:assertEquals(true, yesno('ON'))
+
runTest(true, 'ON')
self:assertEquals(true, yesno('oN'))
+
runTest(true, 'oN')
 
end
 
end
  
 
function suite:testNoCaps()
 
function suite:testNoCaps()
self:assertEquals(false, yesno('No'))
+
runTest(false, 'No')
self:assertEquals(false, yesno('NO'))
+
runTest(false, 'NO')
self:assertEquals(false, yesno('nO'))
+
runTest(false, 'nO')
 
end
 
end
  
 
function suite:testNCaps()
 
function suite:testNCaps()
self:assertEquals(false, yesno('N'))
+
runTest(false, 'N')
 
end
 
end
  
 
function suite:testFalseTextCaps()
 
function suite:testFalseTextCaps()
self:assertEquals(false, yesno('False'))
+
runTest(false, 'False')
self:assertEquals(false, yesno('FALSE'))
+
runTest(false, 'FALSE')
self:assertEquals(false, yesno('fALSe'))
+
runTest(false, 'fALSe')
 
end
 
end
  
 
function suite:testOffCaps()
 
function suite:testOffCaps()
self:assertEquals(false, yesno('ofF'))
+
runTest(false, 'ofF')
self:assertEquals(false, yesno('oFf'))
+
runTest(false, 'oFf')
self:assertEquals(false, yesno('oFF'))
+
runTest(false, 'oFF')
self:assertEquals(false, yesno('Off'))
+
runTest(false, 'Off')
self:assertEquals(false, yesno('OfF'))
+
runTest(false, 'OfF')
self:assertEquals(false, yesno('OFf'))
+
runTest(false, 'OFf')
self:assertEquals(false, yesno('OFF'))
+
runTest(false, 'OFF')
 
end
 
end
  
Line 124: Line 132:
  
 
function suite:testOneTextConversion()
 
function suite:testOneTextConversion()
self:assertEquals(true, yesno('1.0'))
+
runTest(true, '1.0')
self:assertEquals(true, yesno('001'))
+
runTest(true, '001')
 
end
 
end
  
 
function suite:testZeroTextConversion()
 
function suite:testZeroTextConversion()
self:assertEquals(false, yesno('0.0'))
+
runTest(false, '0.0')
self:assertEquals(false, yesno('000'))
+
runTest(false, '000')
 
end
 
end
  
Line 138: Line 146:
  
 
function suite:testStringNoDefault()
 
function suite:testStringNoDefault()
self:assertEquals(nil, yesno('foo'))
+
runTest(nil, 'foo')
 
end
 
end
  
 
function suite:testNumberNoDefault()
 
function suite:testNumberNoDefault()
self:assertEquals(nil, yesno(100))
+
runTest(nil, 100)
 
end
 
end
  
 
function suite:testTableNoDefault()
 
function suite:testTableNoDefault()
self:assertEquals(nil, yesno({}))
+
runTest(nil, {})
 
end
 
end
  
 
function suite:testFunctionNoDefault()
 
function suite:testFunctionNoDefault()
self:assertEquals(nil, yesno(function() return true end))
+
runTest(nil, function() return true end)
 
end
 
end
  
 
function suite:testBlankStringNoDefault()
 
function suite:testBlankStringNoDefault()
self:assertEquals(nil, yesno(''))
+
runTest(nil, '')
 
end
 
end
  
Line 162: Line 170:
  
 
function suite:testStringDefaultSet()
 
function suite:testStringDefaultSet()
self:assertEquals('default', yesno('foo', 'default'))
+
runTestWithDefault('default', 'foo')
 
end
 
end
  
 
function suite:testNumberDefaultSet()
 
function suite:testNumberDefaultSet()
self:assertEquals('default', yesno(100, 'default'))
+
runTestWithDefault('default', 100)
 
end
 
end
  
 
function suite:testTableDefaultSet()
 
function suite:testTableDefaultSet()
self:assertEquals('default', yesno({}, 'default'))
+
runTestWithDefault('default', {})
 
end
 
end
  
 
function suite:testFunctionDefaultSet()
 
function suite:testFunctionDefaultSet()
self:assertEquals('default', yesno(function() return true end, 'default'))
+
self:assertEquals('default', yesno(function() return true end))
 
end
 
end
  
 
function suite:testBlankStringDefaultSet()
 
function suite:testBlankStringDefaultSet()
self:assertEquals('default', yesno('', 'default'))
+
runTestWithDefault('default', '')
 
end
 
end
  
Line 186: Line 194:
  
 
function suite:testYesDefaultPrecedence()
 
function suite:testYesDefaultPrecedence()
self:assertEquals(true, yesno('yes', 'default'))
+
runTestWithDefault(true, 'yes')
 
end
 
end
  
 
function suite:testYDefaultPrecedence()
 
function suite:testYDefaultPrecedence()
self:assertEquals(true, yesno('y', 'default'))
+
runTestWithDefault(true, 'y')
 
end
 
end
  
 
function suite:testTrueTextDefaultPrecedence()
 
function suite:testTrueTextDefaultPrecedence()
self:assertEquals(true, yesno('true', 'default'))
+
runTestWithDefault(true, 'true')
 
end
 
end
  
 
function suite:testTrueDefaultPrecedence()
 
function suite:testTrueDefaultPrecedence()
self:assertEquals(true, yesno(true, 'default'))
+
runTestWithDefault(true, true)
 
end
 
end
  
 
function suite:testOneTextDefaultPrecedence()
 
function suite:testOneTextDefaultPrecedence()
self:assertEquals(true, yesno('1', 'default'))
+
runTestWithDefault(true, '1')
 
end
 
end
  
 
function suite:testOneDefaultPrecedence()
 
function suite:testOneDefaultPrecedence()
self:assertEquals(true, yesno(1, 'default'))
+
runTestWithDefault(true, 1)
 
end
 
end
  
 
function suite:testNoDefaultPrecedence()
 
function suite:testNoDefaultPrecedence()
self:assertEquals(false, yesno('no', 'default'))
+
runTestWithDefault(false, 'no')
 
end
 
end
  
 
function suite:testNDefaultPrecedence()
 
function suite:testNDefaultPrecedence()
self:assertEquals(false, yesno('n', 'default'))
+
runTestWithDefault(false, 'n')
 
end
 
end
  
 
function suite:testFalseTextDefaultPrecedence()
 
function suite:testFalseTextDefaultPrecedence()
self:assertEquals(false, yesno('false', 'default'))
+
runTestWithDefault(false, 'false')
 
end
 
end
  
 
function suite:testFalseDefaultPrecedence()
 
function suite:testFalseDefaultPrecedence()
self:assertEquals(false, yesno(false, 'default'))
+
runTestWithDefault(false, false)
 
end
 
end
  
 
function suite:testZeroDefaultPrecedence()
 
function suite:testZeroDefaultPrecedence()
self:assertEquals(false, yesno(0, 'default'))
+
runTestWithDefault(false, 0)
 
end
 
end
  
 
function suite:testZeroTextDefaultPrecedence()
 
function suite:testZeroTextDefaultPrecedence()
self:assertEquals(false, yesno('0', 'default'))
+
runTestWithDefault(false, '0')
 
end
 
end
  
 
function suite:testNilDefaultPrecedence()
 
function suite:testNilDefaultPrecedence()
self:assertEquals(nil, yesno(nil, 'default'))
+
runTestWithDefault(nil, nil)
 
end
 
end
  
 
return suite
 
return suite

Revision as of 07:27, 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()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

return suite