Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Process/Factory.php
Строк: 315
<?php

namespace IlluminateProcess;

use 
Closure;
use 
IlluminateContractsProcessProcessResult as ProcessResultContract;
use 
IlluminateSupportTraitsMacroable;
use 
PHPUnitFrameworkAssert as PHPUnit;

class 
Factory
{
    use 
Macroable {
        
__call as macroCall;
    }

    
/**
     * Indicates if the process factory has faked process handlers.
     *
     * @var bool
     */
    
protected $recording false;

    
/**
     * All of the recorded processes.
     *
     * @var array
     */
    
protected $recorded = [];

    
/**
     * The registered fake handler callbacks.
     *
     * @var array
     */
    
protected $fakeHandlers = [];

    
/**
     * Indicates that an exception should be thrown if any process is not faked.
     *
     * @var bool
     */
    
protected $preventStrayProcesses false;

    
/**
     * Create a new fake process response for testing purposes.
     *
     * @param  array|string  $output
     * @param  array|string  $errorOutput
     * @param  int  $exitCode
     * @return IlluminateProcessFakeProcessResult
     */
    
public function result(array|string $output '', array|string $errorOutput ''int $exitCode 0)
    {
        return new 
FakeProcessResult(
            
output$output,
            
errorOutput$errorOutput,
            
exitCode$exitCode,
        );
    }

    
/**
     * Begin describing a fake process lifecycle.
     *
     * @return IlluminateProcessFakeProcessDescription
     */
    
public function describe()
    {
        return new 
FakeProcessDescription;
    }

    
/**
     * Begin describing a fake process sequence.
     *
     * @param  array  $processes
     * @return IlluminateProcessFakeProcessSequence
     */
    
public function sequence(array $processes = [])
    {
        return new 
FakeProcessSequence($processes);
    }

    
/**
     * Indicate that the process factory should fake processes.
     *
     * @param  Closure|array|null  $callback
     * @return $this
     */
    
public function fake(Closure|array|null $callback null)
    {
        
$this->recording true;

        if (
is_null($callback)) {
            
$this->fakeHandlers = ['*' => fn () => new FakeProcessResult];

            return 
$this;
        }

        if (
$callback instanceof Closure) {
            
$this->fakeHandlers = ['*' => $callback];

            return 
$this;
        }

        foreach (
$callback as $command => $handler) {
            
$this->fakeHandlers[is_numeric($command) ? '*' $command] = $handler instanceof Closure
                    
$handler
                    
fn () => $handler;
        }

        return 
$this;
    }

    
/**
     * Determine if the process factory has fake process handlers and is recording processes.
     *
     * @return bool
     */
    
public function isRecording()
    {
        return 
$this->recording;
    }

    
/**
     * Record the given process if processes should be recorded.
     *
     * @param  IlluminateProcessPendingProcess  $process
     * @param  IlluminateContractsProcessProcessResult  $result
     * @return $this
     */
    
public function recordIfRecording(PendingProcess $processProcessResultContract $result)
    {
        if (
$this->isRecording()) {
            
$this->record($process$result);
        }

        return 
$this;
    }

    
/**
     * Record the given process.
     *
     * @param  IlluminateProcessPendingProcess  $process
     * @param  IlluminateContractsProcessProcessResult  $result
     * @return $this
     */
    
public function record(PendingProcess $processProcessResultContract $result)
    {
        
$this->recorded[] = [$process$result];

        return 
$this;
    }

    
/**
     * Indicate that an exception should be thrown if any process is not faked.
     *
     * @param  bool  $prevent
     * @return $this
     */
    
public function preventStrayProcesses(bool $prevent true)
    {
        
$this->preventStrayProcesses $prevent;

        return 
$this;
    }

    
/**
     * Determine if stray processes are being prevented.
     *
     * @return bool
     */
    
public function preventingStrayProcesses()
    {
        return 
$this->preventStrayProcesses;
    }

    
/**
     * Assert that a process was recorded matching a given truth test.
     *
     * @param  Closure|string  $callback
     * @return $this
     */
    
public function assertRan(Closure|string $callback)
    {
        
$callback is_string($callback) ? fn ($process) => $process->command === $callback $callback;

        
PHPUnit::assertTrue(
            
collect($this->recorded)->filter(function ($pair) use ($callback) {
                return 
$callback($pair[0], $pair[1]);
            })->
count() > 0,
            
'An expected process was not invoked.'
        
);

        return 
$this;
    }

    
/**
     * Assert that a process was recorded a given number of times matching a given truth test.
     *
     * @param  Closure|string  $callback
     * @param  int  $times
     * @return $this
     */
    
public function assertRanTimes(Closure|string $callbackint $times 1)
    {
        
$callback is_string($callback) ? fn ($process) => $process->command === $callback $callback;

        
$count collect($this->recorded)->filter(function ($pair) use ($callback) {
            return 
$callback($pair[0], $pair[1]);
        })->
count();

        
PHPUnit::assertSame(
            
$times$count,
            
"An expected process ran {$count} times instead of {$times} times."
        
);

        return 
$this;
    }

    
/**
     * Assert that a process was not recorded matching a given truth test.
     *
     * @param  Closure|string  $callback
     * @return $this
     */
    
public function assertNotRan(Closure|string $callback)
    {
        
$callback is_string($callback) ? fn ($process) => $process->command === $callback $callback;

        
PHPUnit::assertTrue(
            
collect($this->recorded)->filter(function ($pair) use ($callback) {
                return 
$callback($pair[0], $pair[1]);
            })->
count() === 0,
            
'An unexpected process was invoked.'
        
);

        return 
$this;
    }

    
/**
     * Assert that a process was not recorded matching a given truth test.
     *
     * @param  Closure|string  $callback
     * @return $this
     */
    
public function assertDidntRun(Closure|string $callback)
    {
        return 
$this->assertNotRan($callback);
    }

    
/**
     * Assert that no processes were recorded.
     *
     * @return $this
     */
    
public function assertNothingRan()
    {
        
PHPUnit::assertEmpty(
            
$this->recorded,
            
'An unexpected process was invoked.'
        
);

        return 
$this;
    }

    
/**
     * Start defining a pool of processes.
     *
     * @param  callable  $callback
     * @return IlluminateProcessPool
     */
    
public function pool(callable $callback)
    {
        return new 
Pool($this$callback);
    }

    
/**
     * Start defining a series of piped processes.
     *
     * @param  callable|array  $callback
     * @return IlluminateContractsProcessProcessResult
     */
    
public function pipe(callable|array $callback, ?callable $output null)
    {
        return 
is_array($callback)
            ? (new 
Pipe($thisfn ($pipe) => collect($callback)->each(
                
fn ($command) => $pipe->command($command)
            )))->
run(output$output)
            : (new 
Pipe($this$callback))->run(output$output);
    }

    
/**
     * Run a pool of processes and wait for them to finish executing.
     *
     * @param  callable  $callback
     * @param  callable|null  $output
     * @return IlluminateProcessProcessPoolResults
     */
    
public function concurrently(callable $callback, ?callable $output null)
    {
        return (new 
Pool($this$callback))->start($output)->wait();
    }

    
/**
     * Create a new pending process associated with this factory.
     *
     * @return IlluminateProcessPendingProcess
     */
    
public function newPendingProcess()
    {
        return (new 
PendingProcess($this))->withFakeHandlers($this->fakeHandlers);
    }

    
/**
     * Dynamically proxy methods to a new pending process instance.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        if (static::
hasMacro($method)) {
            return 
$this->macroCall($method$parameters);
        }

        return 
$this->newPendingProcess()->{$method}(...$parameters);
    }
}
Онлайн: 4
Реклама