FakeProcessDescription.php
TLDR
The FakeProcessDescription.php
file is part of the Illuminate Process package. It defines a class called FakeProcessDescription
that provides methods for describing a fake process, including setting the process ID, capturing standard and error output, specifying the process exit code, and controlling the number of times the process should be considered "running". It also includes methods for converting the fake process description into an actual Symfony process or a process result.
Methods
id
Specify the process ID that should be assigned to the process.
output
Describe a line of standard output.
errorOutput
Describe a line of error output.
replaceOutput
Replace the entire output buffer with the given string.
replaceErrorOutput
Replace the entire error output buffer with the given string.
exitCode
Specify the process exit code.
iterations
Specify how many times the "isRunning" method should return "true".
runsFor
Specify how many times the "isRunning" method should return "true".
toSymfonyProcess
Turn the fake process description into an actual process.
toProcessResult
Convert the process description into a process result.
resolveOutput
Resolve the standard output as a string.
resolveErrorOutput
Resolve the error output as a string.
<?php
namespace Illuminate\Process;
use Symfony\Component\Process\Process;
class FakeProcessDescription
{
/**
* The process' ID.
*
* @var int|null
*/
public $processId = 1000;
/**
* All of the process' output in the order it was described.
*
* @var array
*/
public $output = [];
/**
* The process' exit code.
*
* @var int
*/
public $exitCode = 0;
/**
* The number of times the process should indicate that it is "running".
*
* @var int
*/
public $runIterations = 0;
/**
* Specify the process ID that should be assigned to the process.
*
* @param int $processId
* @return $this
*/
public function id(int $processId)
{
$this->processId = $processId;
return $this;
}
/**
* Describe a line of standard output.
*
* @param array|string $output
* @return $this
*/
public function output(array|string $output)
{
if (is_array($output)) {
collect($output)->each(fn ($line) => $this->output($line));
return $this;
}
$this->output[] = ['type' => 'out', 'buffer' => rtrim($output, "\n")."\n"];
return $this;
}
/**
* Describe a line of error output.
*
* @param array|string $output
* @return $this
*/
public function errorOutput(array|string $output)
{
if (is_array($output)) {
collect($output)->each(fn ($line) => $this->errorOutput($line));
return $this;
}
$this->output[] = ['type' => 'err', 'buffer' => rtrim($output, "\n")."\n"];
return $this;
}
/**
* Replace the entire output buffer with the given string.
*
* @param string $output
* @return $this
*/
public function replaceOutput(string $output)
{
$this->output = collect($this->output)->reject(function ($output) {
return $output['type'] === 'out';
})->values()->all();
if (strlen($output) > 0) {
$this->output[] = [
'type' => 'out',
'buffer' => rtrim($output, "\n")."\n",
];
}
return $this;
}
/**
* Replace the entire error output buffer with the given string.
*
* @param string $output
* @return $this
*/
public function replaceErrorOutput(string $output)
{
$this->output = collect($this->output)->reject(function ($output) {
return $output['type'] === 'err';
})->values()->all();
if (strlen($output) > 0) {
$this->output[] = [
'type' => 'err',
'buffer' => rtrim($output, "\n")."\n",
];
}
return $this;
}
/**
* Specify the process exit code.
*
* @param int $exitCode
* @return $this
*/
public function exitCode(int $exitCode)
{
$this->exitCode = $exitCode;
return $this;
}
/**
* Specify how many times the "isRunning" method should return "true".
*
* @param int $iterations
* @return $this
*/
public function iterations(int $iterations)
{
return $this->runsFor(iterations: $iterations);
}
/**
* Specify how many times the "isRunning" method should return "true".
*
* @param int $iterations
* @return $this
*/
public function runsFor(int $iterations)
{
$this->runIterations = $iterations;
return $this;
}
/**
* Turn the fake process description into an actual process.
*
* @param string $command
* @return \Symfony\Component\Process\Process
*/
public function toSymfonyProcess(string $command)
{
return Process::fromShellCommandline($command);
}
/**
* Convert the process description into a process result.
*
* @param string $command
* @return \Illuminate\Contracts\Process\ProcessResult
*/
public function toProcessResult(string $command)
{
return new FakeProcessResult(
command: $command,
exitCode: $this->exitCode,
output: $this->resolveOutput(),
errorOutput: $this->resolveErrorOutput(),
);
}
/**
* Resolve the standard output as a string.
*
* @return string
*/
protected function resolveOutput()
{
$output = collect($this->output)
->filter(fn ($output) => $output['type'] === 'out');
return $output->isNotEmpty()
? rtrim($output->map->buffer->implode(''), "\n")."\n"
: '';
}
/**
* Resolve the error output as a string.
*
* @return string
*/
protected function resolveErrorOutput()
{
$output = collect($this->output)
->filter(fn ($output) => $output['type'] === 'err');
return $output->isNotEmpty()
? rtrim($output->map->buffer->implode(''), "\n")."\n"
: '';
}
}