diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart index 6727a469fa6..6a698c8505f 100644 --- a/packages/flutter_tools/lib/src/commands/version.dart +++ b/packages/flutter_tools/lib/src/commands/version.dart @@ -87,7 +87,7 @@ class VersionCommand extends FlutterCommand { } } - final String version = argResults.rest[0].replaceFirst('v', ''); + final String version = argResults.rest[0].replaceFirst(RegExp('^v'), ''); final List matchingTags = tags.where((String tag) => tag.contains(version)).toList(); String matchingTag; // TODO(fujino): make this a tool exit and fix tests diff --git a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart index 4ff197e9801..419a64d2417 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart @@ -71,6 +71,28 @@ void main() { FlutterVersion: () => mockVersion, }); + testUsingContext('dev version switch prompt is accepted', () async { + when(mockStdio.stdinHasTerminal).thenReturn(true); + const String version = '30.0.0-dev.0.0'; + final VersionCommand command = VersionCommand(); + when(globals.terminal.promptForCharInput(['y', 'n'], + logger: anyNamed('logger'), + prompt: 'Are you sure you want to proceed?') + ).thenAnswer((Invocation invocation) async => 'y'); + + await createTestCommandRunner(command).run([ + 'version', + '--no-pub', + version, + ]); + expect(testLogger.statusText, contains('Switching Flutter to version $version')); + }, overrides: { + ProcessManager: () => MockProcessManager(), + Stdio: () => mockStdio, + AnsiTerminal: () => MockTerminal(), + FlutterVersion: () => mockVersion, + }); + testUsingContext('version switch prompt is declined', () async { when(mockStdio.stdinHasTerminal).thenReturn(true); const String version = '10.0.0'; @@ -239,7 +261,7 @@ class MockProcessManager extends Mock implements ProcessManager { return ProcessResult(0, 0, 'v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0', ''); } if (command[0] == 'git' && command[1] == 'checkout') { - version = (command[2] as String).replaceFirst('v', ''); + version = (command[2] as String).replaceFirst(RegExp('^v'), ''); } return ProcessResult(0, 0, '', ''); }