Skip to content

Commit

Permalink
Merge pull request #2539 from leancodepl/fix-skipping-with-coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
gogolon authored Feb 26, 2025
2 parents cd8c7b5 + 87fe671 commit 5c272a9
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
1 change: 1 addition & 0 deletions packages/patrol_cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- Handle uninstallation of the app after tests finish when using AGP 8.2+. (#2535)
- Add `--coverage-packages` flag to `patrol test` that specifies which packages should be included
in the coverage report. (#2536)
- Fix skipping tests with coverage collection enabled. (#2539)

## 3.5.0

Expand Down
27 changes: 24 additions & 3 deletions packages/patrol_cli/lib/src/coverage/coverage_tool.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:patrol_cli/src/coverage/vm_connection_details.dart';
import 'package:patrol_cli/src/devices.dart';
import 'package:platform/platform.dart';
import 'package:process/process.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';

class CoverageTool {
Expand Down Expand Up @@ -149,14 +150,34 @@ class CoverageTool {
required VMConnectionDetails connectionDetails,
}) async {
final result = <String, coverage.HitMap>{};
final coverageReadyForCollection = Completer<Event?>();
final serviceClient = await vmServiceConnectUri(
connectionDetails.webSocketUri.toString(),
);
_disposeScope.addDispose(serviceClient.dispose);

await serviceClient.streamListen('Extension');
final event = await serviceClient.onExtensionEvent
.where((event) => event.extensionKind == 'waitForCoverageCollection')
.first;
unawaited(
serviceClient.onDone.then((_) {
if (!coverageReadyForCollection.isCompleted) {
coverageReadyForCollection.complete(null);
}
}),
);
unawaited(
serviceClient.onExtensionEvent
.where((event) => event.extensionKind == 'waitForCoverageCollection')
.first
.then(coverageReadyForCollection.complete),
);
final event = await coverageReadyForCollection.future;
if (event == null) {
// If the event is null, then the VM service terminated without sending
// the waitForCoverageCollection event. This means that the test was
// skipped, so we don't need to collect coverage.
return {};
}

result.merge(
await _collectAndMarkTestCompleted(
connectionDetails: connectionDetails,
Expand Down

0 comments on commit 5c272a9

Please sign in to comment.