| // Copyright 2017 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 'package:flutter_tools/src/base/terminal.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../src/context.dart'; |
| |
| |
| void main() { |
| group('character input prompt', () { |
| AnsiTerminal terminalUnderTest; |
| |
| setUp(() { |
| terminalUnderTest = new TestTerminal(); |
| }); |
| |
| testUsingContext('character prompt', () async { |
| mockStdInStream = new Stream<String>.fromFutures(<Future<String>>[ |
| new Future<String>.value('d'), // Not in accepted list. |
| new Future<String>.value('\n'), // Not in accepted list |
| new Future<String>.value('b'), |
| ]).asBroadcastStream(); |
| final String choice = |
| await terminalUnderTest.promptForCharInput( |
| <String>['a', 'b', 'c'], |
| prompt: 'Please choose something', |
| ); |
| expect(choice, 'b'); |
| expect( |
| testLogger.statusText, |
| 'Please choose something [a|b|c]: d\n' |
| 'Please choose something [a|b|c]: \n' |
| '\n' |
| 'Please choose something [a|b|c]: b\n' |
| ); |
| }); |
| |
| testUsingContext('default character choice without displayAcceptedCharacters', () async { |
| mockStdInStream = new Stream<String>.fromFutures(<Future<String>>[ |
| new Future<String>.value('\n'), // Not in accepted list |
| ]).asBroadcastStream(); |
| final String choice = |
| await terminalUnderTest.promptForCharInput( |
| <String>['a', 'b', 'c'], |
| prompt: 'Please choose something', |
| displayAcceptedCharacters: false, |
| defaultChoiceIndex: 1, // which is b. |
| ); |
| expect(choice, 'b'); |
| expect( |
| testLogger.statusText, |
| 'Please choose something: \n' |
| '\n' |
| ); |
| }); |
| }); |
| } |
| |
| Stream<String> mockStdInStream; |
| |
| class TestTerminal extends AnsiTerminal { |
| @override |
| Stream<String> get onCharInput { |
| return mockStdInStream; |
| } |
| } |