| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <?php
- declare(strict_types=1);
- namespace Sabre\HTTP;
- class MessageTest extends \PHPUnit\Framework\TestCase
- {
- public function testConstruct()
- {
- $message = new MessageMock();
- $this->assertInstanceOf('Sabre\HTTP\Message', $message);
- }
- public function testStreamBody()
- {
- $body = 'foo';
- $h = fopen('php://memory', 'r+');
- fwrite($h, $body);
- rewind($h);
- $message = new MessageMock();
- $message->setBody($h);
- $this->assertEquals($body, $message->getBodyAsString());
- rewind($h);
- $this->assertEquals($body, stream_get_contents($message->getBodyAsStream()));
- rewind($h);
- $this->assertEquals($body, stream_get_contents($message->getBody()));
- }
- public function testStringBody()
- {
- $body = 'foo';
- $message = new MessageMock();
- $message->setBody($body);
- $this->assertEquals($body, $message->getBodyAsString());
- $this->assertEquals($body, stream_get_contents($message->getBodyAsStream()));
- $this->assertEquals($body, $message->getBody());
- }
- public function testCallbackBodyAsString()
- {
- $body = $this->createCallback('foo');
- $message = new MessageMock();
- $message->setBody($body);
- $string = $message->getBodyAsString();
- $this->assertSame('foo', $string);
- }
- public function testCallbackBodyAsStream()
- {
- $body = $this->createCallback('foo');
- $message = new MessageMock();
- $message->setBody($body);
- $stream = $message->getBodyAsStream();
- $this->assertSame('foo', stream_get_contents($stream));
- }
- public function testGetBodyWhenCallback()
- {
- $callback = $this->createCallback('foo');
- $message = new MessageMock();
- $message->setBody($callback);
- $this->assertSame($callback, $message->getBody());
- }
- /**
- * It's possible that streams contains more data than the Content-Length.
- *
- * The request object should make sure to never emit more than
- * Content-Length, if Content-Length is set.
- *
- * This is in particular useful when responding to range requests with
- * streams that represent files on the filesystem, as it's possible to just
- * seek the stream to a certain point, set the content-length and let the
- * request object do the rest.
- */
- public function testLongStreamToStringBody()
- {
- $body = fopen('php://memory', 'r+');
- fwrite($body, 'abcdefg');
- fseek($body, 2);
- $message = new MessageMock();
- $message->setBody($body);
- $message->setHeader('Content-Length', '4');
- $this->assertEquals(
- 'cdef',
- $message->getBodyAsString()
- );
- }
- /**
- * Some clients include a content-length header, but the header is empty.
- * This is definitely broken behavior, but we should support it.
- */
- public function testEmptyContentLengthHeader()
- {
- $body = fopen('php://memory', 'r+');
- fwrite($body, 'abcdefg');
- fseek($body, 2);
- $message = new MessageMock();
- $message->setBody($body);
- $message->setHeader('Content-Length', '');
- $this->assertEquals(
- 'cdefg',
- $message->getBodyAsString()
- );
- }
- public function testGetEmptyBodyStream()
- {
- $message = new MessageMock();
- $body = $message->getBodyAsStream();
- $this->assertEquals('', stream_get_contents($body));
- }
- public function testGetEmptyBodyString()
- {
- $message = new MessageMock();
- $body = $message->getBodyAsString();
- $this->assertEquals('', $body);
- }
- public function testHeaders()
- {
- $message = new MessageMock();
- $message->setHeader('X-Foo', 'bar');
- // Testing caselessness
- $this->assertEquals('bar', $message->getHeader('X-Foo'));
- $this->assertEquals('bar', $message->getHeader('x-fOO'));
- $this->assertTrue(
- $message->removeHeader('X-FOO')
- );
- $this->assertNull($message->getHeader('X-Foo'));
- $this->assertFalse(
- $message->removeHeader('X-FOO')
- );
- }
- public function testSetHeaders()
- {
- $message = new MessageMock();
- $headers = [
- 'X-Foo' => ['1'],
- 'X-Bar' => ['2'],
- ];
- $message->setHeaders($headers);
- $this->assertEquals($headers, $message->getHeaders());
- $message->setHeaders([
- 'X-Foo' => ['3', '4'],
- 'X-Bar' => '5',
- ]);
- $expected = [
- 'X-Foo' => ['3', '4'],
- 'X-Bar' => ['5'],
- ];
- $this->assertEquals($expected, $message->getHeaders());
- }
- public function testAddHeaders()
- {
- $message = new MessageMock();
- $headers = [
- 'X-Foo' => ['1'],
- 'X-Bar' => ['2'],
- ];
- $message->addHeaders($headers);
- $this->assertEquals($headers, $message->getHeaders());
- $message->addHeaders([
- 'X-Foo' => ['3', '4'],
- 'X-Bar' => '5',
- ]);
- $expected = [
- 'X-Foo' => ['1', '3', '4'],
- 'X-Bar' => ['2', '5'],
- ];
- $this->assertEquals($expected, $message->getHeaders());
- }
- public function testSendBody()
- {
- $message = new MessageMock();
- // String
- $message->setBody('foo');
- // Stream
- $h = fopen('php://memory', 'r+');
- fwrite($h, 'bar');
- rewind($h);
- $message->setBody($h);
- $body = $message->getBody();
- rewind($body);
- $this->assertEquals('bar', stream_get_contents($body));
- }
- public function testMultipleHeaders()
- {
- $message = new MessageMock();
- $message->setHeader('a', '1');
- $message->addHeader('A', '2');
- $this->assertEquals(
- '1,2',
- $message->getHeader('A')
- );
- $this->assertEquals(
- '1,2',
- $message->getHeader('a')
- );
- $this->assertEquals(
- ['1', '2'],
- $message->getHeaderAsArray('a')
- );
- $this->assertEquals(
- ['1', '2'],
- $message->getHeaderAsArray('A')
- );
- $this->assertEquals(
- [],
- $message->getHeaderAsArray('B')
- );
- }
- public function testHasHeaders()
- {
- $message = new MessageMock();
- $this->assertFalse($message->hasHeader('X-Foo'));
- $message->setHeader('X-Foo', 'Bar');
- $this->assertTrue($message->hasHeader('X-Foo'));
- }
- /**
- * @param string $content
- *
- * @return \Closure Returns a callback printing $content to php://output stream
- */
- private function createCallback($content)
- {
- return function () use ($content) {
- echo $content;
- };
- }
- }
- class MessageMock extends Message
- {
- }
|