8
8
import 'dart:convert' ;
9
9
import 'dart:io' ;
10
10
11
+ import 'package:coverage/coverage.dart' ;
11
12
import 'package:path/path.dart' as p;
12
13
import 'package:test/test.dart' ;
13
14
import 'package:test_descriptor/test_descriptor.dart' as d;
@@ -20,55 +21,136 @@ void main() {
20
21
21
22
group ('with the --coverage flag,' , () {
22
23
late Directory coverageDirectory;
24
+ late d.DirectoryDescriptor packageDirectory;
23
25
24
- Future <void > validateCoverage (TestProcess test, String coveragePath ) async {
26
+ Future <void > validateTest (TestProcess test) async {
25
27
expect (test.stdout, emitsThrough (contains ('+1: All tests passed!' )));
26
28
await test.shouldExit (0 );
29
+ }
30
+
31
+ Future <Map <String , HitMap >> validateCoverage (
32
+ TestProcess test,
33
+ String coveragePath,
34
+ ) async {
35
+ await validateTest (test);
27
36
28
37
final coverageFile = File (p.join (coverageDirectory.path, coveragePath));
29
38
final coverage = await coverageFile.readAsString ();
30
- final jsonCoverage = json.decode (coverage);
31
- expect (jsonCoverage['coverage' ], isNotEmpty);
39
+ final jsonCoverage = json.decode (coverage)['coverage' ] as List <dynamic >;
40
+ expect (jsonCoverage, isNotEmpty);
41
+
42
+ return HitMap .parseJson (jsonCoverage.cast <Map <String , dynamic >>());
32
43
}
33
44
34
45
setUp (() async {
35
- await d.file ('test.dart' , '''
36
- import 'package:test/test.dart';
37
-
38
- void main() {
39
- test("test 1", () {
40
- expect(true, isTrue);
41
- });
42
- }
43
- ''' ).create ();
44
-
45
46
coverageDirectory = await Directory .systemTemp.createTemp (
46
47
'test_coverage' ,
47
48
);
49
+
50
+ packageDirectory = d.dir (d.sandbox, [
51
+ d.dir ('lib' , [
52
+ d.file ('calculate.dart' , '''
53
+ int calculate(int x) {
54
+ if (x % 2 == 0) {
55
+ return x * 2;
56
+ } else {
57
+ return x * 3;
58
+ }
59
+ }
60
+ ''' ),
61
+ ]),
62
+ d.dir ('test' , [
63
+ d.file ('test.dart' , '''
64
+ import 'package:fake_package/calculate.dart';
65
+ import 'package:test/test.dart';
66
+
67
+ void main() {
68
+ test('test 1', () {
69
+ expect(calculate(6), 12);
70
+ });
71
+ }
72
+ ''' ),
73
+ ]),
74
+ d.file ('pubspec.yaml' , '''
75
+ name: fake_package
76
+ version: 1.0.0
77
+ environment:
78
+ sdk: ^3.5.0
79
+ dev_dependencies:
80
+ test: ^1.26.2
81
+ ''' ),
82
+ ]);
83
+ await packageDirectory.create ();
48
84
});
49
85
50
86
tearDown (() async {
51
87
await coverageDirectory.delete (recursive: true );
52
88
});
53
89
54
90
test ('gathers coverage for VM tests' , () async {
91
+ await (await runPub (['get' ])).shouldExit (0 );
55
92
var test = await runTest ([
56
93
'--coverage' ,
57
94
coverageDirectory.path,
58
- 'test.dart' ,
59
- ]);
60
- await validateCoverage (test, 'test.dart.vm.json' );
95
+ 'test/test.dart' ,
96
+ ], packageConfig: p.join (d.sandbox, '.dart_tool/package_config.json' ));
97
+ final coverage = await validateCoverage (test, 'test/test.dart.vm.json' );
98
+ final hitmap = coverage['package:fake_package/calculate.dart' ]! ;
99
+ expect (hitmap.lineHits, {1 : 1 , 2 : 2 , 3 : 1 , 5 : 0 });
100
+ expect (hitmap.funcHits, isNull);
101
+ expect (hitmap.branchHits, isNull);
102
+ });
103
+
104
+ test ('gathers branch coverage for VM tests' , () async {
105
+ await (await runPub (['get' ])).shouldExit (0 );
106
+ var test = await runTest (
107
+ [
108
+ '--coverage' ,
109
+ coverageDirectory.path,
110
+ '--branch-coverage' ,
111
+ 'test/test.dart' ,
112
+ ],
113
+ vmArgs: ['--branch-coverage' ],
114
+ packageConfig: p.join (d.sandbox, '.dart_tool/package_config.json' ),
115
+ );
116
+ final coverage = await validateCoverage (test, 'test/test.dart.vm.json' );
117
+ final hitmap = coverage['package:fake_package/calculate.dart' ]! ;
118
+ expect (hitmap.lineHits, {1 : 1 , 2 : 2 , 3 : 1 , 5 : 0 });
119
+ expect (hitmap.funcHits, isNull);
120
+ expect (hitmap.branchHits, {1 : 1 , 2 : 1 , 4 : 0 });
121
+ });
122
+
123
+ test ('gathers lcov coverage for VM tests' , () async {
124
+ await (await runPub (['get' ])).shouldExit (0 );
125
+ final lcovFile = p.join (coverageDirectory.path, 'lcov.info' );
126
+ var test = await runTest ([
127
+ '--coverage-path' ,
128
+ lcovFile,
129
+ 'test/test.dart' ,
130
+ ], packageConfig: p.join (d.sandbox, '.dart_tool/package_config.json' ));
131
+ await validateTest (test);
132
+ expect (File (lcovFile).readAsStringSync (), '''
133
+ SF:${p .join (d .sandbox , 'lib' , 'calculate.dart' )}
134
+ DA:1,1
135
+ DA:2,2
136
+ DA:3,1
137
+ DA:5,0
138
+ LF:4
139
+ LH:3
140
+ end_of_record
141
+ ''' );
61
142
});
62
143
63
144
test ('gathers coverage for Chrome tests' , () async {
145
+ await (await runPub (['get' ])).shouldExit (0 );
64
146
var test = await runTest ([
65
147
'--coverage' ,
66
148
coverageDirectory.path,
67
- 'test.dart' ,
149
+ 'test/test .dart' ,
68
150
'-p' ,
69
151
'chrome' ,
70
- ]);
71
- await validateCoverage (test, 'test.dart.chrome.json' );
152
+ ], packageConfig : p. join (d.sandbox, '.dart_tool/package_config.json' ) );
153
+ await validateCoverage (test, 'test/test .dart.chrome.json' );
72
154
});
73
155
74
156
test (
0 commit comments