| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // for details. 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:modular_test/src/io_pipeline.dart'; |
| import 'package:modular_test/src/suite.dart'; |
| |
| /// Checks the [exitCode] of [result], and forwards its [stdout] and [stderr] if |
| /// the exit code is non-zero or [verbose] is `true`. |
| /// |
| /// Also throws an error if the [exitCode] is non-zero. |
| void checkExitCode( |
| ProcessResult result, IOModularStep step, Module module, bool verbose) { |
| if (result.exitCode != 0 || verbose) { |
| stdout.write(result.stdout); |
| stderr.write(result.stderr); |
| } |
| if (result.exitCode != 0) { |
| throw '${step.runtimeType} failed on $module:\n\n' |
| 'stdout:\n${result.stdout}\n\n' |
| 'stderr:\n${result.stderr}'; |
| } |
| } |
| |
| /// Runs [command] with [arguments] in [workingDirectory], and if [verbose] is |
| /// `true` then it logs the full command. |
| Future<ProcessResult> runProcess(String command, List<String> arguments, |
| String workingDirectory, bool verbose) { |
| if (verbose) { |
| print('command:\n$command ${arguments.join(' ')} from $workingDirectory'); |
| } |
| return Process.run(command, arguments, workingDirectory: workingDirectory); |
| } |