// 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/platform.dart'; import 'package:flutter_tools/src/base/terminal.dart'; import 'package:flutter_tools/src/globals.dart'; import '../src/common.dart'; import '../src/context.dart'; void main() { group('output preferences', () { testUsingContext('can wrap output', () async { printStatus('0123456789' * 8); expect(testLogger.statusText, equals(('0123456789' * 4 + '\n') * 2)); }, overrides: { OutputPreferences: () => OutputPreferences(wrapText: true, wrapColumn: 40), }); testUsingContext('can turn off wrapping', () async { final String testString = '0123456789' * 20; printStatus(testString); expect(testLogger.statusText, equals('$testString\n')); }, overrides: { Platform: () => FakePlatform()..stdoutSupportsAnsi = true, OutputPreferences: () => OutputPreferences(wrapText: false), }); }); group('character input prompt', () { AnsiTerminal terminalUnderTest; setUp(() { terminalUnderTest = TestTerminal(); }); testUsingContext('character prompt', () async { mockStdInStream = Stream.fromFutures(>[ Future.value('d'), // Not in accepted list. Future.value('\n'), // Not in accepted list Future.value('b'), ]).asBroadcastStream(); final String choice = await terminalUnderTest.promptForCharInput( ['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 = Stream.fromFutures(>[ Future.value('\n'), // Not in accepted list ]).asBroadcastStream(); final String choice = await terminalUnderTest.promptForCharInput( ['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 mockStdInStream; class TestTerminal extends AnsiTerminal { @override Stream get onCharInput { return mockStdInStream; } }