diff options
author | Florian Bruhin <me@the-compiler.org> | 2020-08-11 19:43:05 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2020-08-11 19:43:05 +0200 |
commit | 6f09c18ecdd6efc936c035cfb853769e4993cae1 (patch) | |
tree | 40642aabcb60d4228713046c9cdd452dde2b7e3a | |
parent | 202270c6ed3f2daa1b7df5cdc7def818f4d6f47d (diff) | |
download | qutebrowser-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-- | .coveragerc | 5 | ||||
-rw-r--r-- | scripts/dev/check_coverage.py | 164 | ||||
-rw-r--r-- | tests/unit/scripts/test_check_coverage.py | 4 |
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())) |