Skip to content

Commit

Permalink
[tool] make testUsingContext provide a Stdio (with hasTerminal
Browse files Browse the repository at this point in the history
…unset) override by default (#151357)

While exploring #107607, I noticed that flutter_tools test results change based on whether `dart test` is run from a terminal or from a process (such as a Dart program). I also ran into this while writing tests for #150667.

This is due to tests that rely on the global `Stdio` instance, on which the `hasTerminal` property depends on whether the tool is being invoked from a terminal.

Ideally, `testUsingContext` would require any tests that depend on `globals.stdio` to define an override for `Stdio`, but this is not the case. Until a solution to this more general problem is figured out, I think we should have `testUsingContext` always provide a `Stdio` override by default.
  • Loading branch information
andrewkolos committed Jul 8, 2024
1 parent f194cd3 commit c206a47
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 19 deletions.
20 changes: 2 additions & 18 deletions packages/flutter_tools/test/commands.shard/hermetic/run_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 469,7 @@ void main() {
Usage: () => usage,
});

testUsingContext('passes device target platform to usage', () async {
testUsingContext('passes device target platform to analytics', () async {
final RunCommand command = RunCommand();
final FakeDevice mockDevice = FakeDevice(sdkNameAndVersion: 'iOS 13')
..startAppSuccess = false;
Expand All @@ -485,14 485,6 @@ void main() {
'--no-hot',
]), isNull);

expect(usage.commands, contains(
TestUsageCommand('run', parameters: CustomDimensions.fromMap(<String, String>{
'cd3': 'false', 'cd4': 'ios', 'cd22': 'iOS 13',
'cd23': 'debug', 'cd18': 'false', 'cd15': 'swift', 'cd31': 'true',
'cd57': 'usb',
'cd58': 'false',
})
)));
expect(
fakeAnalytics.sentEvents,
contains(
Expand Down Expand Up @@ -522,7 514,7 @@ void main() {
analytics.Analytics: () => fakeAnalytics,
});

testUsingContext('correctly reports tests to usage', () async {
testUsingContext('correctly reports tests to analytics', () async {
fs.currentDirectory.childDirectory('test').childFile('widget_test.dart').createSync(recursive: true);
fs.currentDirectory.childDirectory('ios').childFile('AppDelegate.swift').createSync(recursive: true);
final RunCommand command = RunCommand();
Expand All @@ -538,14 530,6 @@ void main() {
'test/widget_test.dart',
]), isNull);

expect(usage.commands, contains(
TestUsageCommand('run', parameters: CustomDimensions.fromMap(<String, String>{
'cd3': 'false', 'cd4': 'ios', 'cd22': 'iOS 13',
'cd23': 'debug', 'cd18': 'false', 'cd15': 'swift', 'cd31': 'true',
'cd57': 'usb',
'cd58': 'true',
})),
));
expect(
fakeAnalytics.sentEvents,
contains(
Expand Down
1 change: 1 addition & 0 deletions packages/flutter_tools/test/src/context.dart
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 126,7 @@ void testUsingContext(
TemplateRenderer: () => const MustacheTemplateRenderer(),
BuildTargets: () => const BuildTargetsImpl(),
Analytics: () => const NoOpAnalytics(),
Stdio: () => FakeStdio(),
},
body: () {
// To catch all errors thrown by the test, even uncaught async errors, we use a zone.
Expand Down
5 changes: 4 additions & 1 deletion packages/flutter_tools/test/src/fakes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 254,7 @@ class FakeStdio extends Stdio {
}

@override
bool hasTerminal = true;
bool hasTerminal = false;

List<String> get writtenToStdout => _stdout.writes.map<String>(_stdout.encoding.decode).toList();
List<String> get writtenToStderr => _stderr.writes.map<String>(_stderr.encoding.decode).toList();
Expand All @@ -281,6 281,9 @@ class FakeStdin extends Fake implements Stdin {
@override
bool lineMode = true;

@override
bool hasTerminal = false;

@override
Stream<S> transform<S>(StreamTransformer<List<int>, S> transformer) {
return controller.stream.transform(transformer);
Expand Down

0 comments on commit c206a47

Please sign in to comment.