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
This commit is contained in:
parent
202270c6ed
commit
6f09c18ecd
|
|
@ -1,5 +1,8 @@
|
|||
[run]
|
||||
source = qutebrowser
|
||||
include =
|
||||
qutebrowser/*
|
||||
tests/*
|
||||
scripts/*
|
||||
branch = true
|
||||
omit =
|
||||
qutebrowser/__main__.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()
|
||||
|
|
|
|||
|
|
@ -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()))
|
||||
|
|
|
|||
Loading…
Reference in New Issue