// Copyright 2014 The Flutter 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 'package:args/args.dart'; import 'package:conductor_core/src/stdio.dart'; import 'package:test/fake.dart'; import 'package:test/test.dart'; export 'package:test/fake.dart'; export 'package:test/test.dart' hide isInstanceOf; export '../../../../packages/flutter_tools/test/src/fake_process_manager.dart'; Matcher throwsAssertionWith(String messageSubString) { return throwsA( isA().having( (AssertionError e) => e.toString(), 'description', contains(messageSubString), ), ); } Matcher throwsExceptionWith(String messageSubString) { return throwsA( isA().having( (Exception e) => e.toString(), 'description', contains(messageSubString), ), ); } class TestStdio extends Stdio { TestStdio({ this.verbose = false, List? stdin, }) : stdin = stdin ?? []; String get error => logs.where((String log) => log.startsWith(r'[error] ')).join('\n'); String get stdout => logs.where((String log) { return log.startsWith(r'[status] ') || log.startsWith(r'[trace] ') || log.startsWith(r'[write] '); }).join('\n'); final bool verbose; final List stdin; @override String readLineSync() { if (stdin.isEmpty) { throw Exception('Unexpected call to readLineSync! Last stdout was ${logs.last}'); } return stdin.removeAt(0); } } class FakeArgResults extends Fake implements ArgResults { FakeArgResults({ required String? level, required String candidateBranch, String remote = 'upstream', bool justPrint = false, bool autoApprove = true, // so we don't have to mock stdin bool help = false, bool force = false, bool skipTagging = false, }) : _parsedArgs = { 'increment': level, 'candidate-branch': candidateBranch, 'remote': remote, 'just-print': justPrint, 'yes': autoApprove, 'help': help, 'force': force, 'skip-tagging': skipTagging, }; @override String? name; @override ArgResults? command; @override final List rest = []; final Map _parsedArgs; @override dynamic operator [](String name) { return _parsedArgs[name]; } }