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