summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-08-11 19:43:05 +0200
committerFlorian Bruhin <me@the-compiler.org>2020-08-11 19:43:05 +0200
commit6f09c18ecdd6efc936c035cfb853769e4993cae1 (patch)
tree40642aabcb60d4228713046c9cdd452dde2b7e3a
parent202270c6ed3f2daa1b7df5cdc7def818f4d6f47d (diff)
downloadqutebrowser-6f09c18ecdd6efc936c035cfb853769e4993cae1.tar.gz
qutebrowser-6f09c18ecdd6efc936c035cfb853769e4993cae1.zip
Run coverage over tests/scripts
Rationale: https://nedbatchelder.com/blog/202008/you_should_include_your_tests_in_coverage.html Switched from "source" to "include" as a workaround for https://github.com/nedbat/coveragepy/issues/578 - also see: https://github.com/LibraryOfCongress/concordia/pull/857/files
-rw-r--r--.coveragerc5
-rw-r--r--scripts/dev/check_coverage.py164
-rw-r--r--tests/unit/scripts/test_check_coverage.py4
3 files changed, 88 insertions, 85 deletions
diff --git a/.coveragerc b/.coveragerc
index 2ef20dd12..9d43917a3 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,5 +1,8 @@
[run]
-source = qutebrowser
+include =
+ qutebrowser/*
+ tests/*
+ scripts/*
branch = true
omit =
qutebrowser/__main__.py
diff --git a/scripts/dev/check_coverage.py b/scripts/dev/check_coverage.py
index 12963de38..313aa13e3 100644
--- a/scripts/dev/check_coverage.py
+++ b/scripts/dev/check_coverage.py
@@ -59,170 +59,170 @@ MsgType = enum.Enum('MsgType', 'insufficient_coverage, perfect_file')
# A list of (test_file, tested_file) tuples. test_file can be None.
PERFECT_FILES = [
(None,
- 'commands/cmdexc.py'),
+ 'qutebrowser/commands/cmdexc.py'),
('tests/unit/commands/test_argparser.py',
- 'commands/argparser.py'),
+ 'qutebrowser/commands/argparser.py'),
('tests/unit/api/test_cmdutils.py',
- 'api/cmdutils.py'),
+ 'qutebrowser/api/cmdutils.py'),
(None,
- 'api/apitypes.py'),
+ 'qutebrowser/api/apitypes.py'),
(None,
- 'api/config.py'),
+ 'qutebrowser/api/config.py'),
(None,
- 'api/message.py'),
+ 'qutebrowser/api/message.py'),
(None,
- 'api/qtutils.py'),
+ 'qutebrowser/api/qtutils.py'),
('tests/unit/browser/webkit/test_cache.py',
- 'browser/webkit/cache.py'),
+ 'qutebrowser/browser/webkit/cache.py'),
('tests/unit/browser/webkit/test_cookies.py',
- 'browser/webkit/cookies.py'),
+ 'qutebrowser/browser/webkit/cookies.py'),
('tests/unit/browser/test_history.py',
- 'browser/history.py'),
+ 'qutebrowser/browser/history.py'),
('tests/unit/browser/test_pdfjs.py',
- 'browser/pdfjs.py'),
+ 'qutebrowser/browser/pdfjs.py'),
('tests/unit/browser/webkit/http/test_http.py',
- 'browser/webkit/http.py'),
+ 'qutebrowser/browser/webkit/http.py'),
('tests/unit/browser/webkit/http/test_content_disposition.py',
- 'browser/webkit/rfc6266.py'),
+ 'qutebrowser/browser/webkit/rfc6266.py'),
# ('tests/unit/browser/webkit/test_webkitelem.py',
- # 'browser/webkit/webkitelem.py'),
+ # 'qutebrowser/browser/webkit/webkitelem.py'),
# ('tests/unit/browser/webkit/test_webkitelem.py',
- # 'browser/webelem.py'),
+ # 'qutebrowser/browser/webelem.py'),
('tests/unit/browser/webkit/network/test_filescheme.py',
- 'browser/webkit/network/filescheme.py'),
+ 'qutebrowser/browser/webkit/network/filescheme.py'),
('tests/unit/browser/webkit/network/test_networkreply.py',
- 'browser/webkit/network/networkreply.py'),
+ 'qutebrowser/browser/webkit/network/networkreply.py'),
('tests/unit/browser/test_signalfilter.py',
- 'browser/signalfilter.py'),
+ 'qutebrowser/browser/signalfilter.py'),
(None,
- 'browser/webengine/certificateerror.py'),
+ 'qutebrowser/browser/webengine/certificateerror.py'),
# ('tests/unit/browser/test_tab.py',
- # 'browser/tab.py'),
+ # 'qutebrowser/browser/tab.py'),
('tests/unit/keyinput/test_basekeyparser.py',
- 'keyinput/basekeyparser.py'),
+ 'qutebrowser/keyinput/basekeyparser.py'),
('tests/unit/keyinput/test_keyutils.py',
- 'keyinput/keyutils.py'),
+ 'qutebrowser/keyinput/keyutils.py'),
('tests/unit/components/test_readlinecommands.py',
- 'components/readlinecommands.py'),
+ 'qutebrowser/components/readlinecommands.py'),
('tests/unit/misc/test_autoupdate.py',
- 'misc/autoupdate.py'),
+ 'qutebrowser/misc/autoupdate.py'),
('tests/unit/misc/test_split.py',
- 'misc/split.py'),
+ 'qutebrowser/misc/split.py'),
('tests/unit/misc/test_msgbox.py',
- 'misc/msgbox.py'),
+ 'qutebrowser/misc/msgbox.py'),
('tests/unit/misc/test_checkpyver.py',
- 'misc/checkpyver.py'),
+ 'qutebrowser/misc/checkpyver.py'),
('tests/unit/misc/test_guiprocess.py',
- 'misc/guiprocess.py'),
+ 'qutebrowser/misc/guiprocess.py'),
('tests/unit/misc/test_editor.py',
- 'misc/editor.py'),
+ 'qutebrowser/misc/editor.py'),
('tests/unit/misc/test_cmdhistory.py',
- 'misc/cmdhistory.py'),
+ 'qutebrowser/misc/cmdhistory.py'),
('tests/unit/misc/test_ipc.py',
- 'misc/ipc.py'),
+ 'qutebrowser/misc/ipc.py'),
('tests/unit/misc/test_keyhints.py',
- 'misc/keyhintwidget.py'),
+ 'qutebrowser/misc/keyhintwidget.py'),
('tests/unit/misc/test_pastebin.py',
- 'misc/pastebin.py'),
+ 'qutebrowser/misc/pastebin.py'),
('tests/unit/misc/test_objects.py',
- 'misc/objects.py'),
+ 'qutebrowser/misc/objects.py'),
('tests/unit/misc/test_throttle.py',
- 'misc/throttle.py'),
+ 'qutebrowser/misc/throttle.py'),
(None,
- 'mainwindow/statusbar/keystring.py'),
+ 'qutebrowser/mainwindow/statusbar/keystring.py'),
('tests/unit/mainwindow/statusbar/test_percentage.py',
- 'mainwindow/statusbar/percentage.py'),
+ 'qutebrowser/mainwindow/statusbar/percentage.py'),
('tests/unit/mainwindow/statusbar/test_progress.py',
- 'mainwindow/statusbar/progress.py'),
+ 'qutebrowser/mainwindow/statusbar/progress.py'),
('tests/unit/mainwindow/statusbar/test_tabindex.py',
- 'mainwindow/statusbar/tabindex.py'),
+ 'qutebrowser/mainwindow/statusbar/tabindex.py'),
('tests/unit/mainwindow/statusbar/test_textbase.py',
- 'mainwindow/statusbar/textbase.py'),
+ 'qutebrowser/mainwindow/statusbar/textbase.py'),
('tests/unit/mainwindow/statusbar/test_url.py',
- 'mainwindow/statusbar/url.py'),
+ 'qutebrowser/mainwindow/statusbar/url.py'),
('tests/unit/mainwindow/statusbar/test_backforward.py',
- 'mainwindow/statusbar/backforward.py'),
+ 'qutebrowser/mainwindow/statusbar/backforward.py'),
('tests/unit/mainwindow/test_messageview.py',
- 'mainwindow/messageview.py'),
+ 'qutebrowser/mainwindow/messageview.py'),
('tests/unit/config/test_config.py',
- 'config/config.py'),
+ 'qutebrowser/config/config.py'),
('tests/unit/config/test_stylesheet.py',
- 'config/stylesheet.py'),
+ 'qutebrowser/config/stylesheet.py'),
('tests/unit/config/test_configdata.py',
- 'config/configdata.py'),
+ 'qutebrowser/config/configdata.py'),
('tests/unit/config/test_configexc.py',
- 'config/configexc.py'),
+ 'qutebrowser/config/configexc.py'),
('tests/unit/config/test_configfiles.py',
- 'config/configfiles.py'),
+ 'qutebrowser/config/configfiles.py'),
('tests/unit/config/test_configtypes.py',
- 'config/configtypes.py'),
+ 'qutebrowser/config/configtypes.py'),
('tests/unit/config/test_configinit.py',
- 'config/configinit.py'),
+ 'qutebrowser/config/configinit.py'),
('tests/unit/config/test_qtargs.py',
- 'config/qtargs.py'),
+ 'qutebrowser/config/qtargs.py'),
('tests/unit/config/test_configcommands.py',
- 'config/configcommands.py'),
+ 'qutebrowser/config/configcommands.py'),
('tests/unit/config/test_configutils.py',
- 'config/configutils.py'),
+ 'qutebrowser/config/configutils.py'),
('tests/unit/config/test_configcache.py',
- 'config/configcache.py'),
+ 'qutebrowser/config/configcache.py'),
('tests/unit/utils/test_qtutils.py',
- 'utils/qtutils.py'),
+ 'qutebrowser/utils/qtutils.py'),
('tests/unit/utils/test_standarddir.py',
- 'utils/standarddir.py'),
+ 'qutebrowser/utils/standarddir.py'),
('tests/unit/utils/test_urlutils.py',
- 'utils/urlutils.py'),
+ 'qutebrowser/utils/urlutils.py'),
('tests/unit/utils/usertypes',
- 'utils/usertypes.py'),
+ 'qutebrowser/utils/usertypes.py'),
('tests/unit/utils/test_utils.py',
- 'utils/utils.py'),
+ 'qutebrowser/utils/utils.py'),
('tests/unit/utils/test_version.py',
- 'utils/version.py'),
+ 'qutebrowser/utils/version.py'),
('tests/unit/utils/test_debug.py',
- 'utils/debug.py'),
+ 'qutebrowser/utils/debug.py'),
('tests/unit/utils/test_jinja.py',
- 'utils/jinja.py'),
+ 'qutebrowser/utils/jinja.py'),
('tests/unit/utils/test_error.py',
- 'utils/error.py'),
+ 'qutebrowser/utils/error.py'),
('tests/unit/utils/test_javascript.py',
- 'utils/javascript.py'),
+ 'qutebrowser/utils/javascript.py'),
('tests/unit/utils/test_urlmatch.py',
- 'utils/urlmatch.py'),
+ 'qutebrowser/utils/urlmatch.py'),
(None,
- 'completion/models/util.py'),
+ 'qutebrowser/completion/models/util.py'),
('tests/unit/completion/test_models.py',
- 'completion/models/urlmodel.py'),
+ 'qutebrowser/completion/models/urlmodel.py'),
('tests/unit/completion/test_models.py',
- 'completion/models/configmodel.py'),
+ 'qutebrowser/completion/models/configmodel.py'),
('tests/unit/completion/test_histcategory.py',
- 'completion/models/histcategory.py'),
+ 'qutebrowser/completion/models/histcategory.py'),
('tests/unit/completion/test_listcategory.py',
- 'completion/models/listcategory.py'),
+ 'qutebrowser/completion/models/listcategory.py'),
('tests/unit/browser/webengine/test_spell.py',
- 'browser/webengine/spell.py'),
+ 'qutebrowser/browser/webengine/spell.py'),
('tests/unit/browser/webengine/test_webengine_cookies.py',
- 'browser/webengine/cookies.py'),
+ 'qutebrowser/browser/webengine/cookies.py'),
]
# 100% coverage because of end2end tests, but no perfect unit tests yet.
WHITELISTED_FILES = [
- 'browser/webkit/webkitinspector.py',
- 'misc/debugcachestats.py',
- 'keyinput/macros.py',
- 'browser/webkit/webkitelem.py',
- 'api/interceptor.py',
+ 'qutebrowser/browser/webkit/webkitinspector.py',
+ 'qutebrowser/misc/debugcachestats.py',
+ 'qutebrowser/keyinput/macros.py',
+ 'qutebrowser/browser/webkit/webkitelem.py',
+ 'qutebrowser/api/interceptor.py',
]
@@ -243,8 +243,6 @@ def _get_filename(filename):
common_path = os.path.commonprefix([basedir, filename])
if common_path:
filename = filename[len(common_path):].lstrip('/')
- if filename.startswith('qutebrowser/'):
- filename = filename.split('/', maxsplit=1)[1]
return filename
@@ -295,8 +293,10 @@ def check(fileobj, perfect_files):
filename, line_cov, branch_cov)
messages.append(Message(MsgType.insufficient_coverage, filename,
text))
- elif (filename not in perfect_src_files and not is_bad and
- filename not in WHITELISTED_FILES):
+ elif (filename not in perfect_src_files and
+ not is_bad and
+ filename not in WHITELISTED_FILES and
+ not filename.startswith('tests/')):
text = ("{} has 100% coverage but is not in "
"perfect_files!".format(filename))
messages.append(Message(MsgType.perfect_file, filename, text))
@@ -320,7 +320,7 @@ def main_check():
for msg in messages:
msg.show()
print()
- filters = ','.join('qutebrowser/' + msg.filename for msg in messages)
+ filters = ','.join(msg.filename for msg in messages)
subprocess.run([sys.executable, '-m', 'coverage', 'report',
'--show-missing', '--include', filters], check=True)
print()
diff --git a/tests/unit/scripts/test_check_coverage.py b/tests/unit/scripts/test_check_coverage.py
index 9aa3e172e..ec9d9666b 100644
--- a/tests/unit/scripts/test_check_coverage.py
+++ b/tests/unit/scripts/test_check_coverage.py
@@ -227,11 +227,11 @@ def test_skipped_non_linux(covtest):
def _generate_files():
"""Get filenames from WHITELISTED_/PERFECT_FILES."""
for src_file in check_coverage.WHITELISTED_FILES:
- yield pathlib.Path('qutebrowser') / src_file
+ yield pathlib.Path(src_file)
for test_file, src_file in check_coverage.PERFECT_FILES:
if test_file is not None:
yield pathlib.Path(test_file)
- yield pathlib.Path('qutebrowser') / src_file
+ yield pathlib.Path(src_file)
@pytest.mark.parametrize('filename', list(_generate_files()))