From c29ae9e1d3efb6abd118a6f08bde6102d6937e56 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 14 Nov 2014 08:34:21 +0100 Subject: [PATCH] configtypes: Add new UrlList type. --- qutebrowser/config/configtypes.py | 28 +++++++++++++++++++++ qutebrowser/test/config/test_configtypes.py | 19 ++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py index 3c1a027e5..97cfa2095 100644 --- a/qutebrowser/config/configtypes.py +++ b/qutebrowser/config/configtypes.py @@ -1161,6 +1161,34 @@ class Position(BaseType): return self.MAPPING[value] +class UrlList(List): + + """A list of URLs.""" + + typestr = 'url-list' + + def transform(self, value): + if not value: + return None + else: + return [QUrl.fromUserInput(v) if v else None + for v in value.split(',')] + + def validate(self, value): + if not value: + if self._none_ok: + return + else: + raise ValidationError(value, "list may not be empty!") + vals = self.transform(value) + for val in vals: + if val is None: + raise ValidationError(value, "values may not be empty!") + elif not val.isValid(): + raise ValidationError(value, "invalid URL - {}".format( + val.errorString())) + + class SelectOnRemove(BaseType): """Which tab to select when the focused tab is removed.""" diff --git a/qutebrowser/test/config/test_configtypes.py b/qutebrowser/test/config/test_configtypes.py index 0feacaa49..dfb53a4d6 100644 --- a/qutebrowser/test/config/test_configtypes.py +++ b/qutebrowser/test/config/test_configtypes.py @@ -1896,5 +1896,24 @@ class EncodingTests(unittest.TestCase): self.assertIsNone(self.t.transform('')) +class UrlListTests(unittest.TestCase): + + """Test UrlList.""" + + def setUp(self): + self.t = configtypes.UrlList() + + def test_transform_single(self): + """Test transform with a single value.""" + self.assertEqual(self.t.transform('http://qutebrowser.org/'), + [QUrl('http://qutebrowser.org/')]) + + def test_transform_more(self): + """Test transform with multiple values.""" + self.assertEqual( + self.t.transform('http://qutebrowser.org/,http://heise.de/'), + [QUrl('http://qutebrowser.org/'), QUrl('http://heise.de/')]) + + if __name__ == '__main__': unittest.main()