diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000000..dc36ebc35d --- /dev/null +++ b/.coveragerc @@ -0,0 +1,28 @@ +[run] +branch = True +relative_files = True +omit = + */tests/* + */tests.py + */test/* + */test.py + */venv/* + */.venv/* + */.tox/* + */build/* + */dist/* + */__pycache__/* + +[report] +show_missing = True +skip_covered = False +precision = 2 +exclude_lines = + pragma: no cover + if __name__ == "__main__": + if TYPE_CHECKING: + raise NotImplementedError + +[html] +directory = build/coverage/html +title = CodeChecker test coverage diff --git a/.gitignore b/.gitignore index b59c2b93c7..2f4aa4c92e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ build build_dist venv venv_dev +.coverage Makefile.local /web/server/vue-cli/dist diff --git a/analyzer/tests/Makefile b/analyzer/tests/Makefile index 88e85bf67e..8f10be6cb8 100644 --- a/analyzer/tests/Makefile +++ b/analyzer/tests/Makefile @@ -54,7 +54,14 @@ run_test_in_env: venv_dev is_TEST_set pytest $(PYTESTCFG) ${TEST} || exit 1 UNIT_TEST_CMD = $(REPO_ROOT) pytest $(PYTESTCFG) tests/unit -UNIT_TEST_COV_CMD = $(REPO_ROOT) coverage run -m pytest $(PYTESTCFG) tests/unit && coverage report && coverage html +COVERAGE_CMD = $(REPO_ROOT) $(PYTHON_BIN) -m coverage +COVERAGE_RCFILE = --rcfile=$(ROOT)/.coveragerc +ANALYZER_COVERAGE_SOURCE = codechecker_analyzer,codechecker_common +UNIT_TEST_COV_CMD = mkdir -p build/coverage && \ + $(COVERAGE_CMD) erase $(COVERAGE_RCFILE) && \ + $(COVERAGE_CMD) run $(COVERAGE_RCFILE) --source=$(ANALYZER_COVERAGE_SOURCE) -m pytest $(PYTESTCFG) tests/unit && \ + $(COVERAGE_CMD) report $(COVERAGE_RCFILE) && \ + $(COVERAGE_CMD) html $(COVERAGE_RCFILE) test_unit: $(UNIT_TEST_CMD) diff --git a/web/client/tests/Makefile b/web/client/tests/Makefile index 9fceab69b8..c899f2eff0 100644 --- a/web/client/tests/Makefile +++ b/web/client/tests/Makefile @@ -1,5 +1,12 @@ CLIENT_UNIT_TEST_CMD = $(REPO_ROOT) BUILD_DIR=$(BUILD_DIR) pytest $(PYTESTCFG) client client/tests/unit -CLIENT_UNIT_TEST_COV_CMD = $(REPO_ROOT) BUILD_DIR=$(BUILD_DIR) coverage run -m pytest $(PYTESTCFG) client client/tests/unit && coverage report && coverage html +CLIENT_COVERAGE_CMD = $(REPO_ROOT) $(PYTHON_BIN) -m coverage +CLIENT_COVERAGE_RCFILE = --rcfile=$(ROOT)/.coveragerc +CLIENT_COVERAGE_SOURCE = codechecker_client,codechecker_web,codechecker_common +CLIENT_UNIT_TEST_COV_CMD = mkdir -p build/coverage && \ + $(CLIENT_COVERAGE_CMD) erase $(CLIENT_COVERAGE_RCFILE) && \ + $(CLIENT_COVERAGE_CMD) run $(CLIENT_COVERAGE_RCFILE) --source=$(CLIENT_COVERAGE_SOURCE) -m pytest $(PYTESTCFG) client client/tests/unit && \ + $(CLIENT_COVERAGE_CMD) report $(CLIENT_COVERAGE_RCFILE) && \ + $(CLIENT_COVERAGE_CMD) html $(CLIENT_COVERAGE_RCFILE) test_unit_client: diff --git a/web/server/tests/Makefile b/web/server/tests/Makefile index e048aa400f..23c9801999 100644 --- a/web/server/tests/Makefile +++ b/web/server/tests/Makefile @@ -1,5 +1,12 @@ SERVER_UNIT_TEST_CMD = $(REPO_ROOT) BUILD_DIR=$(BUILD_DIR) pytest $(PYTESTCFG) server server/tests/unit -SERVER_UNIT_TEST_COV_CMD = $(REPO_ROOT) BUILD_DIR=$(BUILD_DIR) coverage run -m pytest $(PYTESTCFG) server server/tests/unit && coverage report && coverage html +SERVER_COVERAGE_CMD = $(REPO_ROOT) $(PYTHON_BIN) -m coverage +SERVER_COVERAGE_RCFILE = --rcfile=$(ROOT)/.coveragerc +SERVER_COVERAGE_SOURCE = codechecker_server,codechecker_web,codechecker_common +SERVER_UNIT_TEST_COV_CMD = mkdir -p build/coverage && \ + $(SERVER_COVERAGE_CMD) erase $(SERVER_COVERAGE_RCFILE) && \ + $(SERVER_COVERAGE_CMD) run $(SERVER_COVERAGE_RCFILE) --source=$(SERVER_COVERAGE_SOURCE) -m pytest $(PYTESTCFG) server server/tests/unit && \ + $(SERVER_COVERAGE_CMD) report $(SERVER_COVERAGE_RCFILE) && \ + $(SERVER_COVERAGE_CMD) html $(SERVER_COVERAGE_RCFILE) test_unit_server: $(SERVER_UNIT_TEST_CMD)