local ScribuntoUnit = require('Module:ScribuntoUnit')
local sc = require('Module:Storm categories/sandbox') -- the module to be tested
local suite = ScribuntoUnit:new()

function suite:testColors()
    self:assertEquals('c0c0c0', string.lower(sc._color()))
    self:assertEquals('c0c0c0', string.lower(sc._color(nil)))
    
    -- Ensure that none of the global scale colors are falling back to default.
    self:assertFalse('c0c0c0' == string.lower(sc._color('disturbance')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('depression')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('storm')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('sts')))
    
    -- Ensure that none of the SSHWS scale colors are falling back to default.
    self:assertFalse('c0c0c0' == string.lower(sc._color('cat1')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('cat2')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('cat3')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('cat4')))
    self:assertFalse('c0c0c0' == string.lower(sc._color('cat5')))
    
    -- nullIfMissing
    self:assertEquals(nil, sc._color('not-an-actual-category', true))
    self:assertFalse(nil == sc._color('cat1', true))
end

function suite:testNames()
    self:assertEquals('Unknown-strength storm', sc._name())
    self:assertEquals('Unknown-strength storm', sc._name(nil))
    
    -- Ensure that none of the global scale colors are falling back to default.
    self:assertFalse('Unknown-strength storm' == sc._name('disturbance'))
    self:assertFalse('Unknown-strength storm' == sc._name('depression'))
    self:assertFalse('Unknown-strength storm' == sc._name('storm'))
    self:assertFalse('Unknown-strength storm' == sc._name('sts'))
    
    -- Ensure that none of the SSHWS scale colors are falling back to default.
    self:assertFalse('Unknown-strength storm' == sc._name('cat1'))
    self:assertFalse('Unknown-strength storm' == sc._name('cat2'))
    self:assertFalse('Unknown-strength storm' == sc._name('cat3'))
    self:assertFalse('Unknown-strength storm' == sc._name('cat4'))
    self:assertFalse('Unknown-strength storm' == sc._name('cat5'))
    
    -- Basin differences
    self:assertFalse(sc._name('cat1') == sc._name('cat1', 'atl'))
    self:assertFalse(sc._name('cat1') == sc._name('cat1', 'wpac'))
    -- Default fallback
    self:assertEquals(sc._name('cat1', 'default'), sc._name('cat1', 'basin-that-does-not-exist'))
    
    -- nullIfMissing
    self:assertEquals(nil, sc._name('not-an-actual-category', nil, true))
    self:assertFalse(nil == sc._name('cat1', nil, true))
    self:assertFalse(nil == sc._name('cat1', 'atl', true))
    self:assertFalse(nil == sc._name('cat1', 'wpac', true))
end

function suite:testSortkey()
    self:assertEquals(0, sc._sortkey())
    self:assertEquals(0, sc._sortkey(nil))
    
    -- Ensure that none of the global scale colors are falling back to default.
    self:assertFalse(0 == sc._sortkey('disturbance'))
    self:assertFalse(0 == sc._sortkey('depression'))
    self:assertFalse(0 == sc._sortkey('storm'))
    self:assertFalse(0 == sc._sortkey('sts'))
    
    -- Ensure that none of the SSHWS scale colors are falling back to default.
    self:assertFalse(0 == sc._sortkey('cat1'))
    self:assertFalse(0 == sc._sortkey('cat2'))
    self:assertFalse(0 == sc._sortkey('cat3'))
    self:assertFalse(0 == sc._sortkey('cat4'))
    self:assertFalse(0 == sc._sortkey('cat5'))
    
    -- Ensure that sortkeys are following the proper order.
    self:assertTrue(sc._sortkey('cat4') < sc._sortkey('cat5'))
    self:assertTrue(sc._sortkey('cat3') < sc._sortkey('cat4'))
    self:assertTrue(sc._sortkey('cat2') < sc._sortkey('cat3'))
    self:assertTrue(sc._sortkey('cat1') < sc._sortkey('cat2'))
    self:assertTrue(sc._sortkey('sts') < sc._sortkey('cat1'))
    self:assertTrue(sc._sortkey('storm') < sc._sortkey('sts'))
    self:assertTrue(sc._sortkey('depression') < sc._sortkey('storm'))
    self:assertTrue(sc._sortkey('disturbance') < sc._sortkey('depression'))
    self:assertTrue(sc._sortkey('unknown') < sc._sortkey('disturbance'))
    
    -- nullIfMissing
    self:assertEquals(nil, sc._sortkey('not-an-actual-category', true))
    self:assertFalse(nil == sc._sortkey('cat1', true))
end

function suite:testIcons()
    self:assertEquals("'''?'''", sc._icon())
    self:assertEquals("'''?'''", sc._icon(nil))
    
    -- Ensure that none of the global scale colors are falling back to default.
    self:assertFalse("'''?'''" == sc._icon('disturbance'))
    self:assertFalse("'''?'''" == sc._icon('depression'))
    self:assertFalse("'''?'''" == sc._icon('storm'))
    self:assertFalse("'''?'''" == sc._icon('sts'))
    
    -- Ensure that none of the SSHWS scale colors are falling back to default.
    self:assertFalse("'''?'''" == sc._icon('cat1'))
    self:assertFalse("'''?'''" == sc._icon('cat2'))
    self:assertFalse("'''?'''" == sc._icon('cat3'))
    self:assertFalse("'''?'''" == sc._icon('cat4'))
    self:assertFalse("'''?'''" == sc._icon('cat5'))
    
    -- nullIfMissing
    self:assertEquals(nil, sc._icon('not-an-actual-category', true))
    self:assertFalse(nil == sc._icon('cat1', true))
end

function suite:testIsEqual()
	-- Equal existing categories
	self:assertTrue(sc._isEqual("depression", "depression"))
	-- Equal aliases
	self:assertTrue(sc._isEqual("depression", "td"))
	self:assertTrue(sc._isEqual("severets", "severe"))
	self:assertTrue(sc._isEqual("shdepression", "depression"))
	
	-- Not equal existing categories
	self:assertFalse(sc._isEqual("depression", "unknown"))
	self:assertFalse(sc._isEqual("depression", "cat5"))
	self:assertFalse(sc._isEqual("unknown", "cat5"))
	-- '5' is a generic ID that only has a color and an
	self:assertFalse(sc._isEqual("5", "cat5"))
	self:assertFalse(sc._isEqual("a5", "aus5"))
	self:assertFalse(sc._isEqual("aus5", "cat5"))
	
	--== EDGE CASES
	-- Only one category exists
	self:assertFalse(sc._isEqual("depression", "not-an-actual-category"))
	-- None of the categories exist
	self:assertFalse(sc._isEqual("not-an-actual-category", "also-not-an-actual-category"))
	-- None of the categories exist but the IDs are equal
	self:assertTrue(sc._isEqual("not-an-actual-category", "not-an-actual-category"))
	-- Nil argument 1
	self:assertFalse(sc._isEqual(nil, "not-an-actual-category"))
	-- Nil argument 2
	self:assertFalse(sc._isEqual("not-an-actual-category", nil))
	-- Nil arguments (but equal)
	self:assertFalse(sc._isEqual(nil, nil))
	-- Missing argument 2
	self:assertFalse(sc._isEqual("not-an-actual-category"))
	-- Missing arguments
	self:assertFalse(sc._isEqual())
end

return suite
"https://si.wikipedia.org/w/index.php?title=Module:Storm_categories/testcases&oldid=721570" වෙතින් සම්ප්‍රවේශනය කෙරිණි