Файл: includes/library/aws/GuzzleHttp/Handler/MockHandler.php
Строк: 140
<?php
namespace GuzzleHttpHandler;
use GuzzleHttpPromisePromiseInterface;
use GuzzleHttpPromiseRejectedPromise;
use PsrHttpMessageRequestInterface;
use PsrHttpMessageResponseInterface;
/**
* Handler that returns responses or throw exceptions from a queue.
*/
class MockHandler implements Countable
{
private $queue;
private $lastRequest;
private $lastOptions;
private $onFulfilled;
private $onRejected;
/**
* The passed in value must be an array of
* {@see Psr7HttpMessageResponseInterface} objects, Exceptions,
* callables, or Promises.
*
* @param array $queue
* @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
* @param callable $onRejected Callback to invoke when the return value is rejected.
*/
public function __construct(
array $queue = null,
callable $onFulfilled = null,
callable $onRejected = null
) {
$this->onFulfilled = $onFulfilled;
$this->onRejected = $onRejected;
if ($queue) {
call_user_func_array([$this, 'append'], $queue);
}
}
public function __invoke(RequestInterface $request, array $options)
{
if (!$this->queue) {
throw new OutOfBoundsException('Mock queue is empty');
}
if (isset($options['delay'])) {
usleep($options['delay'] * 1000);
}
$this->lastRequest = $request;
$this->lastOptions = $options;
$response = array_shift($this->queue);
if (is_callable($response)) {
$response = $response($request, $options);
}
$response = $response instanceof Exception
? new RejectedPromise($response)
: GuzzleHttpPromisepromise_for($response);
if (!$this->onFulfilled && !$this->onRejected) {
return $response;
}
return $response->then(
function ($value) {
if ($this->onFulfilled) {
call_user_func($this->onFulfilled, $value);
}
return $value;
},
function ($reason) {
if ($this->onRejected) {
call_user_func($this->onRejected, $reason);
}
return new RejectedPromise($reason);
}
);
}
/**
* Adds one or more variadic requests, exceptions, callables, or promises
* to the queue.
*/
public function append()
{
foreach (func_get_args() as $value) {
if ($value instanceof ResponseInterface
|| $value instanceof Exception
|| $value instanceof PromiseInterface
|| is_callable($value)
) {
$this->queue[] = $value;
} else {
throw new InvalidArgumentException('Expected a response or '
. 'exception. Found ' . GuzzleHttpdescribe_type($value));
}
}
}
/**
* Get the last received request.
*
* @return RequestInterface
*/
public function getLastRequest()
{
return $this->lastRequest;
}
/**
* Get the last received request options.
*
* @return RequestInterface
*/
public function getLastOptions()
{
return $this->lastOptions;
}
/**
* Returns the number of remaining items in the queue.
*
* @return int
*/
public function count()
{
return count($this->queue);
}
}