From 452cf839c417a3841ae413442addab9daea2bdb9 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Mon, 1 Apr 2013 13:38:59 +0200 Subject: [PATCH] config: Add Boolean ConfigValue and tests. --- mopidy/utils/config.py | 19 +++++++++++++++++++ tests/utils/config_test.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/mopidy/utils/config.py b/mopidy/utils/config.py index ab6cb2f7..4009011d 100644 --- a/mopidy/utils/config.py +++ b/mopidy/utils/config.py @@ -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' diff --git a/tests/utils/config_test.py b/tests/utils/config_test.py index b973cef1..1442395f 100644 --- a/tests/utils/config_test.py +++ b/tests/utils/config_test.py @@ -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'))