Make Integer type class honor zero for min/max
The Integer type class has an option for setting a min or max value for the integer. But the class would not recognize zero as a valid value and not check it. Make the Integer class honor zero as a valid value for min and/or max. Add test cases for using zero for min and/or max. Change-Id: I395dea133d2a92e5ca4fab913aa17483a38f7ba1 Closes-Bug: #1489688
This commit is contained in:
parent
bc13758bd6
commit
85eee67b99
oslo_config
@ -209,6 +209,8 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
|
||||
def test_repr_with_min_and_max(self):
|
||||
t = types.Integer(min=123, max=456)
|
||||
self.assertEqual('Integer(min=123, max=456)', repr(t))
|
||||
t = types.Integer(min=0, max=0)
|
||||
self.assertEqual('Integer(min=0, max=0)', repr(t))
|
||||
|
||||
def test_equal(self):
|
||||
self.assertTrue(types.Integer() == types.Integer())
|
||||
@ -230,6 +232,20 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
|
||||
def test_not_equal_to_other_class(self):
|
||||
self.assertFalse(types.Integer() == types.String())
|
||||
|
||||
def test_min_greater_max(self):
|
||||
self.assertRaises(ValueError,
|
||||
types.Integer,
|
||||
min=100, max=50)
|
||||
self.assertRaises(ValueError,
|
||||
types.Integer,
|
||||
min=-50, max=-100)
|
||||
self.assertRaises(ValueError,
|
||||
types.Integer,
|
||||
min=0, max=-50)
|
||||
self.assertRaises(ValueError,
|
||||
types.Integer,
|
||||
min=50, max=0)
|
||||
|
||||
def test_with_max_and_min(self):
|
||||
t = types.Integer(min=123, max=456)
|
||||
self.assertRaises(ValueError, t, 122)
|
||||
@ -239,6 +255,26 @@ class IntegerTypeTests(TypeTestHelper, unittest.TestCase):
|
||||
self.assertRaises(ValueError, t, 0)
|
||||
self.assertRaises(ValueError, t, 457)
|
||||
|
||||
def test_with_min_zero(self):
|
||||
t = types.Integer(min=0, max=456)
|
||||
self.assertRaises(ValueError, t, -1)
|
||||
t(0)
|
||||
t(123)
|
||||
t(300)
|
||||
t(456)
|
||||
self.assertRaises(ValueError, t, -201)
|
||||
self.assertRaises(ValueError, t, 457)
|
||||
|
||||
def test_with_max_zero(self):
|
||||
t = types.Integer(min=-456, max=0)
|
||||
self.assertRaises(ValueError, t, 1)
|
||||
t(0)
|
||||
t(-123)
|
||||
t(-300)
|
||||
t(-456)
|
||||
self.assertRaises(ValueError, t, 201)
|
||||
self.assertRaises(ValueError, t, -457)
|
||||
|
||||
|
||||
class FloatTypeTests(TypeTestHelper, unittest.TestCase):
|
||||
type = types.Float()
|
||||
|
@ -153,7 +153,7 @@ class Integer(ConfigType):
|
||||
super(Integer, self).__init__()
|
||||
self.min = min
|
||||
self.max = max
|
||||
if min and max and max < min:
|
||||
if min is not None and max is not None and max < min:
|
||||
raise ValueError('Max value is less than min value')
|
||||
|
||||
def __call__(self, value):
|
||||
@ -170,17 +170,17 @@ class Integer(ConfigType):
|
||||
return value
|
||||
|
||||
def _check_range(self, value):
|
||||
if self.min and value < self.min:
|
||||
if self.min is not None and value < self.min:
|
||||
raise ValueError('Should be greater than or equal to %d' %
|
||||
self.min)
|
||||
if self.max and value > self.max:
|
||||
if self.max is not None and value > self.max:
|
||||
raise ValueError('Should be less than or equal to %d' % self.max)
|
||||
|
||||
def __repr__(self):
|
||||
props = []
|
||||
if self.min:
|
||||
if self.min is not None:
|
||||
props.append('min=%d' % self.min)
|
||||
if self.max:
|
||||
if self.max is not None:
|
||||
props.append('max=%d' % self.max)
|
||||
|
||||
if props:
|
||||
|
Loading…
x
Reference in New Issue
Block a user