From c91a3a74ec284c876cc34223444d7385eed241e1 Mon Sep 17 00:00:00 2001 From: Peter Lauri Date: Fri, 24 Apr 2020 19:11:54 +0300 Subject: [PATCH] [flutter_tools] fix version tag `v` stripping (#55385) --- .../lib/src/commands/version.dart | 2 +- .../commands.shard/hermetic/version_test.dart | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) 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, '', ''); }