fake_process_manager_test.dart 3.84 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
// 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 'package:test/test.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 = new FakeProcessManager(stdinResults: _captureStdin);
    });

    tearDown(() async {});

    test('start works', () async {
28 29 30 31 32 33 34
      final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
        'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output1', '')
        ],
        'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output2', '')
        ],
35
      };
36
      processManager.fakeResults = calls;
37 38 39 40 41 42 43
      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;
44
        expect(output, equals(calls[key][0].stdout));
45
      }
46
      processManager.verifyCalls(calls.keys.toList());
47 48 49
    });

    test('run works', () async {
50 51 52 53 54 55 56
      final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
        'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output1', '')
        ],
        'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output2', '')
        ],
57
      };
58
      processManager.fakeResults = calls;
59 60
      for (String key in calls.keys) {
        final ProcessResult result = await processManager.run(key.split(' '));
61
        expect(result.stdout, equals(calls[key][0].stdout));
62
      }
63
      processManager.verifyCalls(calls.keys.toList());
64 65 66
    });

    test('runSync works', () async {
67 68 69 70 71 72 73
      final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
        'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output1', '')
        ],
        'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output2', '')
        ],
74
      };
75
      processManager.fakeResults = calls;
76 77
      for (String key in calls.keys) {
        final ProcessResult result = processManager.runSync(key.split(' '));
78
        expect(result.stdout, equals(calls[key][0].stdout));
79
      }
80
      processManager.verifyCalls(calls.keys.toList());
81 82 83
    });

    test('captures stdin', () async {
84 85 86 87 88 89 90
      final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
        'gsutil acl get gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output1', '')
        ],
        'gsutil cat gs://flutter_infra/releases/releases.json': <ProcessResult>[
          new ProcessResult(0, 0, 'output2', '')
        ],
91
      };
92
      processManager.fakeResults = calls;
93 94 95 96 97 98
      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);
        });
99
        final String testInput = '${calls[key][0].stdout} input';
100 101
        process.stdin.add(testInput.codeUnits);
        await process.exitCode;
102
        expect(output, equals(calls[key][0].stdout));
103 104
        expect(stdinCaptured.last, equals(testInput));
      }
105
      processManager.verifyCalls(calls.keys.toList());
106 107 108
    });
  });
}