Disable single character mode in the terminal when exiting flutter_tools (#146534)

This commit is contained in:
Jason Simmons 2024-04-10 16:54:42 -07:00 committed by GitHub
parent aff5477dad
commit c9d4c749b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 21 additions and 2 deletions

View file

@ -136,6 +136,7 @@ Future<void> main(List<String> args) async {
// So that we don't animate anything before calling applyFeatureFlags, default
// the animations to disabled in real apps.
defaultCliAnimationEnabled: false,
shutdownHooks: globals.shutdownHooks,
);
// runner.run calls "terminal.applyFeatureFlags()"
},

View file

@ -7,6 +7,7 @@ import '../features.dart';
import 'io.dart' as io;
import 'logger.dart';
import 'platform.dart';
import 'process.dart';
enum TerminalColor {
red,
@ -164,11 +165,14 @@ class AnsiTerminal implements Terminal {
required Platform platform,
DateTime? now, // Time used to determine preferredStyle. Defaults to 0001-01-01 00:00.
bool defaultCliAnimationEnabled = true,
ShutdownHooks? shutdownHooks,
})
: _stdio = stdio,
_platform = platform,
_now = now ?? DateTime(1),
_isCliAnimationEnabled = defaultCliAnimationEnabled;
_isCliAnimationEnabled = defaultCliAnimationEnabled {
shutdownHooks?.addShutdownHook(() { singleCharMode = false; });
}
final io.Stdio _stdio;
final Platform _platform;
@ -319,7 +323,7 @@ class AnsiTerminal implements Terminal {
return false;
}
final io.Stdin stdin = _stdio.stdin as io.Stdin;
return stdin.lineMode && stdin.echoMode;
return !stdin.lineMode && !stdin.echoMode;
}
@override
set singleCharMode(bool value) {

View file

@ -243,6 +243,7 @@ final AnsiTerminal _defaultAnsiTerminal = AnsiTerminal(
stdio: stdio,
platform: platform,
now: DateTime.now(),
shutdownHooks: shutdownHooks,
);
/// The global Stdio wrapper.

View file

@ -5,6 +5,7 @@
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/process.dart';
import 'package:flutter_tools/src/base/terminal.dart';
import 'package:test/fake.dart';
@ -264,6 +265,18 @@ void main() {
);
terminal.singleCharMode = true;
});
testWithoutContext('singleCharMode is reset by shutdown hook', () {
final ShutdownHooks shutdownHooks = ShutdownHooks();
final FakeStdio stdio = FakeStdio();
final AnsiTerminal terminal = AnsiTerminal(stdio: stdio, platform: const LocalPlatform(), shutdownHooks: shutdownHooks);
stdio.stdinHasTerminal = true;
stdio._stdin = FakeStdin();
terminal.singleCharMode = true;
shutdownHooks.runShutdownHooks(BufferLogger.test());
expect(terminal.singleCharMode, false);
});
}
late Stream<String> mockStdInStream;