diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-04 10:40:21 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-04 10:40:21 +0100 |
| commit | 3850a46d1d4138b80dbc20bbe4ac4342d6911ab0 (patch) | |
| tree | 017c62612b034065c35aa3b350e41da00d3bb30b | |
| parent | 8da917bce6e937ab092bb2f68c0bcf6039c3a3d7 (diff) | |
feat(tooling): Add directory filtering to coverage report script (Task #46)
Updated gen_coverage_report.sh to accept an optional argument for targeting specific directories using lcov --extract.
| -rw-r--r-- | PROJECT_CONTEXT.md | 1 | ||||
| -rw-r--r-- | TODO.md | 1 | ||||
| -rw-r--r-- | doc/HOWTO.md | 12 | ||||
| -rwxr-xr-x | scripts/gen_coverage_report.sh | 13 |
4 files changed, 25 insertions, 2 deletions
diff --git a/PROJECT_CONTEXT.md b/PROJECT_CONTEXT.md index 7634ad9..9a9ecea 100644 --- a/PROJECT_CONTEXT.md +++ b/PROJECT_CONTEXT.md @@ -28,6 +28,7 @@ Style: ## Project Roadmap ### Recently Completed +- **Task #46: Enhance Coverage Script**: Updated coverage report script to support directory filtering (e.g., `./scripts/gen_coverage_report.sh src/procedural`). - **Task #45: Improve Procedural Generation Coverage**: Achieved 96% coverage for `src/procedural/` by implementing comprehensive tests for Perlin noise, periodic blending, and parameter handling. - **Task #44: Developer Tooling (Coverage)**: Added `DEMO_ENABLE_COVERAGE` CMake option and created `scripts/gen_coverage_report.sh` to generate HTML coverage reports using `lcov` on macOS. - **Skybox & Two-pass Rendering Stability**: Resolved "black screen" and validation errors by implementing a robust two-pass rendering architecture (Pass 1: Skybox/Clear, Pass 2: Scene Objects). Implemented a rotating skybox using world-space ray unprojection (`inv_view_proj`) and a multi-octave procedural noise generator. @@ -3,6 +3,7 @@ This file tracks prioritized tasks with detailed attack plans. ## Recently Completed (February 4, 2026) +- [x] **Task #46: Enhance Coverage Script**: Updated `scripts/gen_coverage_report.sh` to accept an optional directory argument for targeted coverage reports (e.g., `src/procedural`). - [x] **Task #45: Improve Procedural Generation Coverage**: - [x] **Unit Tests:** Implemented comprehensive tests for `gen_perlin`, `make_periodic`, and default parameter handling in `src/tests/test_procedural.cc`. - [x] **Coverage Boost:** Increased `src/procedural/generator.cc` coverage from 38% to 96%. diff --git a/doc/HOWTO.md b/doc/HOWTO.md index 29492d5..e562679 100644 --- a/doc/HOWTO.md +++ b/doc/HOWTO.md @@ -128,10 +128,20 @@ To generate an HTML code coverage report for the project: 2. **Run the coverage script:** ```bash - ./scripts/gen_coverage_report.sh + ./scripts/gen_coverage_report.sh [optional_target_dir] ``` This script will configure the build with `-DDEMO_ENABLE_COVERAGE=ON`, run the tests, and generate a report in `build_coverage/coverage_report/`. It will then attempt to open the report in your browser. + **Examples:** + * Full project report: + ```bash + ./scripts/gen_coverage_report.sh + ``` + * Report for `src/procedural` only: + ```bash + ./scripts/gen_coverage_report.sh src/procedural + ``` + ## Tools ### Updating Submodules diff --git a/scripts/gen_coverage_report.sh b/scripts/gen_coverage_report.sh index bae2141..b569251 100755 --- a/scripts/gen_coverage_report.sh +++ b/scripts/gen_coverage_report.sh @@ -7,12 +7,16 @@ set -e PROJECT_ROOT=$(cd "$(dirname "$0")/.." && pwd) BUILD_DIR="${PROJECT_ROOT}/build_coverage" REPORT_DIR="${PROJECT_ROOT}/build_coverage/coverage_report" +TARGET_FILTER="$1" # Common lcov options to handle AppleClang quirks LCOV_OPTS="--ignore-errors mismatch,inconsistent,gcov,format,unsupported,category" echo "=== Code Coverage Report Generator ===" echo "Project Root: ${PROJECT_ROOT}" +if [ -n "$TARGET_FILTER" ]; then + echo "Target Filter: ${TARGET_FILTER}" +fi # Check for lcov if ! command -v lcov &> /dev/null; then @@ -48,9 +52,16 @@ echo "--- Filtering Coverage Data ---" # Remove system headers and third-party libraries lcov --remove coverage.info '/usr/*' "${PROJECT_ROOT}/third_party/*" "${PROJECT_ROOT}/build_coverage/*" '*/test_*' --output-file coverage_filtered.info $LCOV_OPTS +# Apply target directory filter if provided +if [ -n "$TARGET_FILTER" ]; then + echo "--- Applying Target Filter: ${TARGET_FILTER} ---" + # We use '*' around the filter to match the absolute path + lcov --extract coverage_filtered.info "*${TARGET_FILTER}*" --output-file coverage_filtered.info $LCOV_OPTS +fi + echo "--- Generating HTML Report ---" genhtml coverage_filtered.info --output-directory "${REPORT_DIR}" $LCOV_OPTS echo "=== Coverage Report Generated ===" echo "Open the report with:" -echo "open ${REPORT_DIR}/index.html" +echo "open ${REPORT_DIR}/index.html"
\ No newline at end of file |
