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!")
value = os.path.expanduser(value)
try:
if os.path.isfile(os.path.join(standarddir.config(), value)):
return
if not os.path.isabs(value):
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):
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:
raise configexc.ValidationError(value, e)

View File

@ -30,7 +30,7 @@ from PyQt5.QtGui import QColor, QFont
from PyQt5.QtNetwork import QNetworkProxy
from qutebrowser.config import configtypes, configexc
from qutebrowser.utils import debug, utils
from qutebrowser.utils import debug, utils, standarddir
class Font(QFont):
@ -1373,12 +1373,24 @@ class TestFile:
os_path.isabs.return_value = True
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."""
monkeypatch.setattr('qutebrowser.config.configtypes.standarddir.config',
lambda: '/home/foo/.config/')
os_path.expanduser.side_effect = lambda x: x
os_path.isfile.return_value = True
os_path.isabs.return_value = False
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):
"""Test if validate expands the user correctly."""