config: Add List ConfigValue and tests.

This commit is contained in:
Thomas Adamcik 2013-04-01 13:46:13 +02:00
parent 452cf839c4
commit d46f926f14
2 changed files with 30 additions and 0 deletions

View File

@ -1,5 +1,7 @@
from __future__ import unicode_literals
import re
def validate_choice(value, choices):
"""Choice validation, normally called in config value's validate()."""
@ -109,3 +111,14 @@ class Boolean(ConfigValue):
return 'true'
else:
return 'false'
class List(ConfigValue):
def deserialize(self, value):
if '\n' in value:
return re.split(r'\s*\n\s*', value.strip())
else:
return re.split(r',\s*', value.strip())
def serialize(self, value):
return '\n '.join(value)

View File

@ -175,3 +175,20 @@ class BooleanTest(unittest.TestCase):
def test_format_masks_secrets(self):
value = config.Boolean(secret=True)
self.assertEqual('********', value.format('true'))
class ListTest(unittest.TestCase):
def test_deserialize_splits_commas(self):
value = config.List()
self.assertEqual(['foo', 'bar', 'baz'],
value.deserialize('foo, bar,baz'))
def test_deserialize_splits_newlines(self):
value = config.List()
self.assertEqual(['foo,bar', 'bar', 'baz'],
value.deserialize('foo,bar\nbar\nbaz'))
def test_serialize_joins_by_newlines(self):
value = config.List()
self.assertRegexpMatches(value.serialize(['foo', 'bar', 'baz']),
r'foo\n\s*bar\n\s*baz')