commit
c8408c6a5f
@ -44,7 +44,7 @@ docstring-min-length=3
|
||||
|
||||
[FORMAT]
|
||||
max-line-length=79
|
||||
ignore-long-lines=(<?https?://|^# Copyright 201\d)
|
||||
ignore-long-lines=(<?https?://|^# Copyright 201\d|# (pylint|flake8): disable=)
|
||||
expected-line-ending-format=LF
|
||||
|
||||
[SIMILARITIES]
|
||||
|
10
.travis.yml
10
.travis.yml
@ -17,9 +17,7 @@ env:
|
||||
- TESTENV=misc
|
||||
- TESTENV=vulture
|
||||
- TESTENV=pep257
|
||||
- TESTENV=pyflakes
|
||||
- TESTENV=pep8
|
||||
- TESTENV=mccabe
|
||||
- TESTENV=flake8
|
||||
- TESTENV=pyroma
|
||||
- TESTENV=check-manifest
|
||||
- TESTENV=pylint
|
||||
@ -57,11 +55,7 @@ matrix:
|
||||
- os: osx
|
||||
env: TESTENV=pep257
|
||||
- os: osx
|
||||
env: TESTENV=pyflakes
|
||||
- os: osx
|
||||
env: TESTENV=pep8
|
||||
- os: osx
|
||||
env: TESTENV=mccabe
|
||||
env: TESTENV=flake8
|
||||
- os: osx
|
||||
env: TESTENV=pyroma
|
||||
- os: osx
|
||||
|
13
pytest.ini
13
pytest.ini
@ -14,19 +14,6 @@ markers =
|
||||
skip: Always skipped test.
|
||||
pyqt531_or_newer: Needs PyQt 5.3.1 or newer.
|
||||
xfail_norun: xfail the test with out running it
|
||||
flakes-ignore =
|
||||
UnusedImport
|
||||
UnusedVariable
|
||||
resources.py ALL
|
||||
pep8ignore =
|
||||
E265 # Block comment should start with '#'
|
||||
E501 # Line too long
|
||||
E402 # module level import not at top of file
|
||||
E266 # too many leading '#' for block comment
|
||||
W503 # line break before binary operator
|
||||
resources.py ALL
|
||||
.hypothesis/* ALL
|
||||
mccabe-complexity = 12
|
||||
qt_log_level_fail = WARNING
|
||||
qt_log_ignore =
|
||||
^SpellCheck: .*
|
||||
|
@ -84,7 +84,7 @@ def dirbrowser_html(path):
|
||||
except OSError as e:
|
||||
html = jinja.env.get_template('error.html').render(
|
||||
title="Error while reading directory",
|
||||
url='file://%s' % path,
|
||||
url='file://{}'.format(path),
|
||||
error=str(e),
|
||||
icon='')
|
||||
return html.encode('UTF-8', errors='xmlcharrefreplace')
|
||||
|
@ -30,7 +30,8 @@ class FixedDataNetworkReply(QNetworkReply):
|
||||
|
||||
"""QNetworkReply subclass for fixed data."""
|
||||
|
||||
def __init__(self, request, fileData, mimeType, parent=None):
|
||||
def __init__(self, request, fileData, mimeType, # flake8: disable=N803
|
||||
parent=None):
|
||||
"""Constructor.
|
||||
|
||||
Args:
|
||||
|
@ -49,7 +49,7 @@ attr_chars = string.ascii_letters + string.digits + attr_chars_nonalnum
|
||||
|
||||
|
||||
# RFC 5987 gives this alternative construction of the token character class
|
||||
token_chars = attr_chars + "*'%"
|
||||
token_chars = attr_chars + "*'%" # flake8: disable=S001
|
||||
|
||||
|
||||
# Definitions from https://tools.ietf.org/html/rfc2616#section-2.2
|
||||
|
@ -79,8 +79,8 @@ def get_window(via_ipc, force_window=False, force_tab=False,
|
||||
if open_target not in ('tab-silent', 'tab-bg-silent'):
|
||||
window_to_raise = window
|
||||
if window_to_raise is not None:
|
||||
window_to_raise.setWindowState(window.windowState() &
|
||||
~Qt.WindowMinimized | Qt.WindowActive)
|
||||
window_to_raise.setWindowState(
|
||||
window.windowState() & ~Qt.WindowMinimized | Qt.WindowActive)
|
||||
window_to_raise.raise_()
|
||||
window_to_raise.activateWindow()
|
||||
QApplication.instance().alert(window_to_raise)
|
||||
|
@ -1,5 +1,7 @@
|
||||
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
|
||||
|
||||
# Copyright 2014-2016 Florian Bruhin (The-Compiler) <mail@qutebrowser.org>
|
||||
#
|
||||
# This file is part of qutebrowser.
|
||||
#
|
||||
# qutebrowser is free software: you can redistribute it and/or modify
|
||||
|
@ -100,7 +100,7 @@ def _get_environment_vars():
|
||||
for key, value in os.environ.items():
|
||||
for m in masks:
|
||||
if fnmatch.fnmatch(key, m):
|
||||
info.append('%s = %s' % (key, value))
|
||||
info.append('{} = {}'.format(key, value))
|
||||
return '\n'.join(sorted(info))
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
import os
|
||||
import sys
|
||||
import bdb
|
||||
import pdb
|
||||
import pdb # flake8: disable=T002
|
||||
import signal
|
||||
import functools
|
||||
import faulthandler
|
||||
|
@ -1,5 +1,7 @@
|
||||
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
|
||||
|
||||
# Copyright 2014-2016 Florian Bruhin (The-Compiler) <mail@qutebrowser.org>
|
||||
#
|
||||
# This file is part of qutebrowser.
|
||||
#
|
||||
# qutebrowser is free software: you can redistribute it and/or modify
|
||||
|
@ -86,9 +86,9 @@ class Saveable:
|
||||
(not config.get(*self._config_opt)) and
|
||||
(not explicit) and (not force)):
|
||||
if not silent:
|
||||
log.save.debug("Not saving {} because autosaving has been "
|
||||
log.save.debug("Not saving {name} because autosaving has been "
|
||||
"disabled by {cfg[0]} -> {cfg[1]}.".format(
|
||||
self._name, cfg=self._config_opt))
|
||||
name=self._name, cfg=self._config_opt))
|
||||
return
|
||||
do_save = self._dirty or (self._save_on_exit and is_exit) or force
|
||||
if not silent:
|
||||
|
@ -274,7 +274,7 @@ def qt_message_handler(msg_type, context, msg):
|
||||
# PNGs in Qt with broken color profile
|
||||
# https://bugreports.qt.io/browse/QTBUG-39788
|
||||
'libpng warning: iCCP: Not recognizing known sRGB profile that has '
|
||||
'been edited', # noqa
|
||||
'been edited', # flake8: disable=E131
|
||||
'libpng warning: iCCP: known incorrect sRGB profile',
|
||||
# Hopefully harmless warning
|
||||
'OpenType support missing for script ',
|
||||
@ -312,7 +312,7 @@ def qt_message_handler(msg_type, context, msg):
|
||||
'libpng warning: iCCP: known incorrect sRGB profile',
|
||||
# https://bugreports.qt.io/browse/QTBUG-47154
|
||||
'virtual void QSslSocketBackendPrivate::transmit() SSLRead failed '
|
||||
'with: -9805', # noqa
|
||||
'with: -9805', # flake8: disable=E131
|
||||
]
|
||||
|
||||
# Messages which will trigger an exception immediately
|
||||
|
@ -217,9 +217,9 @@ def _has_explicit_scheme(url):
|
||||
# after the scheme delimiter. Since we don't know of any URIs
|
||||
# using this and want to support e.g. searching for scoped C++
|
||||
# symbols, we treat this as not an URI anyways.
|
||||
return (url.isValid() and url.scheme()
|
||||
and not url.path().startswith(' ')
|
||||
and not url.path().startswith(':'))
|
||||
return (url.isValid() and url.scheme() and
|
||||
not url.path().startswith(' ') and
|
||||
not url.path().startswith(':'))
|
||||
|
||||
|
||||
def is_special_url(url):
|
||||
|
@ -65,6 +65,7 @@ def check_setup(executable):
|
||||
print("Checking setup...")
|
||||
subprocess.check_call([executable, '-c', 'import PyQt5'])
|
||||
subprocess.check_call([executable, '-c', 'import sip'])
|
||||
subprocess.check_call([executable, '--version'])
|
||||
|
||||
|
||||
if 'APPVEYOR' in os.environ:
|
||||
@ -115,6 +116,14 @@ elif TRAVIS_OS == 'linux':
|
||||
print("apt-get install...")
|
||||
apt_get(['install'] + pkgs)
|
||||
|
||||
if TESTENV == 'flake8':
|
||||
print("apt-get update...")
|
||||
apt_get(['update'])
|
||||
# We need an up-to-date Python because of:
|
||||
# https://github.com/google/yapf/issues/46
|
||||
print("Updating Python...")
|
||||
apt_get(['install', '-t', 'trusty-updates', 'python3.4'])
|
||||
|
||||
if TESTENV == 'eslint':
|
||||
subprocess.check_call(['sudo', 'npm', 'install', '-g', 'eslint'])
|
||||
else:
|
||||
|
@ -41,7 +41,8 @@ class ConfigChecker(checkers.BaseChecker):
|
||||
__implements__ = interfaces.IAstroidChecker
|
||||
name = 'config'
|
||||
msgs = {
|
||||
'E0000': ('"%s -> %s" is no valid config option.', 'bad-config-call',
|
||||
'E0000': ('"%s -> %s" is no valid config option.', # flake8: disable=S001
|
||||
'bad-config-call',
|
||||
None),
|
||||
}
|
||||
priority = -1
|
||||
|
@ -128,8 +128,8 @@ def report(items):
|
||||
for item in sorted(items, key=lambda e: (e.file.lower(), e.lineno)):
|
||||
relpath = os.path.relpath(item.file)
|
||||
path = relpath if not relpath.startswith('..') else item.file
|
||||
output.append("%s:%d: Unused %s '%s'" % (path, item.lineno, item.typ,
|
||||
item))
|
||||
output.append("{}:{}: Unused {} '{}'".format(path, item.lineno,
|
||||
item.typ, item))
|
||||
return output
|
||||
|
||||
|
||||
|
@ -72,7 +72,8 @@ class UsageFormatter(argparse.HelpFormatter):
|
||||
result = "'{}'".format(action.metavar)
|
||||
elif action.choices is not None:
|
||||
choice_strs = [str(choice) for choice in action.choices]
|
||||
result = '{%s}' % ','.join('*{}*'.format(e) for e in choice_strs)
|
||||
result = ('{' + ','.join('*{}*'.format(e) for e in choice_strs) +
|
||||
'}')
|
||||
else:
|
||||
result = "'{}'".format(default_metavar)
|
||||
|
||||
|
44
setup.cfg
Normal file
44
setup.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
[flake8]
|
||||
exclude = .venv,.hypothesis,.git,__pycache__,resources.py
|
||||
# E128: continuation line under-indented for visual indent
|
||||
# E226: missing whitespace around arithmetic operator
|
||||
# E265: Block comment should start with '#'
|
||||
# E501: Line too long
|
||||
# E402: module level import not at top of file
|
||||
# E266: too many leading '#' for block comment
|
||||
# F401: Unused import
|
||||
# N802: function name should be lowercase
|
||||
# L101: The __init__ method of classes must not have a docstring
|
||||
# L102: A docstring was incorrectly formatted.
|
||||
# L103: A test docstring must not start with any form of the words "test", ...
|
||||
# L201: Container literals must have a trailing comma
|
||||
# L202: print is not allowed except for debugging.
|
||||
# L203: pdb and compatible modules are not allowed except for debugging.
|
||||
# L204: Implicit string literal concatenation is only allowed if every string
|
||||
# being concatenated is parenthesize
|
||||
# L207: pass is only necessary in non-optional suites containing no other
|
||||
# statements.
|
||||
# L302: The line was too long.
|
||||
# P101: format string does contain unindexed parameters
|
||||
# P102: docstring does contain unindexed parameters
|
||||
# P103: other string does contain unindexed parameters
|
||||
# D001: found assert_ replace it with assertTrue
|
||||
ignore =
|
||||
E128,E226,E265,E501,E402,E266,
|
||||
F401,
|
||||
N802,
|
||||
L101,L102,L103,L201,L202,L203,L204,L207,L302,
|
||||
P101,P102,P103,
|
||||
D001
|
||||
max-complexity = 12
|
||||
putty-ignore =
|
||||
/# pylint: disable=invalid-name/ : +N801,N806
|
||||
/# pragma: no mccabe/ : +C901
|
||||
/# flake8: disable=E131/ : +E131
|
||||
/# flake8: disable=N803/ : +N803
|
||||
/# flake8: disable=T002/ : +T002
|
||||
/# flake8: disable=F841/ : +F841
|
||||
/# flake8: disable=S001/ : +S001
|
||||
copyright-check = True
|
||||
copyright-regexp = # Copyright [\d-]+ .*
|
||||
copyright-min-file-size = 110
|
@ -76,8 +76,7 @@ def _apply_platform_markers(item):
|
||||
continue
|
||||
|
||||
if 'reason' in marker.kwargs:
|
||||
reason = '{}: {}'.format(default_reason,
|
||||
marker.kwargs['reason'])
|
||||
reason = '{}: {}'.format(default_reason, marker.kwargs['reason'])
|
||||
del marker.kwargs['reason']
|
||||
else:
|
||||
reason = default_reason + '.'
|
||||
@ -388,8 +387,10 @@ def py_proc():
|
||||
"""Get a python executable and args list which executes the given code."""
|
||||
if getattr(sys, 'frozen', False):
|
||||
pytest.skip("Can't be run when frozen")
|
||||
|
||||
def func(code):
|
||||
return (sys.executable, ['-c', textwrap.dedent(code.strip('\n'))])
|
||||
|
||||
return func
|
||||
|
||||
|
||||
|
@ -66,7 +66,6 @@ def partial_compare(val1, val2, *, indent=0):
|
||||
print_i("|---- to ----", indent)
|
||||
print_i(pprint.pformat(val2), indent + 1)
|
||||
|
||||
|
||||
if val2 is Ellipsis:
|
||||
print_i("Ignoring ellipsis comparison", indent, error=True)
|
||||
return True
|
||||
|
@ -44,6 +44,7 @@ def wait_for_prompt(quteproc):
|
||||
quteproc.wait_for(message='Entering mode KeyMode.* (reason: question '
|
||||
'asked)')
|
||||
|
||||
|
||||
@bdd.then("no prompt should be shown")
|
||||
def no_prompt_shown(quteproc):
|
||||
quteproc.ensure_not_logged(message='Entering mode KeyMode.* (reason: '
|
||||
|
@ -88,7 +88,7 @@ def test_quteprocess_quitting(qtbot, quteproc_process):
|
||||
'category': 'init',
|
||||
'module': 'earlyinit',
|
||||
'function': 'init_log',
|
||||
'line': 280,
|
||||
'line': 280,
|
||||
'message': 'Log initialized.',
|
||||
'expected': False,
|
||||
}
|
||||
@ -122,10 +122,10 @@ def test_quteprocess_quitting(qtbot, quteproc_process):
|
||||
}
|
||||
),
|
||||
(
|
||||
'00:00:00 WARNING qt qxcbxsettings:"QXcbXSettings::'
|
||||
'QXcbXSettings(QXcbScreen*)":233 '
|
||||
'QXcbXSettings::QXcbXSettings(QXcbScreen*) Failed to get selection '
|
||||
'owner for XSETTINGS_S atom ',
|
||||
'00:00:00 WARNING qt qxcbxsettings:"QXcbXSettings::'
|
||||
'QXcbXSettings(QXcbScreen*)":233 '
|
||||
'QXcbXSettings::QXcbXSettings(QXcbScreen*) Failed to get selection '
|
||||
'owner for XSETTINGS_S atom ',
|
||||
{
|
||||
'module': 'qxcbxsettings',
|
||||
'function': 'QXcbXSettings::QXcbXSettings(QXcbScreen*)',
|
||||
|
@ -52,11 +52,11 @@ def test_httpbin(httpbin, qtbot, path, content, expected):
|
||||
|
||||
|
||||
@pytest.mark.parametrize('line, verb, path, equal', [
|
||||
({'verb': 'GET', 'path': '/', 'status': 200}, 'GET', '/', True),
|
||||
({'verb': 'GET', 'path': '/foo/', 'status': 200}, 'GET', '/foo', True),
|
||||
({'verb': 'GET', 'path': '/', 'status': 200}, 'GET', '/', True),
|
||||
({'verb': 'GET', 'path': '/foo/', 'status': 200}, 'GET', '/foo', True),
|
||||
|
||||
({'verb': 'GET', 'path': '/', 'status': 200}, 'GET', '/foo', False),
|
||||
({'verb': 'POST', 'path': '/', 'status': 200}, 'GET', '/', False),
|
||||
({'verb': 'GET', 'path': '/', 'status': 200}, 'GET', '/foo', False),
|
||||
({'verb': 'POST', 'path': '/', 'status': 200}, 'GET', '/', False),
|
||||
])
|
||||
def test_expected_request(httpbin, line, verb, path, equal):
|
||||
expected = httpbin.ExpectedRequest(verb, path)
|
||||
|
@ -29,7 +29,6 @@ from PyQt5.QtCore import QUrl
|
||||
from qutebrowser.browser import http
|
||||
|
||||
|
||||
|
||||
class TestNoContentDisposition:
|
||||
|
||||
"""Test parse_content_disposition with no Content-Disposition header."""
|
||||
|
@ -100,7 +100,7 @@ def test_cache_size_leq_max_cache_size(config_stub, tmpdir):
|
||||
preload_cache(disk_cache, 'http://bar.net')
|
||||
assert disk_cache.expire() < limit
|
||||
# Add a threshold to the limit due to unforseeable Qt internals
|
||||
assert disk_cache.cacheSize() < limit+100
|
||||
assert disk_cache.cacheSize() < limit + 100
|
||||
|
||||
|
||||
def test_cache_size_deactivated(config_stub, tmpdir):
|
||||
@ -249,7 +249,6 @@ def test_cache_deactivated_insert_data(config_stub, tmpdir):
|
||||
assert deactivated_cache.insert(device) is None
|
||||
|
||||
|
||||
|
||||
def test_cache_remove_data(config_stub, tmpdir):
|
||||
"""Test if a previously inserted entry can be removed from the cache."""
|
||||
config_stub.data = {
|
||||
|
@ -27,6 +27,7 @@ import pytest
|
||||
|
||||
from qutebrowser.browser import mhtml
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def patch_uuid(monkeypatch):
|
||||
monkeypatch.setattr("uuid.uuid4", lambda: "UUID")
|
||||
|
@ -82,6 +82,7 @@ def objects():
|
||||
signal_filter.create(signaller.cur_statusbar_message, tab))
|
||||
return Objects(signal_filter=signal_filter, signaller=signaller)
|
||||
|
||||
|
||||
@pytest.yield_fixture
|
||||
def tabbed_browser(win_registry):
|
||||
tb = FakeTabbedBrowser()
|
||||
|
@ -42,8 +42,8 @@ ITEMS = [
|
||||
# From https://github.com/OtterBrowser/otter-browser/issues/709#issuecomment-74749471
|
||||
Item(QUrl('http://github.com/OtterBrowser/24/134/2344/otter-browser/'
|
||||
'issues/709/'),
|
||||
'Page not found | github',
|
||||
user_data={'zoom': 149, 'scroll-pos': QPoint(0, 0)}),
|
||||
'Page not found | github',
|
||||
user_data={'zoom': 149, 'scroll-pos': QPoint(0, 0)}),
|
||||
Item(QUrl('https://mail.google.com/mail/u/0/#label/some+label/'
|
||||
'234lkjsd0932lkjf884jqwerdf4'),
|
||||
'"some label" - email@gmail.com - Gmail"',
|
||||
|
@ -67,7 +67,7 @@ def get_webelem(geometry=None, frame=None, null=False, style=None,
|
||||
elem.hasAttribute.side_effect = lambda k: k in attribute_dict
|
||||
elem.attribute.side_effect = lambda k: attribute_dict.get(k, '')
|
||||
elem.setAttribute.side_effect = (lambda k, v:
|
||||
operator.setitem(attribute_dict, k, v))
|
||||
operator.setitem(attribute_dict, k, v))
|
||||
elem.removeAttribute.side_effect = attribute_dict.pop
|
||||
elem.attributeNames.return_value = list(attribute_dict)
|
||||
|
||||
@ -112,7 +112,7 @@ class SelectionAndFilterTests:
|
||||
('<a href="foo" />', [webelem.Group.all, webelem.Group.links,
|
||||
webelem.Group.prevnext, webelem.Group.url]),
|
||||
('<a href="javascript://foo" />', [webelem.Group.all,
|
||||
webelem.Group.url]),
|
||||
webelem.Group.url]),
|
||||
|
||||
('<area />', [webelem.Group.all]),
|
||||
('<area href="foo" />', [webelem.Group.all, webelem.Group.links,
|
||||
|
@ -77,7 +77,6 @@ class TestCheckExclusive:
|
||||
assert str(excinfo.value) == "Only one of -x/-y/-z can be given!"
|
||||
|
||||
|
||||
|
||||
class TestRegister:
|
||||
|
||||
# pylint: disable=unused-variable
|
||||
|
@ -97,7 +97,7 @@ class TestConfigParser:
|
||||
def test_invalid_value_interpolated(self, objects):
|
||||
"""Test setting an invalid interpolated value."""
|
||||
objects.cp.read_dict({'general': {'ignore-case': 'smart',
|
||||
'wrap-search': '${ignore-case}'}})
|
||||
'wrap-search': '${ignore-case}'}})
|
||||
objects.cfg._from_cp(objects.cp)
|
||||
with pytest.raises(configexc.ValidationError):
|
||||
objects.cfg._validate_all()
|
||||
@ -105,7 +105,7 @@ class TestConfigParser:
|
||||
def test_interpolation(self, objects):
|
||||
"""Test setting an interpolated value."""
|
||||
objects.cp.read_dict({'general': {'ignore-case': 'false',
|
||||
'wrap-search': '${ignore-case}'}})
|
||||
'wrap-search': '${ignore-case}'}})
|
||||
objects.cfg._from_cp(objects.cp)
|
||||
assert not objects.cfg.get('general', 'ignore-case')
|
||||
assert not objects.cfg.get('general', 'wrap-search')
|
||||
|
@ -362,7 +362,7 @@ class TestList:
|
||||
def test_validate_valid(self, klass, val):
|
||||
klass(none_ok=True).validate(val)
|
||||
|
||||
@pytest.mark.parametrize('val', ['', 'foo,,bar',])
|
||||
@pytest.mark.parametrize('val', ['', 'foo,,bar'])
|
||||
def test_validate_invalid(self, klass, val):
|
||||
with pytest.raises(configexc.ValidationError):
|
||||
klass().validate(val)
|
||||
@ -1036,7 +1036,6 @@ class TestFont:
|
||||
|
||||
font_xfail = pytest.mark.xfail(reason='FIXME: #103')
|
||||
|
||||
|
||||
@pytest.fixture(params=[configtypes.Font, configtypes.QtFont])
|
||||
def klass(self, request):
|
||||
return request.param
|
||||
|
@ -37,8 +37,9 @@ def test_python2():
|
||||
"""Run checkpyver with python 2."""
|
||||
try:
|
||||
proc = subprocess.Popen(['python2', checkpyver.__file__,
|
||||
'--no-err-windows'], stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
'--no-err-windows'],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
stdout, stderr = proc.communicate()
|
||||
except FileNotFoundError:
|
||||
pytest.skip("python2 not found")
|
||||
|
@ -329,10 +329,10 @@ class TestListen:
|
||||
file_mode_ok = file_stat.st_mode & 0o777 == 0o700
|
||||
dir_mode_ok = dir_stat.st_mode & 0o777 == 0o700
|
||||
|
||||
print('sockdir: {} / owner {} / mode {:o}'.format(sockdir,
|
||||
dir_stat.st_uid, dir_stat.st_mode))
|
||||
print('sockfile: {} / owner {} / mode {:o}'.format(sockfile,
|
||||
file_stat.st_uid, file_stat.st_mode))
|
||||
print('sockdir: {} / owner {} / mode {:o}'.format(
|
||||
sockdir, dir_stat.st_uid, dir_stat.st_mode))
|
||||
print('sockfile: {} / owner {} / mode {:o}'.format(
|
||||
sockfile, file_stat.st_uid, file_stat.st_mode))
|
||||
|
||||
assert file_owner_ok or dir_owner_ok
|
||||
assert file_mode_ok or dir_mode_ok
|
||||
@ -831,8 +831,8 @@ class TestSendOrListen:
|
||||
'title: Error while connecting to running instance!',
|
||||
'pre_text: ',
|
||||
'post_text: Maybe another instance is running but frozen?',
|
||||
'exception text: Error while listening to IPC server: Error '
|
||||
'string (error 4)',
|
||||
('exception text: Error while listening to IPC server: Error '
|
||||
'string (error 4)'),
|
||||
]
|
||||
assert caplog.records[0].msg == '\n'.join(error_msgs)
|
||||
|
||||
|
@ -38,6 +38,7 @@ from qutebrowser.commands import cmdexc
|
||||
pytestmark = pytest.mark.qt_log_ignore('QIODevice::read.*: device not open',
|
||||
extend=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sess_man():
|
||||
"""Fixture providing a SessionManager with no session dir."""
|
||||
@ -246,7 +247,7 @@ class TestSaveTab:
|
||||
|
||||
items = [
|
||||
Item(url=QUrl('http://www.example.com/'), title='Test title',
|
||||
active=True),
|
||||
active=True),
|
||||
Item(url=QUrl('http://www.example.com/'), title='Test title',
|
||||
user_data={'zoom': factor}),
|
||||
]
|
||||
|
@ -239,7 +239,6 @@ class TestGetAllObjects:
|
||||
def __repr__(self):
|
||||
return '<{}>'.format(self._name)
|
||||
|
||||
|
||||
def test_get_all_objects(self, stubs, monkeypatch):
|
||||
# pylint: disable=unused-variable
|
||||
widgets = [self.Object('Widget 1'), self.Object('Widget 2')]
|
||||
@ -248,8 +247,8 @@ class TestGetAllObjects:
|
||||
|
||||
root = QObject()
|
||||
o1 = self.Object('Object 1', root)
|
||||
o2 = self.Object('Object 2', o1)
|
||||
o3 = self.Object('Object 3', root)
|
||||
o2 = self.Object('Object 2', o1) # flake8: disable=F841
|
||||
o3 = self.Object('Object 3', root) # flake8: disable=F841
|
||||
|
||||
expected = textwrap.dedent("""
|
||||
Qt widgets - 2 objects:
|
||||
|
@ -532,6 +532,7 @@ def test_same_domain(are_same, url1, url2):
|
||||
assert urlutils.same_domain(QUrl(url1), QUrl(url2)) == are_same
|
||||
assert urlutils.same_domain(QUrl(url2), QUrl(url1)) == are_same
|
||||
|
||||
|
||||
@pytest.mark.parametrize('url1, url2', [
|
||||
('http://example.com', ''),
|
||||
('', 'http://example.com'),
|
||||
@ -618,7 +619,7 @@ class TestIncDecNumber:
|
||||
after decrementing."""
|
||||
with pytest.raises(urlutils.IncDecError):
|
||||
urlutils.incdec_number(QUrl('http://example.com/page_0.html'),
|
||||
'decrement')
|
||||
'decrement')
|
||||
|
||||
def test_invalid_url(self):
|
||||
"""Test if incdec_number rejects an invalid URL."""
|
||||
|
@ -530,7 +530,6 @@ def test_parse_single_key(keystr, expected):
|
||||
assert utils._parse_single_key(keystr) == expected
|
||||
|
||||
|
||||
|
||||
@pytest.mark.parametrize('keystr, expected', [
|
||||
('<Control-x>', [utils.KeyInfo(Qt.Key_X, Qt.ControlModifier, '')]),
|
||||
('x', [utils.KeyInfo(Qt.Key_X, Qt.NoModifier, 'x')]),
|
||||
|
@ -44,7 +44,7 @@ def test_name(enum):
|
||||
def test_unknown(enum):
|
||||
"""Test invalid values which should raise an AttributeError."""
|
||||
with pytest.raises(AttributeError):
|
||||
_ = enum.three
|
||||
_ = enum.three # flake8: disable=F841
|
||||
|
||||
|
||||
def test_start():
|
||||
|
54
tox.ini
54
tox.ini
@ -4,7 +4,7 @@
|
||||
# and then run "tox" from this directory.
|
||||
|
||||
[tox]
|
||||
envlist = py34,py35,misc,vulture,pep257,pyflakes,pep8,mccabe,pylint,pyroma,check-manifest
|
||||
envlist = py34,py35,misc,vulture,pep257,flake8,pylint,pyroma,check-manifest
|
||||
|
||||
[testenv]
|
||||
# https://bitbucket.org/hpk42/tox/issue/246/ - only needed for Windows though
|
||||
@ -147,50 +147,26 @@ deps = pep257==0.7.0
|
||||
# D402: First line should not be function's signature (false-positives)
|
||||
commands = {envpython} -m pep257 scripts tests qutebrowser --ignore=D102,D103,D104,D105,D209,D211,D402 '--match=(?!resources|test_*).*\.py'
|
||||
|
||||
[testenv:pyflakes]
|
||||
basepython = python3
|
||||
# https://github.com/fschulze/pytest-flakes/issues/6
|
||||
setenv = LANG=en_US.UTF-8
|
||||
passenv =
|
||||
deps =
|
||||
-r{toxinidir}/requirements.txt
|
||||
apipkg==1.4
|
||||
execnet==1.4.1
|
||||
py==1.4.31
|
||||
pyflakes==1.0.0
|
||||
pytest==2.8.5
|
||||
pytest-flakes==1.0.1
|
||||
commands =
|
||||
{envpython} -m py.test -q --flakes --ignore=tests --noconftest
|
||||
|
||||
[testenv:pep8]
|
||||
[testenv:flake8]
|
||||
basepython = python3
|
||||
passenv =
|
||||
deps =
|
||||
-r{toxinidir}/requirements.txt
|
||||
apipkg==1.4
|
||||
execnet==1.4.1
|
||||
pep8==1.7
|
||||
py==1.4.31
|
||||
pytest==2.8.5
|
||||
pytest-pep8==1.0.6
|
||||
commands =
|
||||
{envpython} -m py.test -q --pep8 --ignore=tests --noconftest
|
||||
|
||||
|
||||
[testenv:mccabe]
|
||||
basepython = python3
|
||||
passenv =
|
||||
deps =
|
||||
-r{toxinidir}/requirements.txt
|
||||
apipkg==1.4
|
||||
execnet==1.4.1
|
||||
flake8==2.5.1
|
||||
flake8-debugger==1.4.0
|
||||
pep8-naming==0.3.3
|
||||
flake8-putty==0.2.0
|
||||
ebb-lint==0.4.3
|
||||
flake8-copyright==0.1
|
||||
mccabe==0.3.1
|
||||
py==1.4.31
|
||||
pytest==2.8.5
|
||||
pytest-mccabe==0.1
|
||||
pep8==1.7.0
|
||||
pyflakes==1.0.0
|
||||
flake8-string-format==0.2.1
|
||||
flake8-deprecated==0.2
|
||||
flake8-mock==0.2
|
||||
flake8-pep3101==0.2
|
||||
commands =
|
||||
{envpython} -m py.test -q --mccabe --ignore=tests --noconftest
|
||||
{envpython} -m flake8
|
||||
|
||||
[testenv:pyroma]
|
||||
basepython = python3
|
||||
|
Loading…
Reference in New Issue
Block a user