diff --git a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart index b05a5c0c1b..5ae8b0d3be 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -4,13 +4,16 @@ // @dart = 2.8 +import 'dart:async'; import 'dart:convert'; import 'package:args/command_runner.dart'; +import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/bot_detector.dart'; import 'package:flutter_tools/src/base/error_handling_io.dart'; import 'package:flutter_tools/src/base/file_system.dart' hide IOSink; import 'package:flutter_tools/src/base/io.dart'; +import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/packages.dart'; import 'package:flutter_tools/src/dart/pub.dart'; @@ -21,7 +24,6 @@ import 'package:flutter_tools/src/globals.dart' as globals; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/fakes.dart'; -import '../../src/mocks.dart' show MockProcessManager; import '../../src/testbed.dart'; void main() { @@ -438,23 +440,27 @@ void main() { }); group('packages test/pub', () { - MockProcessManager mockProcessManager; + FakeProcessManager processManager; FakeStdio mockStdio; setUp(() { - mockProcessManager = MockProcessManager(); + processManager = FakeProcessManager.list([]); mockStdio = FakeStdio()..stdout.terminalColumns = 80; }); testUsingContext('test without bot', () async { + Cache.flutterRoot = ''; + globals.fs.file('pubspec.yaml').createSync(); + processManager.addCommand( + const FakeCommand(command: ['/bin/cache/dart-sdk/bin/pub', 'run', 'test']), + ); await createTestCommandRunner(PackagesCommand()).run(['packages', 'test']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(3)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'run'); - expect(commands[2], 'test'); + + expect(processManager.hasRemainingExpectations, false); }, overrides: { - ProcessManager: () => mockProcessManager, + FileSystem: () => MemoryFileSystem.test(), + Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), + ProcessManager: () => processManager, Stdio: () => mockStdio, BotDetector: () => const FakeBotDetector(false), Pub: () => Pub( @@ -468,15 +474,18 @@ void main() { }); testUsingContext('test with bot', () async { + Cache.flutterRoot = ''; + globals.fs.file('pubspec.yaml').createSync(); + processManager.addCommand( + const FakeCommand(command: ['/bin/cache/dart-sdk/bin/pub', '--trace', 'run', 'test']), + ); await createTestCommandRunner(PackagesCommand()).run(['packages', 'test']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(4)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], '--trace'); - expect(commands[2], 'run'); - expect(commands[3], 'test'); + + expect(processManager.hasRemainingExpectations, false); }, overrides: { - ProcessManager: () => mockProcessManager, + FileSystem: () => MemoryFileSystem.test(), + Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), + ProcessManager: () => processManager, Stdio: () => mockStdio, BotDetector: () => const FakeBotDetector(true), Pub: () => Pub( @@ -489,48 +498,23 @@ void main() { ), }); - testUsingContext('run', () async { + testUsingContext('run pass arguments through to pub', () async { + Cache.flutterRoot = ''; + globals.fs.file('pubspec.yaml').createSync(); + final IOSink stdin = IOSink(StreamController>().sink); + processManager.addCommand( + FakeCommand(command: const [ + '/bin/cache/dart-sdk/bin/pub', 'run', '--foo', 'bar'], + stdin: stdin, + ), + ); await createTestCommandRunner(PackagesCommand()).run(['packages', '--verbose', 'pub', 'run', '--foo', 'bar']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(4)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'run'); - expect(commands[2], '--foo'); - expect(commands[3], 'bar'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - testUsingContext('pub publish', () async { - final PromptingProcess process = PromptingProcess(); - mockProcessManager.processFactory = (List commands) => process; - final Future runPackages = createTestCommandRunner(PackagesCommand()).run(['pub', 'publish']); - final Future runPrompt = process.showPrompt('Proceed (y/n)? ', ['hello', 'world']); - final Future simulateUserInput = Future(() { - mockStdio.simulateStdin('y'); - }); - await Future.wait(>[runPackages, runPrompt, simulateUserInput]); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'publish'); - final List stdout = mockStdio.writtenToStdout; - expect(stdout, hasLength(4)); - expect(stdout.sublist(0, 2), contains('Proceed (y/n)? ')); - expect(stdout.sublist(0, 2), contains('y\n')); - expect(stdout[2], 'hello\n'); - expect(stdout[3], 'world\n'); + expect(processManager.hasRemainingExpectations, false); }, overrides: { - ProcessManager: () => mockProcessManager, + FileSystem: () => MemoryFileSystem.test(), + Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), + ProcessManager: () => processManager, Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, @@ -541,194 +525,5 @@ void main() { platform: globals.platform, ), }); - - testUsingContext('pub publish input fails', () async { - final PromptingProcess process = PromptingProcess(stdinError: true); - mockProcessManager.processFactory = (List commands) => process; - final Future runPackages = createTestCommandRunner(PackagesCommand()).run(['pub', 'publish']); - final Future runPrompt = process.showPrompt('Proceed (y/n)? ', ['hello', 'world']); - final Future simulateUserInput = Future(() { - mockStdio.simulateStdin('y'); - }); - await Future.wait(>[runPackages, runPrompt, simulateUserInput]); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'publish'); - // We get a trace message about the write to stdin failing. - expect(testLogger.traceText, contains('Echoing stdin to the pub subprocess failed')); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('publish', () async { - await createTestCommandRunner(PackagesCommand()).run(['pub', 'publish']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'publish'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('packages publish', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'pub', 'publish']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'publish'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('deps', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'deps']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'deps'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('cache', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'cache']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'cache'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('version', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'version']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'version'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('uploader', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'uploader']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'uploader'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('global', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'global', 'list']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(3)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'global'); - expect(commands[2], 'list'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); - - testUsingContext('outdated', () async { - await createTestCommandRunner(PackagesCommand()).run(['packages', 'outdated']); - final List commands = mockProcessManager.commands; - expect(commands, hasLength(2)); - expect(commands[0], matches(r'dart-sdk[\\/]bin[\\/]pub')); - expect(commands[1], 'outdated'); - }, overrides: { - ProcessManager: () => mockProcessManager, - Stdio: () => mockStdio, - BotDetector: () => const FakeBotDetector(true), - Pub: () => Pub( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - ), - }); }); }