Skip to content

Commit 7c4c144

Browse files
authored
refactor(flutter_cli): stub test runner in unit tests (#444)
1 parent 8862b7f commit 7c4c144

File tree

5 files changed

+2179
-1048
lines changed

5 files changed

+2179
-1048
lines changed

lib/src/cli/flutter_cli.dart

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ class _CoverageMetrics {
4949
double get percentage => totalFound < 1 ? 0 : (totalHits / totalFound * 100);
5050
}
5151

52+
/// Type definition for the [flutterTest] command
53+
/// from 'package:very_good_test_runner`.
54+
typedef FlutterTestRunner = Stream<TestEvent> Function({
55+
List<String>? arguments,
56+
String? workingDirectory,
57+
Map<String, String>? environment,
58+
bool runInShell,
59+
});
60+
61+
/// A method which returns a [Future<MasonGenerator>] given a [MasonBundle].
62+
typedef GeneratorBuilder = Future<MasonGenerator> Function(MasonBundle);
63+
5264
/// Flutter CLI
5365
class Flutter {
5466
/// Determine whether flutter is installed.
@@ -125,6 +137,8 @@ class Flutter {
125137
Logger? logger,
126138
void Function(String)? stdout,
127139
void Function(String)? stderr,
140+
FlutterTestRunner testRunner = flutterTest,
141+
GeneratorBuilder buildGenerator = MasonGenerator.fromBundle,
128142
}) async {
129143
final lcovPath = p.join(cwd, 'coverage', 'lcov.info');
130144
final lcovFile = File(lcovPath);
@@ -159,7 +173,7 @@ class Flutter {
159173
if (optimizePerformance) {
160174
final optimizationProgress = logger?.progress('Optimizing tests');
161175
try {
162-
final generator = await MasonGenerator.fromBundle(testRunnerBundle);
176+
final generator = await buildGenerator(testRunnerBundle);
163177
var vars = <String, dynamic>{'package-root': workingDirectory};
164178
await generator.hooks.preGen(
165179
vars: vars,
@@ -179,6 +193,7 @@ class Flutter {
179193
return _flutterTest(
180194
cwd: cwd,
181195
collectCoverage: collectCoverage,
196+
testRunner: testRunner,
182197
arguments: [
183198
...?arguments,
184199
if (randomSeed != null) ...[
@@ -275,6 +290,7 @@ Future<int> _flutterTest({
275290
String cwd = '.',
276291
bool collectCoverage = false,
277292
List<String>? arguments,
293+
FlutterTestRunner testRunner = flutterTest,
278294
required void Function(String) stdout,
279295
required void Function(String) stderr,
280296
}) {
@@ -308,7 +324,7 @@ Future<int> _flutterTest({
308324
);
309325

310326
late final StreamSubscription<TestEvent> subscription;
311-
subscription = flutterTest(
327+
subscription = testRunner(
312328
workingDirectory: cwd,
313329
arguments: [
314330
if (collectCoverage) '--coverage',

test/fixtures/fixtures.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export 'lcov_fixtures.dart';
2+
export 'test_runner_fixtures.dart';

test/fixtures/lcov_fixtures.dart

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
const lcov100 = '''
2+
SF:/bloc/packages/bloc/lib/src/bloc.dart
3+
DA:21,2
4+
DA:22,1
5+
DA:26,3
6+
DA:37,1
7+
DA:39,2
8+
DA:41,1
9+
DA:42,2
10+
DA:44,1
11+
DA:66,1
12+
DA:70,2
13+
DA:105,1
14+
DA:109,1
15+
DA:135,1
16+
DA:162,1
17+
DA:166,2
18+
DA:170,1
19+
DA:172,1
20+
DA:197,1
21+
DA:201,1
22+
DA:212,1
23+
DA:213,3
24+
DA:214,3
25+
DA:215,1
26+
DA:223,1
27+
DA:225,1
28+
DA:227,1
29+
DA:228,2
30+
DA:229,1
31+
DA:230,2
32+
DA:231,3
33+
DA:232,2
34+
DA:233,1
35+
DA:239,1
36+
DA:240,1
37+
DA:241,4
38+
DA:243,1
39+
DA:244,2
40+
DA:246,1
41+
DA:248,1
42+
DA:250,1
43+
LF:40
44+
LH:40
45+
end_of_record
46+
SF:/bloc/packages/bloc/lib/src/bloc_observer.dart
47+
DA:14,1
48+
DA:20,1
49+
DA:27,1
50+
DA:36,1
51+
DA:43,1
52+
DA:51,1
53+
LF:6
54+
LH:6
55+
end_of_record
56+
SF:/bloc/packages/bloc/lib/src/change.dart
57+
DA:10,1
58+
DA:18,1
59+
DA:21,1
60+
DA:22,3
61+
DA:23,3
62+
DA:24,3
63+
DA:26,1
64+
DA:27,5
65+
DA:29,1
66+
DA:31,3
67+
LF:10
68+
LH:10
69+
end_of_record
70+
SF:/bloc/packages/bloc/lib/src/cubit.dart
71+
DA:16,1
72+
DA:27,1
73+
DA:29,3
74+
DA:30,1
75+
DA:54,1
76+
DA:56,2
77+
DA:60,2
78+
DA:62,2
79+
DA:79,1
80+
DA:82,2
81+
DA:83,2
82+
DA:84,3
83+
DA:85,3
84+
DA:86,1
85+
DA:87,3
86+
DA:88,1
87+
DA:92,1
88+
DA:93,1
89+
DA:115,1
90+
DA:118,2
91+
DA:138,1
92+
DA:142,2
93+
DA:143,1
94+
DA:144,1
95+
DA:145,1
96+
DA:152,1
97+
DA:159,2
98+
DA:160,3
99+
DA:170,1
100+
DA:175,1
101+
DA:178,2
102+
DA:179,2
103+
LF:32
104+
LH:32
105+
end_of_record
106+
SF:/bloc/packages/bloc/lib/src/transition.dart
107+
DA:14,1
108+
DA:18,1
109+
DA:23,1
110+
DA:26,1
111+
DA:27,3
112+
DA:28,3
113+
DA:29,3
114+
DA:30,3
115+
DA:32,1
116+
DA:34,8
117+
DA:37,1
118+
DA:39,4
119+
LF:12
120+
LH:12
121+
end_of_record
122+
''';
123+
124+
const lcov95 = '''
125+
SF:/bloc/packages/bloc/lib/src/bloc.dart
126+
DA:21,2
127+
DA:22,1
128+
DA:26,3
129+
DA:37,1
130+
DA:39,2
131+
DA:41,1
132+
DA:42,2
133+
DA:44,1
134+
DA:66,1
135+
DA:70,2
136+
DA:105,1
137+
DA:109,1
138+
DA:135,1
139+
DA:162,1
140+
DA:166,2
141+
DA:170,1
142+
DA:172,1
143+
DA:197,1
144+
DA:201,1
145+
DA:212,1
146+
DA:213,3
147+
DA:214,3
148+
DA:215,1
149+
DA:223,1
150+
DA:225,1
151+
DA:227,1
152+
DA:228,2
153+
DA:229,1
154+
DA:230,2
155+
DA:231,3
156+
DA:232,2
157+
DA:233,1
158+
DA:239,1
159+
DA:240,1
160+
DA:241,4
161+
DA:243,1
162+
DA:244,2
163+
DA:246,1
164+
DA:248,1
165+
DA:250,1
166+
LF:40
167+
LH:40
168+
end_of_record
169+
SF:/bloc/packages/bloc/lib/src/bloc_observer.dart
170+
DA:14,1
171+
DA:20,0
172+
DA:27,0
173+
DA:36,0
174+
DA:43,0
175+
DA:51,0
176+
LF:6
177+
LH:1
178+
end_of_record
179+
SF:/bloc/packages/bloc/lib/src/change.dart
180+
DA:10,1
181+
DA:18,1
182+
DA:21,1
183+
DA:22,3
184+
DA:23,3
185+
DA:24,3
186+
DA:26,1
187+
DA:27,5
188+
DA:29,1
189+
DA:31,3
190+
LF:10
191+
LH:10
192+
end_of_record
193+
SF:/bloc/packages/bloc/lib/src/cubit.dart
194+
DA:16,1
195+
DA:27,1
196+
DA:29,3
197+
DA:30,1
198+
DA:54,1
199+
DA:56,2
200+
DA:60,2
201+
DA:62,2
202+
DA:79,1
203+
DA:82,2
204+
DA:83,2
205+
DA:84,3
206+
DA:85,3
207+
DA:86,1
208+
DA:87,3
209+
DA:88,1
210+
DA:92,1
211+
DA:93,1
212+
DA:115,1
213+
DA:118,2
214+
DA:138,1
215+
DA:142,2
216+
DA:143,1
217+
DA:144,1
218+
DA:145,1
219+
DA:152,1
220+
DA:159,2
221+
DA:160,3
222+
DA:170,1
223+
DA:175,1
224+
DA:178,2
225+
DA:179,2
226+
LF:32
227+
LH:32
228+
end_of_record
229+
SF:/bloc/packages/bloc/lib/src/transition.dart
230+
DA:14,1
231+
DA:18,1
232+
DA:23,1
233+
DA:26,1
234+
DA:27,3
235+
DA:28,3
236+
DA:29,3
237+
DA:30,3
238+
DA:32,1
239+
DA:34,8
240+
DA:37,1
241+
DA:39,4
242+
LF:12
243+
LH:12
244+
end_of_record
245+
''';

0 commit comments

Comments
 (0)