// 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 'package:flutter_tools/executable.dart' as tools; import 'package:flutter_tools/src/base/io.dart'; import 'package:test/test.dart'; import '../src/common.dart'; import '../src/context.dart'; /// Runs the specified [testMethod] in a minimal `AppContext` that is set up /// to redirect log output to a `BufferLogger` to avoid spamming `stdout`. /// /// Test methods will generally want to use [expectProcessExits] in their method /// bodies. void testReplay( String description, dynamic testMethod(), { Timeout timeout, Map overrides: const {}, bool skip, }) { setUp(() { setExitFunctionForTests(); }); tearDown(() { restoreExitFunction(); }); testUsingContext( description, testMethod, timeout: timeout, overrides: overrides, skip: skip, initializeContext: (_) {}, ); } /// Expects that the specified [command] to Flutter tools exits with the /// specified [exitCode] (defaults to zero). It is expected that callers will /// be running in a test via [testReplay]. /// /// [command] should be the list of arguments that are passed to the `flutter` /// command-line tool. For example: /// /// ``` /// [ /// 'run', /// '--no-hot', /// '--no-resident', /// ] /// ``` void expectProcessExits(List command, {dynamic exitCode: 0}) { final Future mainFuture = tools.main(command); expect(mainFuture, throwsProcessExit(exitCode)); }