Add a FuzzyUrl config type.
This commit is contained in:
parent
6d51fcfb2e
commit
5f46870594
@ -1101,6 +1101,30 @@ class SearchEngineUrl(BaseType):
|
|||||||
url.errorString()))
|
url.errorString()))
|
||||||
|
|
||||||
|
|
||||||
|
class FuzzyUrl(BaseType):
|
||||||
|
|
||||||
|
"""A single URL."""
|
||||||
|
|
||||||
|
def validate(self, value):
|
||||||
|
from qutebrowser.utils import urlutils
|
||||||
|
if not value:
|
||||||
|
if self._none_ok:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
raise configexc.ValidationError(value, "may not be empty!")
|
||||||
|
try:
|
||||||
|
self.transform(value)
|
||||||
|
except urlutils.FuzzyUrlError as e:
|
||||||
|
raise configexc.ValidationError(value, str(e))
|
||||||
|
|
||||||
|
def transform(self, value):
|
||||||
|
from qutebrowser.utils import urlutils
|
||||||
|
if not value:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return urlutils.fuzzy_url(value, do_search=False)
|
||||||
|
|
||||||
|
|
||||||
class Encoding(BaseType):
|
class Encoding(BaseType):
|
||||||
|
|
||||||
"""Setting for a python encoding."""
|
"""Setting for a python encoding."""
|
||||||
|
@ -1780,6 +1780,51 @@ class SearchEngineUrlTests(unittest.TestCase):
|
|||||||
self.assertEqual(self.t.transform("foobar"), "foobar")
|
self.assertEqual(self.t.transform("foobar"), "foobar")
|
||||||
|
|
||||||
|
|
||||||
|
class FuzzyUrlTests(unittest.TestCase):
|
||||||
|
|
||||||
|
"""Test FuzzyUrl."""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.t = configtypes.FuzzyUrl()
|
||||||
|
|
||||||
|
def test_validate_empty(self):
|
||||||
|
"""Test validate with empty string and none_ok = False."""
|
||||||
|
with self.assertRaises(configexc.ValidationError):
|
||||||
|
self.t.validate('')
|
||||||
|
|
||||||
|
def test_validate_empty_none_ok(self):
|
||||||
|
"""Test validate with empty string and none_ok = True."""
|
||||||
|
t = configtypes.FuzzyUrl(none_ok=True)
|
||||||
|
t.validate('')
|
||||||
|
|
||||||
|
def test_validate(self):
|
||||||
|
"""Test validate with a good value."""
|
||||||
|
self.t.validate('http://example.com/?q={}')
|
||||||
|
|
||||||
|
def test_validate_good_fuzzy(self):
|
||||||
|
"""Test validate with a good fuzzy value."""
|
||||||
|
self.t.validate('example.com')
|
||||||
|
|
||||||
|
def test_validate_invalid_url(self):
|
||||||
|
"""Test validate with an invalid URL."""
|
||||||
|
with self.assertRaises(configexc.ValidationError):
|
||||||
|
self.t.validate('::foo')
|
||||||
|
|
||||||
|
def test_validate_invalid_search(self):
|
||||||
|
"""Test validate with an invalid search term."""
|
||||||
|
with self.assertRaises(configexc.ValidationError):
|
||||||
|
self.t.validate('foo bar')
|
||||||
|
|
||||||
|
def test_transform_empty(self):
|
||||||
|
"""Test transform with an empty value."""
|
||||||
|
self.assertIsNone(self.t.transform(''))
|
||||||
|
|
||||||
|
def test_transform(self):
|
||||||
|
"""Test transform with a value."""
|
||||||
|
self.assertEqual(self.t.transform("example.com"),
|
||||||
|
QUrl('http://example.com'))
|
||||||
|
|
||||||
|
|
||||||
class UserStyleSheetTests(unittest.TestCase):
|
class UserStyleSheetTests(unittest.TestCase):
|
||||||
|
|
||||||
"""Test UserStyleSheet."""
|
"""Test UserStyleSheet."""
|
||||||
|
Loading…
Reference in New Issue
Block a user