diff --git a/pkgs/test/CHANGELOG.md b/pkgs/test/CHANGELOG.md index 9278b439f..377bd8d91 100644 --- a/pkgs/test/CHANGELOG.md +++ b/pkgs/test/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.9.1 + +* Depend on latest `test_core`. + ## 1.9.0 * Implement code coverage collection for VM based tests diff --git a/pkgs/test/pubspec.yaml b/pkgs/test/pubspec.yaml index c94a1ad39..6164aa739 100644 --- a/pkgs/test/pubspec.yaml +++ b/pkgs/test/pubspec.yaml @@ -1,5 +1,5 @@ name: test -version: 1.9.0 +version: 1.9.1 author: Dart Team description: A full featured library for writing and running Dart tests. homepage: https://github.com/dart-lang/test/blob/master/pkgs/test @@ -32,7 +32,7 @@ dependencies: yaml: ^2.0.0 # Use an exact version until the test_api and test_core package are stable. test_api: 0.2.8 - test_core: 0.2.11 + test_core: 0.2.12 dev_dependencies: fake_async: ^1.0.0 diff --git a/pkgs/test_core/CHANGELOG.md b/pkgs/test_core/CHANGELOG.md index e25a3c4b5..f39f92aef 100644 --- a/pkgs/test_core/CHANGELOG.md +++ b/pkgs/test_core/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.2.12 + +* Conditionally import coverage logic in `engine.dart`. This ensures the engine + is platform agnostic. + ## 0.2.11 * Implement code coverage gathering for VM tests. diff --git a/pkgs/test_core/lib/src/runner/coverage.dart b/pkgs/test_core/lib/src/runner/coverage.dart new file mode 100644 index 000000000..7dc218499 --- /dev/null +++ b/pkgs/test_core/lib/src/runner/coverage.dart @@ -0,0 +1,34 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:convert'; +import 'dart:io'; + +import 'package:coverage/coverage.dart'; +import 'package:path/path.dart' as p; + +import 'live_suite_controller.dart'; +import 'runner_suite.dart'; + +/// Collects coverage and outputs to the [coverage] path. +Future gatherCoverage( + String coverage, LiveSuiteController controller) async { + final RunnerSuite suite = controller.liveSuite.suite; + + if (!suite.platform.runtime.isDartVM) return; + + final String isolateId = Uri.parse(suite.environment.observatoryUrl.fragment) + .queryParameters['isolateId']; + + final cov = await collect( + suite.environment.observatoryUrl, false, false, false, Set(), + isolateIds: {isolateId}); + + final outfile = File(p.join('$coverage', '${suite.path}.vm.json')) + ..createSync(recursive: true); + final IOSink out = outfile.openWrite(); + out.write(json.encode(cov)); + await out.flush(); + await out.close(); +} diff --git a/pkgs/test_core/lib/src/runner/coverage_stub.dart b/pkgs/test_core/lib/src/runner/coverage_stub.dart new file mode 100644 index 000000000..5a2285f09 --- /dev/null +++ b/pkgs/test_core/lib/src/runner/coverage_stub.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'live_suite_controller.dart'; + +Future gatherCoverage(String coverage, LiveSuiteController controller) => + throw UnsupportedError( + 'Coverage is only supported through the test runner.'); diff --git a/pkgs/test_core/lib/src/runner/engine.dart b/pkgs/test_core/lib/src/runner/engine.dart index 11ae315ff..c0f922de4 100644 --- a/pkgs/test_core/lib/src/runner/engine.dart +++ b/pkgs/test_core/lib/src/runner/engine.dart @@ -4,16 +4,11 @@ import 'dart:async'; import 'dart:collection'; -import 'dart:convert'; -import 'dart:io'; import 'package:async/async.dart' hide Result; import 'package:collection/collection.dart'; -import 'package:coverage/coverage.dart'; -import 'package:path/path.dart' as p; import 'package:pedantic/pedantic.dart'; import 'package:pool/pool.dart'; - import 'package:test_api/src/backend/group.dart'; // ignore: implementation_imports import 'package:test_api/src/backend/invoker.dart'; // ignore: implementation_imports import 'package:test_api/src/backend/live_test.dart'; // ignore: implementation_imports @@ -23,10 +18,11 @@ import 'package:test_api/src/backend/state.dart'; // ignore: implementation_impo import 'package:test_api/src/backend/test.dart'; // ignore: implementation_imports import 'package:test_api/src/util/iterable_set.dart'; // ignore: implementation_imports -import 'runner_suite.dart'; +import 'coverage_stub.dart' if (dart.library.io) 'coverage.dart'; import 'live_suite.dart'; import 'live_suite_controller.dart'; import 'load_suite.dart'; +import 'runner_suite.dart'; /// An [Engine] manages a run that encompasses multiple test suites. /// @@ -288,7 +284,7 @@ class Engine { if (_closed) return; await _runGroup(controller, controller.liveSuite.suite.group, []); controller.noMoreLiveTests(); - await _gatherCoverage(controller); + if (_coverage != null) await gatherCoverage(_coverage, controller); loadResource.allowRelease(() => controller.close()); }); }()); @@ -303,29 +299,6 @@ class Engine { return success; } - Future _gatherCoverage(LiveSuiteController controller) async { - if (_coverage == null) return; - - final RunnerSuite suite = controller.liveSuite.suite; - - if (!suite.platform.runtime.isDartVM) return; - - final String isolateId = - Uri.parse(suite.environment.observatoryUrl.fragment) - .queryParameters['isolateId']; - - final cov = await collect( - suite.environment.observatoryUrl, false, false, false, Set(), - isolateIds: {isolateId}); - - final outfile = File(p.join('$_coverage', '${suite.path}.vm.json')) - ..createSync(recursive: true); - final IOSink out = outfile.openWrite(); - out.write(json.encode(cov)); - await out.flush(); - await out.close(); - } - /// Runs all the entries in [group] in sequence. /// /// [suiteController] is the controller fo the suite that contains [group]. diff --git a/pkgs/test_core/pubspec.yaml b/pkgs/test_core/pubspec.yaml index 9aec1fb83..0e0502708 100644 --- a/pkgs/test_core/pubspec.yaml +++ b/pkgs/test_core/pubspec.yaml @@ -1,5 +1,5 @@ name: test_core -version: 0.2.11 +version: 0.2.12 author: Dart Team description: A basic library for writing tests and running them on the VM. homepage: https://github.com/dart-lang/test/blob/master/pkgs/test_core