command = $command; $this->exitCode = $exitCode; $this->output = $this->normalizeOutput($output); $this->errorOutput = $this->normalizeOutput($errorOutput); } /** * Normalize the given output into a string with newlines. * * @param array|string $output * @return string */ protected function normalizeOutput(array|string $output) { if (empty($output)) { return ''; } elseif (is_string($output)) { return rtrim($output, "\n")."\n"; } elseif (is_array($output)) { return rtrim( collect($output) ->map(fn ($line) => rtrim($line, "\n")."\n") ->implode(''), "\n" ); } } /** * Get the original command executed by the process. * * @return string */ public function command() { return $this->command; } /** * Create a new fake process result with the given command. * * @param string $command * @return self */ public function withCommand(string $command) { return new FakeProcessResult($command, $this->exitCode, $this->output, $this->errorOutput); } /** * Determine if the process was successful. * * @return bool */ public function successful() { return $this->exitCode === 0; } /** * Determine if the process failed. * * @return bool */ public function failed() { return ! $this->successful(); } /** * Get the exit code of the process. * * @return int */ public function exitCode() { return $this->exitCode; } /** * Get the standard output of the process. * * @return string */ public function output() { return $this->output; } /** * Determine if the output contains the given string. * * @param string $output * @return bool */ public function seeInOutput(string $output) { return str_contains($this->output(), $output); } /** * Get the error output of the process. * * @return string */ public function errorOutput() { return $this->errorOutput; } /** * Determine if the error output contains the given string. * * @param string $output * @return bool */ public function seeInErrorOutput(string $output) { return str_contains($this->errorOutput(), $output); } /** * Throw an exception if the process failed. * * @param callable|null $callback * @return $this */ public function throw(callable $callback = null) { if ($this->successful()) { return $this; } $exception = new ProcessFailedException($this); if ($callback) { $callback($this, $exception); } throw $exception; } /** * Throw an exception if the process failed and the given condition is true. * * @param bool $condition * @param callable|null $callback * @return $this */ public function throwIf(bool $condition, callable $callback = null) { if ($condition) { return $this->throw($callback); } return $this; } }