// 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 'dart:io'; import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; import 'package:test/test.dart' as test_package show TypeMatcher; import 'package:dev_tools/stdio.dart'; import 'package:args/args.dart'; export 'package:test/test.dart' hide TypeMatcher, isInstanceOf; // Defines a 'package:test' shim. // TODO(ianh): Remove this file once https://github.com/dart-lang/matcher/issues/98 is fixed /// A matcher that compares the type of the actual value to the type argument T. test_package.TypeMatcher<T> isInstanceOf<T>() => isA<T>(); void tryToDelete(Directory directory) { // This should not be necessary, but it turns out that // on Windows it's common for deletions to fail due to // bogus (we think) "access denied" errors. try { directory.deleteSync(recursive: true); } on FileSystemException catch (error) { print('Failed to delete ${directory.path}: $error'); } } Matcher throwsExceptionWith(String messageSubString) { return throwsA( isA<Exception>().having( (Exception e) => e.toString(), 'description', contains(messageSubString), ), ); } class TestStdio implements Stdio { TestStdio({ this.verbose = false, List<String> stdin, }) { _stdin = stdin ?? <String>[]; } final StringBuffer _error = StringBuffer(); String get error => _error.toString(); final StringBuffer _stdout = StringBuffer(); String get stdout => _stdout.toString(); final bool verbose; List<String> _stdin; @override void printError(String message) { _error.writeln(message); } @override void printStatus(String message) { _stdout.writeln(message); } @override void printTrace(String message) { if (verbose) { _stdout.writeln(message); } } @override void write(String message) { _stdout.write(message); } @override String readLineSync() { if (_stdin.isEmpty) { throw Exception('Unexpected call to readLineSync!'); } return _stdin.removeAt(0); } } class FakeArgResults implements ArgResults { FakeArgResults({ String level, String commit, String remote, bool justPrint = false, bool autoApprove = true, // so we don't have to mock stdin bool help = false, bool force = false, bool skipTagging = false, }) : _parsedArgs = <String, dynamic>{ 'increment': level, 'commit': commit, 'remote': remote, 'just-print': justPrint, 'yes': autoApprove, 'help': help, 'force': force, 'skip-tagging': skipTagging, }; @override String name; @override ArgResults command; @override final List<String> rest = <String>[]; @override List<String> arguments; final Map<String, dynamic> _parsedArgs; @override Iterable<String> get options { return null; } @override dynamic operator [](String name) { return _parsedArgs[name]; } @override bool wasParsed(String name) { return null; } }