Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Mock.php
001 <?php
002 namespace GuzzleHttp\Subscriber;
003
004 use GuzzleHttp\Event\RequestEvents;
005 use GuzzleHttp\Event\SubscriberInterface;
006 use GuzzleHttp\Event\BeforeEvent;
007 use GuzzleHttp\Exception\RequestException;
008 use GuzzleHttp\Message\MessageFactory;
009 use GuzzleHttp\Message\ResponseInterface;
010 use GuzzleHttp\Stream\StreamInterface;
011
012 /**
013 * Queues mock responses or exceptions and delivers mock responses or
014 * exceptions in a fifo order.
015 */
016 class Mock implements SubscriberInterface, \Countable
017 {
018 /** @var array Array of mock responses / exceptions */
019 private $queue = [];
020
021 /** @var bool Whether or not to consume an entity body when mocking */
022 private $readBodies;
023
024 /** @var MessageFactory */
025 private $factory;
026
027 /**
028 * @param array $items Array of responses or exceptions to queue
029 * @param bool $readBodies Set to false to not consume the entity body of
030 * a request when a mock is served.
031 */
032 public function __construct(array $items = [], $readBodies = true)
033 {
034 $this->factory = new MessageFactory();
035 $this->readBodies = $readBodies;
036 $this->addMultiple($items);
037 }
038
039 public function getEvents()
040 {
041 // Fire the event last, after signing
042 return ['before' => ['onBefore', RequestEvents::SIGN_REQUEST - 10]];
043 }
044
045 /**
046 * @throws \OutOfBoundsException|\Exception
047 */
048 public function onBefore(BeforeEvent $event)
049 {
050 if (!$item = array_shift($this->queue)) {
051 throw new \OutOfBoundsException('Mock queue is empty');
052 } elseif ($item instanceof RequestException) {
053 throw $item;
054 }
055
056 // Emulate reading a response body
057 $request = $event->getRequest();
058 if ($this->readBodies && $request->getBody()) {
059 while (!$request->getBody()->eof()) {
060 $request->getBody()->read(8096);
061 }
062 }
063
064 $saveTo = $event->getRequest()->getConfig()->get('save_to');
065
066 if (null !== $saveTo) {
067 $body = $item->getBody();
068
069 if (is_resource($saveTo)) {
070 fwrite($saveTo, $body);
071 } elseif (is_string($saveTo)) {
072 file_put_contents($saveTo, $body);
073 } elseif ($saveTo instanceof StreamInterface) {
074 $saveTo->write($body);
075 }
076 }
077
078 $event->intercept($item);
079 }
080
081 public function count()
082 {
083 return count($this->queue);
084 }
085
086 /**
087 * Add a response to the end of the queue
088 *
089 * @param string|ResponseInterface $response Response or path to response file
090 *
091 * @return self
092 * @throws \InvalidArgumentException if a string or Response is not passed
093 */
094 public function addResponse($response)
095 {
096 if (is_string($response)) {
097 $response = file_exists($response)
098 ? $this->factory->fromMessage(file_get_contents($response))
099 : $this->factory->fromMessage($response);
100 } elseif (!($response instanceof ResponseInterface)) {
101 throw new \InvalidArgumentException('Response must a message '
102 . 'string, response object, or path to a file');
103 }
104
105 $this->queue[] = $response;
106
107 return $this;
108 }
109
110 /**
111 * Add an exception to the end of the queue
112 *
113 * @param RequestException $e Exception to throw when the request is executed
114 *
115 * @return self
116 */
117 public function addException(RequestException $e)
118 {
119 $this->queue[] = $e;
120
121 return $this;
122 }
123
124 /**
125 * Add multiple items to the queue
126 *
127 * @param array $items Items to add
128 */
129 public function addMultiple(array $items)
130 {
131 foreach ($items as $item) {
132 if ($item instanceof RequestException) {
133 $this->addException($item);
134 } else {
135 $this->addResponse($item);
136 }
137 }
138 }
139
140 /**
141 * Clear the queue
142 */
143 public function clearQueue()
144 {
145 $this->queue = [];
146 }
147 }
148