From 2c898f68134fc103a467c72f8ed189c3204e8ce2 Mon Sep 17 00:00:00 2001 From: Todd Volkert Date: Thu, 29 Mar 2018 05:55:32 -0700 Subject: [PATCH] Remove writelnStderr (#16058) Paying off technical debt... --- packages/flutter_tools/lib/runner.dart | 39 +++++--------- .../test/crash_reporting_test.dart | 51 ++++++++++++++++++- 2 files changed, 63 insertions(+), 27 deletions(-) diff --git a/packages/flutter_tools/lib/runner.dart b/packages/flutter_tools/lib/runner.dart index b755ffb0a33..4ef89ca6aa9 100644 --- a/packages/flutter_tools/lib/runner.dart +++ b/packages/flutter_tools/lib/runner.dart @@ -61,17 +61,6 @@ Future run( }); } -/// Writes the [string] to one of the standard output streams. -@visibleForTesting -typedef void WriteCallback([String string]); - -/// Writes a line to STDERR. -/// -/// Overwrite this in tests to avoid spurious test output. -// TODO(tvolkert): Remove this in favor of context[Stdio] -@visibleForTesting -WriteCallback writelnStderr = stderr.writeln; - Future _handleToolError( dynamic error, StackTrace stackTrace, @@ -81,9 +70,9 @@ Future _handleToolError( String getFlutterVersion(), ) async { if (error is UsageException) { - writelnStderr(error.message); - writelnStderr(); - writelnStderr( + stderr.writeln(error.message); + stderr.writeln(); + stderr.writeln( "Run 'flutter -h' (or 'flutter -h') for available " 'flutter commands and options.' ); @@ -91,11 +80,11 @@ Future _handleToolError( return _exit(64); } else if (error is ToolExit) { if (error.message != null) - writelnStderr(error.message); + stderr.writeln(error.message); if (verbose) { - writelnStderr(); - writelnStderr(stackTrace.toString()); - writelnStderr(); + stderr.writeln(); + stderr.writeln(stackTrace.toString()); + stderr.writeln(); } return _exit(error.exitCode ?? 1); } else if (error is ProcessExit) { @@ -108,20 +97,20 @@ Future _handleToolError( } } else { // We've crashed; emit a log report. - writelnStderr(); + stderr.writeln(); if (!reportCrashes) { // Print the stack trace on the bots - don't write a crash report. - writelnStderr('$error'); - writelnStderr(stackTrace.toString()); + stderr.writeln('$error'); + stderr.writeln(stackTrace.toString()); return _exit(1); } else { flutterUsage.sendException(error, stackTrace); if (error is String) - writelnStderr('Oops; flutter has exited unexpectedly: "$error".'); + stderr.writeln('Oops; flutter has exited unexpectedly: "$error".'); else - writelnStderr('Oops; flutter has exited unexpectedly.'); + stderr.writeln('Oops; flutter has exited unexpectedly.'); await CrashReportSender.instance.sendReport( error: error, @@ -130,13 +119,13 @@ Future _handleToolError( ); try { final File file = await _createLocalCrashReport(args, error, stackTrace); - writelnStderr( + stderr.writeln( 'Crash report written to ${file.path};\n' 'please let us know at https://github.com/flutter/flutter/issues.', ); return _exit(1); } catch (error) { - writelnStderr( + stderr.writeln( 'Unable to generate crash report due to secondary error: $error\n' 'please let us know at https://github.com/flutter/flutter/issues.', ); diff --git a/packages/flutter_tools/test/crash_reporting_test.dart b/packages/flutter_tools/test/crash_reporting_test.dart index cb77182f3d8..004b326569d 100644 --- a/packages/flutter_tools/test/crash_reporting_test.dart +++ b/packages/flutter_tools/test/crash_reporting_test.dart @@ -30,13 +30,11 @@ void main() { setUp(() async { tools.crashFileSystem = new MemoryFileSystem(); - tools.writelnStderr = ([_]) { }; setExitFunctionForTests((_) { }); }); tearDown(() { tools.crashFileSystem = const LocalFileSystem(); - tools.writelnStderr = const Stdio().stderr.writeln; restoreExitFunction(); }); @@ -119,6 +117,8 @@ void main() { .map((FileSystemEntity e) => e.path).toList(); expect(writtenFiles, hasLength(1)); expect(writtenFiles, contains('flutter_01.log')); + }, overrides: { + Stdio: () => const _NoStderr(), }); }); } @@ -149,3 +149,50 @@ class _CrashCommand extends FlutterCommand { fn3(); } } + +class _NoStderr extends Stdio { + const _NoStderr(); + + @override + IOSink get stderr => const _NoopIOSink(); +} + +class _NoopIOSink implements IOSink { + const _NoopIOSink(); + + @override + Encoding get encoding => utf8; + + @override + set encoding(_) => throw new UnsupportedError(''); + + @override + void add(_) {} + + @override + void write(_) {} + + @override + void writeAll(_, [__]) {} + + @override + void writeln([_]) {} + + @override + void writeCharCode(_) {} + + @override + void addError(_, [__]) {} + + @override + Future addStream(_) async {} + + @override + Future flush() async {} + + @override + Future close() async {} + + @override + Future get done async {} +}