fix(coverage): fail fast on dead test process; harden web validation
Red team review of this PR surfaced a hang, a silent-data-loss
regression, and several validation gaps.
- Fail immediately when the test process exits before reporting a VM
service URI. Deleting _dartRun removed the only thing that surfaced a
dead child, so a bad --test path (or unresolvable deps, or a broken
pubspec) hung forever instead of failing in ~1s. The child's exit code
is now propagated.
- Throw a FormatException from HitMap.parseFiles for files that are
neither a {"coverage": [...]} report nor a raw V8 list. The pattern
matching switch had no default arm, so 13 of 16 malformed inputs
silently produced an empty hitmap where they previously threw.
- Reject --branch-coverage with a web platform (it is silently ignored
there), matching the --function-coverage treatment.
- Reject platform flags passed through to the test script: '-p chrome --
-p vm' previously ran both platforms, bypassing validation entirely.
- Warn instead of silently writing an empty report when no coverage data
survives filtering, which happens naturally when the web compiler
inlines library code into test files.
- Document in --help and the CHANGELOG that web coverage is measured on
compiled JavaScript and is not comparable to VM coverage, so
--fail-under thresholds must be re-tuned per platform.
- Add regression tests for all of the above, plus tests contributed by
the review for exit-code propagation, platform validation messages,
--platform vm routing, and the V8 parsing paths.
This repository is home to tooling related Dart packages. Generally, this means packages published through the tools.dart.dev publisher that don't naturally belong to other topic monorepos (like dart-lang/build, dart-lang/test, or dart-lang/shelf).
| Package | Description | Issues | Version |
|---|---|---|---|
| api_summary | Creates an API summary for a package. | ||
| bazel_worker | Protocol and utilities to implement or invoke persistent bazel workers. | ||
| benchmark_harness | The official Dart project benchmark harness. | ||
| boolean_selector | A flexible syntax for boolean expressions, based on a simplified version of Dart's expression syntax. | ||
| browser_launcher | Provides a standardized way to launch web browsers for testing and tools. | ||
| cli_config | A library to take config values from configuration files, CLI arguments, and environment variables. | ||
| cli_util | A library to help in building Dart command-line apps. | ||
| clock | A fakeable wrapper for dart:core clock APIs. | ||
| code_builder | A fluent, builder-based library for generating valid Dart code. | ||
| coverage | Coverage data manipulation and formatting | ||
| csslib | A library for parsing and analyzing CSS (Cascading Style Sheets). | ||
| extension_discovery | A convention and utilities for package extension discovery. | ||
| file | A pluggable, mockable file system abstraction for Dart. | ||
| file_testing | Testing utilities for package:file. | ||
| glob | A library to perform Bash-style file and directory globbing. | ||
| graphs | Graph algorithms that operate on graphs in any representation. | ||
| html | APIs for parsing and manipulating HTML content outside the browser. | ||
| io | Utilities for the Dart VM Runtime including support for ANSI colors, file copying, and standard exit code values. | ||
| json_rpc_2 | Utilities to write a client or server using the JSON-RPC 2.0 spec. | ||
| markdown | A portable Markdown library written in Dart that can parse Markdown into HTML. | ||
| mime | Utilities for handling media (MIME) types, including determining a type from a file extension and file contents. | ||
| oauth2 | A client library for authenticating with a remote service via OAuth2 on behalf of a user, and making authorized HTTP requests with the user's OAuth2 credentials. | ||
| package_config | Support for reading and writing Dart Package Configuration files. | ||
| pool | Manage a finite pool of resources. Useful for controlling concurrent file system or network requests. | ||
| process | A pluggable, mockable process invocation abstraction for Dart. | ||
| pub_semver | Versions and version constraints implementing pub's versioning policy. This is very similar to vanilla semver, with a few corner cases. | ||
| pubspec_parse | Simple package for parsing pubspec.yaml files with a type-safe API and rich error reporting. | ||
| source_map_stack_trace | A package for applying source maps to stack traces. | ||
| source_maps | A library to programmatically manipulate source map files. | ||
| source_span | Provides a standard representation for source code locations and spans. | ||
| sse | Provides client and server functionality for setting up bi-directional communication through Server Sent Events (SSE) and corresponding POST requests. | ||
| stack_trace | A package for manipulating stack traces and printing them readably. | ||
| stream_channel | An abstraction for two-way communication channels based on the Dart Stream class. | ||
| stream_transform | A collection of utilities to transform and manipulate streams. | ||
| string_scanner | A class for parsing strings using a sequence of patterns. | ||
| term_glyph | Useful Unicode glyphs and ASCII substitutes. | ||
| test_reflective_loader | Support for discovering tests and test suites using reflection. | ||
| timing | A simple package for tracking the performance of synchronous and asynchronous actions. | ||
| unified_analytics | A package for logging analytics for all Dart and Flutter related tooling to Google Analytics. | ||
| watcher | A file system watcher. It monitors changes to contents of directories and sends notifications when files have been added, removed, or modified. | ||
| yaml | A parser for YAML, a human-friendly data serialization standard | ||
| yaml_edit | A library for YAML manipulation with comment and whitespace preservation. |
For information about our publishing automation and release process, see https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.
For additional information about contributing, see our contributing page.