# Increase Coverage

> Systematic guidelines for executing code coverage tools, analyzing gaps in testing, and implementing targeted tests to maximize code coverage across the reactive framework.

- Skill: `randalschwartz/increase-coverage` (Agent Skill)
- Install (CLI): `npx skillmds@latest add randalschwartz/increase-coverage`
- Raw SKILL.md: https://api.skillmd.com/api/skills/randalschwartz/increase-coverage/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: randalschwartz (https://skillmd.com/u/randalschwartz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/randalschwartz/increase-coverage

---


# Code Coverage Execution and Maximization Guide

This developer skill provides step-by-step instructions and best practices for executing code coverage tools, identifying untested paths (gaps), and writing high-fidelity unit tests to drive coverage to 100% across the monorepo.

---

## 1. Executing and Aggregating Monorepo Coverage

Our monorepo coordinates testing across multiple packages using Melos. Follow this command workflow to generate and merge coverage data:

### A. Run Package Tests with Coverage
Execute the monorepo test runner. This runs `flutter test --coverage` (or `dart test --coverage`) across all packages:
```bash
melos run test
```

### B. Combine Package Coverage Files
Run the combination script to merge individual package-level `coverage/lcov.info` files into a unified root `lcov.info` file:
```bash
melos run coverage
```
> [!NOTE]
> The aggregation script (`scripts/combine_coverage.sh`) dynamically rewrites path roots to be absolute and deletes temporary package `coverage` directories to maintain workspace hygiene.

### C. Generate the HTML Coverage Report
Translate the unified `lcov.info` file into an interactive HTML visualization report using `genhtml` (part of the `lcov` toolkit):
```bash
genhtml lcov.info -o coverage/html
```

---

## 2. Pinpointing Uncovered Lines (Gap Analysis)

To quickly locate untested lines of code without browsing the entire HTML report, run the following `grep` and `awk` pipeline on the root `lcov.info` file:

```bash
grep -E "SF:|DA:" lcov.info | awk -F: '/SF/ {file=$2} /DA/ {split($2,a,","); if(a[2]==0) print file, a[1]}'
```

This output displays the absolute file path followed by the exact line number of every uncovered statement, for example:
```text
/workspace/packages/preact_signals/lib/src/model.dart 21
/workspace/packages/preact_signals/lib/src/model.dart 25
```

---

## 3. Strategies for Reaching 100% Coverage

Once you identify the uncovered lines, apply these targeted testing strategies to write meaningful tests:

### A. Testing Model and Option Basics
Ensure value models, options, and parameters are fully exercised:
- **`copyWith` Methods**: Test with both `null` (to assert fallback to current value) and explicit values.
- **Equality (`==`) and `hashCode`**:
  - Test comparing identical references (`identical(this, other)`).
  - Test comparing distinct instances with identical properties (expect equal).
  - Test comparing distinct instances with differing properties (expect unequal).
  - Test comparing against null or instances of completely different classes.

### B. Exercising Complex Branch/Condition Logic
Examine every nested `if`, `else`, and ternary (`? :`) statement:
- Construct test inputs that force the path to evaluate to `true`.
- Construct test inputs that force the path to evaluate to `false`.
- Ensure bounds checks, empty collections, and null-safety fallbacks are explicitly triggered.

### C. Simulating and Asserting Exception/Catch Paths
To cover recovery logic or diagnostic assertions:
- **`catch` Blocks**: Pass incompatible types or construct scenarios that cause runtime `TypeError` or `AssertionError` to verify fallback branches.
- **Dispose and Lifecycle Errors**: Call `.dispose()` on a signal/primitive, then attempt a read or write operation to assert it throws `SignalsReadAfterDisposeError` or `SignalsWriteAfterDisposeError`.

### D. Deep Recursive Collections
Verify that custom deep collection assertions (such as lists, maps, sets, or nested objects) evaluate both matching and mismatching configurations at every depth.

---

## 4. Housekeeping and Version Safety

Before finalizing the coverage maximization run, verify repository hygiene:

1. **Format test files**:
   ```bash
   dart format .
   ```
2. **Run Lints & Static Analysis**:
   ```bash
   melos run analyze
   ```
3. **Clean Git State**:
   Never check coverage files (`lcov.info` or `coverage/`) into Git history. If they are accidentally staged, remove them:
   ```bash
   git rm -r --cached coverage/
   git rm lcov.info
   ```

