Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

MockHandler.php

Zuletzt modifiziert: 02.04.2025, 15:03 - Dateigröße: 5.92 KiB


001  <?php
002  namespace GuzzleHttp\Handler;
003   
004  use GuzzleHttp\Exception\RequestException;
005  use GuzzleHttp\HandlerStack;
006  use GuzzleHttp\Promise\PromiseInterface;
007  use GuzzleHttp\Promise\RejectedPromise;
008  use GuzzleHttp\TransferStats;
009  use Psr\Http\Message\RequestInterface;
010  use Psr\Http\Message\ResponseInterface;
011   
012  /**
013   * Handler that returns responses or throw exceptions from a queue.
014   */
015  class MockHandler implements \Countable
016  {
017      private $queue = [];
018      private $lastRequest;
019      private $lastOptions;
020      private $onFulfilled;
021      private $onRejected;
022   
023      /**
024       * Creates a new MockHandler that uses the default handler stack list of
025       * middlewares.
026       *
027       * @param array $queue Array of responses, callables, or exceptions.
028       * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
029       * @param callable $onRejected  Callback to invoke when the return value is rejected.
030       *
031       * @return HandlerStack
032       */
033      public static function createWithMiddleware(
034          array $queue = null,
035          callable $onFulfilled = null,
036          callable $onRejected = null
037      ) {
038          return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
039      }
040   
041      /**
042       * The passed in value must be an array of
043       * {@see Psr7\Http\Message\ResponseInterface} objects, Exceptions,
044       * callables, or Promises.
045       *
046       * @param array $queue
047       * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
048       * @param callable $onRejected  Callback to invoke when the return value is rejected.
049       */
050      public function __construct(
051          array $queue = null,
052          callable $onFulfilled = null,
053          callable $onRejected = null
054      ) {
055          $this->onFulfilled = $onFulfilled;
056          $this->onRejected = $onRejected;
057   
058          if ($queue) {
059              call_user_func_array([$this, 'append'], $queue);
060          }
061      }
062   
063      public function __invoke(RequestInterface $request, array $options)
064      {
065          if (!$this->queue) {
066              throw new \OutOfBoundsException('Mock queue is empty');
067          }
068   
069          if (isset($options['delay']) && is_numeric($options['delay'])) {
070              usleep($options['delay'] * 1000);
071          }
072   
073          $this->lastRequest = $request;
074          $this->lastOptions = $options;
075          $response = array_shift($this->queue);
076   
077          if (isset($options['on_headers'])) {
078              if (!is_callable($options['on_headers'])) {
079                  throw new \InvalidArgumentException('on_headers must be callable');
080              }
081              try {
082                  $options['on_headers']($response);
083              } catch (\Exception $e) {
084                  $msg = 'An error was encountered during the on_headers event';
085                  $response = new RequestException($msg, $request, $response, $e);
086              }
087          }
088   
089          if (is_callable($response)) {
090              $response = call_user_func($response, $request, $options);
091          }
092   
093          $response = $response instanceof \Exception
094              ? \GuzzleHttp\Promise\rejection_for($response)
095              : \GuzzleHttp\Promise\promise_for($response);
096   
097          return $response->then(
098              function ($value) use ($request, $options) {
099                  $this->invokeStats($request, $options, $value);
100                  if ($this->onFulfilled) {
101                      call_user_func($this->onFulfilled, $value);
102                  }
103                  if (isset($options['sink'])) {
104                      $contents = (string) $value->getBody();
105                      $sink = $options['sink'];
106   
107                      if (is_resource($sink)) {
108                          fwrite($sink, $contents);
109                      } elseif (is_string($sink)) {
110                          file_put_contents($sink, $contents);
111                      } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) {
112                          $sink->write($contents);
113                      }
114                  }
115   
116                  return $value;
117              },
118              function ($reason) use ($request, $options) {
119                  $this->invokeStats($request, $options, null, $reason);
120                  if ($this->onRejected) {
121                      call_user_func($this->onRejected, $reason);
122                  }
123                  return \GuzzleHttp\Promise\rejection_for($reason);
124              }
125          );
126      }
127   
128      /**
129       * Adds one or more variadic requests, exceptions, callables, or promises
130       * to the queue.
131       */
132      public function append()
133      {
134          foreach (func_get_args() as $value) {
135              if ($value instanceof ResponseInterface
136                  || $value instanceof \Exception
137                  || $value instanceof PromiseInterface
138                  || is_callable($value)
139              ) {
140                  $this->queue[] = $value;
141              } else {
142                  throw new \InvalidArgumentException('Expected a response or '
143                      . 'exception. Found ' . \GuzzleHttp\describe_type($value));
144              }
145          }
146      }
147   
148      /**
149       * Get the last received request.
150       *
151       * @return RequestInterface
152       */
153      public function getLastRequest()
154      {
155          return $this->lastRequest;
156      }
157   
158      /**
159       * Get the last received request options.
160       *
161       * @return array
162       */
163      public function getLastOptions()
164      {
165          return $this->lastOptions;
166      }
167   
168      /**
169       * Returns the number of remaining items in the queue.
170       *
171       * @return int
172       */
173      public function count()
174      {
175          return count($this->queue);
176      }
177   
178      public function reset()
179      {
180          $this->queue = [];
181      }
182   
183      private function invokeStats(
184          RequestInterface $request,
185          array $options,
186          ResponseInterface $response = null,
187          $reason = null
188      ) {
189          if (isset($options['on_stats'])) {
190              $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0;
191              $stats = new TransferStats($request, $response, $transferTime, $reason);
192              call_user_func($options['on_stats'], $stats);
193          }
194      }
195  }
196