mirror of
https://github.com/ankitects/anki.git
synced 2026-05-16 05:41:12 -04:00
## Linked issue Closes #4838 ## Summary/motivation Adds `coverage.py`-based test coverage for both Python test suites (`pylib` and `qt`). Introduces `just test-py --coverage` and `just test-py --coverage --html`, plus the `just test --coverage`. Coverage reports are written to `out/coverage/`. ## How to test ```sh # Existing behavior unchanged just test-py # Terminal summary + enforces thresholds just test-py --coverage # Terminal summary + HTML reports under out/coverage/ just test-py --coverage --html # Umbrella (Python only for now) just test --coverage just test --coverage --html ``` ### Checklist (minimum) - [x] I ran `./ninja check` or an equivalent relevant check locally. ### Details - `coverage` dependency pinned to >=7.13.5 in pyproject.toml. - The `coverage` umbrella recipe currently delegates to Python only for now ## Before / after behavior Before: no `just test-py`, no coverage support. After: `just test-py` runs Python tests via ninja; `just test-py --coverage` runs them with `coverage.py` and enforces minimum line coverage. --------- Co-authored-by: Abdo <abdo@abdnh.net>
30 lines
1.1 KiB
Batchfile
30 lines
1.1 KiB
Batchfile
@echo off
|
|
setlocal
|
|
|
|
if "%1"=="pylib" (
|
|
set "PYTHONPATH=out/pylib"
|
|
set "source=pylib/anki"
|
|
set "outdir=out\coverage\python-pylib"
|
|
set "tests=pylib/tests"
|
|
set "threshold=65"
|
|
) else if "%1"=="qt" (
|
|
set "PYTHONPATH=pylib;out/pylib;out/qt"
|
|
set "source=qt/aqt"
|
|
set "outdir=out\coverage\python-qt"
|
|
set "tests=qt/tests"
|
|
set "threshold=20"
|
|
) else (
|
|
echo Usage: %0 [pylib^|qt] [--html]
|
|
exit /b 1
|
|
)
|
|
|
|
set "ANKI_TEST_MODE=1"
|
|
if not exist %outdir% mkdir %outdir%
|
|
out\pyenv\Scripts\python -m coverage run --source=%source% --data-file=%outdir%\.coverage -m pytest -p no:cacheprovider %tests% || exit /b 1
|
|
out\pyenv\Scripts\python -m coverage json --data-file=%outdir%\.coverage -o %outdir%\coverage-summary.json || exit /b 1
|
|
out\pyenv\Scripts\python -m coverage report --data-file=%outdir%\.coverage --fail-under=%threshold% || exit /b 1
|
|
if "%2"=="--html" (
|
|
out\pyenv\Scripts\python -m coverage html --data-file=%outdir%\.coverage -d %outdir%\html --fail-under=%threshold% || exit /b 1
|
|
echo Python %1 coverage report: %outdir%\html\index.html
|
|
)
|