mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
85 lines
3 KiB
Dart
85 lines
3 KiB
Dart
// Copyright 2015 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:async';
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:args/command_runner.dart';
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
import 'package:flutter_tools/src/commands/channel.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:process/process.dart';
|
|
|
|
import 'src/common.dart';
|
|
import 'src/context.dart';
|
|
|
|
void main() {
|
|
group('channel', () {
|
|
final MockProcessManager mockProcessManager = new MockProcessManager();
|
|
|
|
setUpAll(() {
|
|
Cache.disableLocking();
|
|
});
|
|
|
|
testUsingContext('list', () async {
|
|
final ChannelCommand command = new ChannelCommand();
|
|
final CommandRunner<Null> runner = createTestCommandRunner(command);
|
|
await runner.run(<String>['channel']);
|
|
expect(testLogger.errorText, hasLength(0));
|
|
// The bots may return an empty list of channels (network hiccup?)
|
|
// and when run locally the list of branches might be different
|
|
// so we check for the header text rather than any specific channel name.
|
|
expect(testLogger.statusText, contains('Flutter channels:'));
|
|
});
|
|
|
|
testUsingContext('removes duplicates', () async {
|
|
final Stream<List<int>> stdout = new Stream<List<int>>.fromIterable(<List<int>>[
|
|
utf8.encode(
|
|
'origin/dev\n'
|
|
'origin/beta\n'
|
|
'upstream/dev\n'
|
|
'upstream/beta\n'
|
|
),
|
|
]);
|
|
final Process process = new MockProcess();
|
|
|
|
when(process.stdout).thenAnswer((_) => stdout);
|
|
when(process.stderr).thenAnswer((_) => const Stream<List<int>>.empty());
|
|
when(process.exitCode).thenAnswer((_) => new Future<int>.value(0));
|
|
when(mockProcessManager.start(
|
|
<String>['git', 'branch', '-r'],
|
|
workingDirectory: anyNamed('workingDirectory'),
|
|
environment: anyNamed('environment')))
|
|
.thenAnswer((_) => new Future<Process>.value(process));
|
|
|
|
final ChannelCommand command = new ChannelCommand();
|
|
final CommandRunner<Null> runner = createTestCommandRunner(command);
|
|
await runner.run(<String>['channel']);
|
|
|
|
verify(mockProcessManager.start(<String>['git', 'branch', '-r'],
|
|
workingDirectory: anyNamed('workingDirectory'),
|
|
environment: anyNamed('environment'))).called(1);
|
|
|
|
expect(testLogger.errorText, hasLength(0));
|
|
|
|
// format the status text for a simpler assertion.
|
|
final Iterable<String> rows = testLogger.statusText
|
|
.split('\n')
|
|
.map((String line) => line.trim())
|
|
.where((String line) => line?.isNotEmpty == true)
|
|
.skip(1); // remove `Flutter channels:` line
|
|
|
|
expect(rows, <String>['dev', 'beta']);
|
|
}, overrides: <Type, Generator>{
|
|
ProcessManager: () => mockProcessManager,
|
|
});
|
|
});
|
|
}
|
|
|
|
class MockProcessManager extends Mock implements ProcessManager {}
|
|
|
|
class MockProcess extends Mock implements Process {}
|