Fix File.validate and corresponding tests

There were no tests regarding the return value of standarddir.config() and thus
it wasn't caught that it returned None in some cases. This is now fixed by
checking the return of standdarddir.config before calling it and modifying the
corresponding test_validate_exists_rel as well as adding a new
test_validate_rel_config_none.
This commit is contained in:
Lamar Pavel 2015-05-28 12:14:12 +02:00
parent 4851a3d442
commit b5eea81e2e
2 changed files with 21 additions and 7 deletions

View File

@ -819,13 +819,15 @@ class File(BaseType):
raise configexc.ValidationError(value, "may not be empty!") raise configexc.ValidationError(value, "may not be empty!")
value = os.path.expanduser(value) value = os.path.expanduser(value)
try: try:
if os.path.isfile(os.path.join(standarddir.config(), value)): if not os.path.isabs(value):
return if standarddir.config():
if os.path.isfile(
os.path.join(standarddir.config(), value)):
return
raise configexc.ValidationError(value,
"must be an absolute path!")
if not os.path.isfile(value): if not os.path.isfile(value):
raise configexc.ValidationError(value, "must be a valid file!") raise configexc.ValidationError(value, "must be a valid file!")
if not os.path.isabs(value):
raise configexc.ValidationError(
value, "must be an absolute path!")
except UnicodeEncodeError as e: except UnicodeEncodeError as e:
raise configexc.ValidationError(value, e) raise configexc.ValidationError(value, e)

View File

@ -30,7 +30,7 @@ from PyQt5.QtGui import QColor, QFont
from PyQt5.QtNetwork import QNetworkProxy from PyQt5.QtNetwork import QNetworkProxy
from qutebrowser.config import configtypes, configexc from qutebrowser.config import configtypes, configexc
from qutebrowser.utils import debug, utils from qutebrowser.utils import debug, utils, standarddir
class Font(QFont): class Font(QFont):
@ -1373,12 +1373,24 @@ class TestFile:
os_path.isabs.return_value = True os_path.isabs.return_value = True
self.t.validate('foobar') self.t.validate('foobar')
def test_validate_exists_rel(self, os_path): def test_validate_exists_rel(self, os_path, monkeypatch):
"""Test validate with a relative path to an existing file.""" """Test validate with a relative path to an existing file."""
monkeypatch.setattr('qutebrowser.config.configtypes.standarddir.config',
lambda: '/home/foo/.config/')
os_path.expanduser.side_effect = lambda x: x os_path.expanduser.side_effect = lambda x: x
os_path.isfile.return_value = True os_path.isfile.return_value = True
os_path.isabs.return_value = False os_path.isabs.return_value = False
self.t.validate('foobar') self.t.validate('foobar')
os_path.join.assert_called_once_with('/home/foo/.config/',
'foobar')
def test_validate_rel_config_none(self, os_path, monkeypatch):
"""Test with a relative path and standarddir.config returning None."""
monkeypatch.setattr('qutebrowser.config.configtypes.standarddir.config',
lambda: None)
os_path.isabs.return_value = False
with pytest.raises(configexc.ValidationError):
self.t.validate('foobar')
def test_validate_expanduser(self, os_path): def test_validate_expanduser(self, os_path):
"""Test if validate expands the user correctly.""" """Test if validate expands the user correctly."""