| // 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()); | |
| }); | |
| }); | |
| } |