Skip to content

Commit bb2047c

Browse files
committed
fix: report all coverage when no filters are specified
1 parent fe41d54 commit bb2047c

File tree

3 files changed

+99
-1
lines changed

3 files changed

+99
-1
lines changed

pkgs/test/test/runner/coverage_test.dart

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,95 @@ end_of_record
283283
''');
284284
});
285285

286+
test('gathers coverage for code outside of lib in json mode', () async {
287+
await d.dir(d.sandbox, [
288+
d.dir('dart_frog_sample', [
289+
d.file('pubspec.yaml', '''
290+
name: dart_frog_sample
291+
version: 1.0.0
292+
environment:
293+
sdk: ^3.5.0
294+
dependencies:
295+
dart_frog: ^1.0.0
296+
dev_dependencies:
297+
mocktail: ^1.0.0
298+
test: ^1.26.2
299+
'''),
300+
d.dir('routes', [
301+
d.file('index.dart', '''
302+
import 'package:dart_frog/dart_frog.dart';
303+
Response onRequest(RequestContext context) {
304+
return Response(body: 'Welcome to Dart Frog!');
305+
}
306+
'''),
307+
]),
308+
d.dir('test', [
309+
d.dir('routes', [
310+
d.file('index_test.dart', '''
311+
import 'dart:io';
312+
import 'package:dart_frog/dart_frog.dart';
313+
import 'package:mocktail/mocktail.dart';
314+
import 'package:test/test.dart';
315+
316+
import '../../routes/index.dart' as route;
317+
318+
class _MockRequestContext extends Mock implements RequestContext {}
319+
320+
void main() {
321+
group('GET /', () {
322+
test('responds with a 200 and "Welcome to Dart Frog!".', () {
323+
final context = _MockRequestContext();
324+
final response = route.onRequest(context);
325+
expect(response.statusCode, equals(HttpStatus.ok));
326+
expect(
327+
response.body(),
328+
completion(equals('Welcome to Dart Frog!')),
329+
);
330+
});
331+
});
332+
}
333+
'''),
334+
]),
335+
]),
336+
]),
337+
]).create();
338+
339+
final pkgDir = p.join(d.sandbox, 'dart_frog_sample');
340+
await (await runPub([
341+
'global',
342+
'activate',
343+
'coverage',
344+
], workingDirectory: pkgDir)).shouldExit(0);
345+
await (await runPub(['get'], workingDirectory: pkgDir)).shouldExit(0);
346+
final lcovFile = p.join(coverageDirectory.path, 'lcov.info');
347+
var test = await runTest(
348+
['--coverage', coverageDirectory.path, 'test/routes/index_test.dart'],
349+
packageConfig: p.join(pkgDir, '.dart_tool/package_config.json'),
350+
workingDirectory: pkgDir,
351+
);
352+
await validateTest(test);
353+
await (await runPub([
354+
'global',
355+
'run',
356+
'coverage:format_coverage',
357+
'--lcov',
358+
'--in=${coverageDirectory.path}',
359+
'--out=$lcovFile',
360+
'--report-on=lib,routes',
361+
], workingDirectory: pkgDir)).shouldExit(0);
362+
expect(
363+
File(lcovFile).readAsStringSync(),
364+
contains('''
365+
SF:${p.join(pkgDir, 'routes', 'index.dart')}
366+
DA:2,1
367+
DA:3,1
368+
LF:2
369+
LH:2
370+
end_of_record
371+
'''),
372+
);
373+
});
374+
286375
test('gathers coverage for Chrome tests', () async {
287376
await (await runPub(['get'], workingDirectory: pkgDir)).shouldExit(0);
288377
var test = await runTest(

pkgs/test_core/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## 0.6.16-wip
22

3+
- Fix coverage reporting to report all coverage when using JSON workflow.
34
* Add `SuiteConfiguration.suiteLoadTimeout` to configure the timeout for loading a test suite.
45
* Removed hard-coded timeout of 12m for loading a test suite and set default to `none`.
56

pkgs/test_core/lib/src/runner/vm/platform.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ Future<Map<String, dynamic>> _gatherCoverage(
427427
false,
428428
false,
429429
false,
430-
await _filterCoveragePackages(config.coveragePackages),
430+
await _filterCoveragePackages(config.coveragePackages, config.coverageLcov),
431431
isolateIds: {isolateId!},
432432
branchCoverage: config.branchCoverage,
433433
);
@@ -456,7 +456,15 @@ void _setupPauseAfterTests() {
456456

457457
Future<Set<String>> _filterCoveragePackages(
458458
List<RegExp>? coveragePackages,
459+
String? coverageLcov,
459460
) async {
461+
if (coverageLcov == null && coveragePackages == null) {
462+
// If no filters were provided and we using json workflow, report coverage
463+
// for all packages. This is required to maintain backward compatibility
464+
// particularly in cases where coverage is required for files outside of
465+
// the lib directory. See https://github.com/dart-lang/test/issues/2581
466+
return {};
467+
}
460468
if (coveragePackages == null || coveragePackages.isEmpty) {
461469
return workspacePackageNames(await currentPackage);
462470
} else {

0 commit comments

Comments
 (0)