| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:convert'; |
| import 'dart:io'; |
| |
| import 'common.dart'; |
| |
| import 'fake_process_manager.dart'; |
| |
| void main() { |
| group('ArchivePublisher', () { |
| FakeProcessManager processManager; |
| final List<String> stdinCaptured = <String>[]; |
| |
| void _captureStdin(String item) { |
| stdinCaptured.add(item); |
| } |
| |
| setUp(() async { |
| processManager = FakeProcessManager(stdinResults: _captureStdin); |
| }); |
| |
| tearDown(() async {}); |
| |
| test('start works', () async { |
| final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{ |
| 'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output1', ''), |
| ], |
| 'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output2', ''), |
| ], |
| }; |
| processManager.fakeResults = calls; |
| for (String key in calls.keys) { |
| final Process process = await processManager.start(key.split(' ')); |
| String output = ''; |
| process.stdout.listen((List<int> item) { |
| output += utf8.decode(item); |
| }); |
| await process.exitCode; |
| expect(output, equals(calls[key][0].stdout)); |
| } |
| processManager.verifyCalls(calls.keys.toList()); |
| }); |
| |
| test('run works', () async { |
| final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{ |
| 'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output1', ''), |
| ], |
| 'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output2', ''), |
| ], |
| }; |
| processManager.fakeResults = calls; |
| for (String key in calls.keys) { |
| final ProcessResult result = await processManager.run(key.split(' ')); |
| expect(result.stdout, equals(calls[key][0].stdout)); |
| } |
| processManager.verifyCalls(calls.keys.toList()); |
| }); |
| |
| test('runSync works', () async { |
| final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{ |
| 'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output1', ''), |
| ], |
| 'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output2', ''), |
| ], |
| }; |
| processManager.fakeResults = calls; |
| for (String key in calls.keys) { |
| final ProcessResult result = processManager.runSync(key.split(' ')); |
| expect(result.stdout, equals(calls[key][0].stdout)); |
| } |
| processManager.verifyCalls(calls.keys.toList()); |
| }); |
| |
| test('captures stdin', () async { |
| final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{ |
| 'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output1', ''), |
| ], |
| 'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[ |
| ProcessResult(0, 0, 'output2', ''), |
| ], |
| }; |
| processManager.fakeResults = calls; |
| for (String key in calls.keys) { |
| final Process process = await processManager.start(key.split(' ')); |
| String output = ''; |
| process.stdout.listen((List<int> item) { |
| output += utf8.decode(item); |
| }); |
| final String testInput = '${calls[key][0].stdout} input'; |
| process.stdin.add(testInput.codeUnits); |
| await process.exitCode; |
| expect(output, equals(calls[key][0].stdout)); |
| expect(stdinCaptured.last, equals(testInput)); |
| } |
| processManager.verifyCalls(calls.keys.toList()); |
| }); |
| }); |
| } |