config: Add Boolean ConfigValue and tests.

This commit is contained in:
Thomas Adamcik 2013-04-01 13:38:59 +02:00
parent 21d0a938f9
commit 452cf839c4
2 changed files with 48 additions and 0 deletions

View File

@ -90,3 +90,22 @@ class Integer(ConfigValue):
validate_minimum(value, self.minimum)
validate_maximum(value, self.maximum)
return value
class Boolean(ConfigValue):
true_values = ('1', 'yes', 'true', 'on')
false_values = ('0', 'no', 'false', 'off')
def deserialize(self, value):
if value.lower() in self.true_values:
return True
elif value.lower() in self.false_values:
return False
raise ValueError('invalid value for boolean: %r' % value)
def serialize(self, value):
if value:
return 'true'
else:
return 'false'

View File

@ -146,3 +146,32 @@ class IntegerTest(unittest.TestCase):
def test_format_masks_secrets(self):
value = config.Integer(secret=True)
self.assertEqual('********', value.format('1337'))
class BooleanTest(unittest.TestCase):
def test_deserialize_converts_to_bool(self):
value = config.Boolean()
for true in ('1', 'yes', 'true', 'on'):
self.assertIs(value.deserialize(true), True)
self.assertIs(value.deserialize(true.upper()), True)
self.assertIs(value.deserialize(true.capitalize()), True)
for false in ('0', 'no', 'false', 'off'):
self.assertIs(value.deserialize(false), False)
self.assertIs(value.deserialize(false.upper()), False)
self.assertIs(value.deserialize(false.capitalize()), False)
def test_deserialize_fails_on_bad_data(self):
value = config.Boolean()
with self.assertRaises(ValueError):
value.deserialize('nope')
with self.assertRaises(ValueError):
value.deserialize('sure')
def test_serialize_normalises_strings(self):
value = config.Boolean()
self.assertEqual('true', value.serialize(True))
self.assertEqual('false', value.serialize(False))
def test_format_masks_secrets(self):
value = config.Boolean(secret=True)
self.assertEqual('********', value.format('true'))