You are here

FnStreamTest.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/guzzlehttp/psr7/tests/FnStreamTest.php

File

vendor/guzzlehttp/psr7/tests/FnStreamTest.php
View source
<?php

namespace GuzzleHttp\Tests\Psr7;

use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\FnStream;

/**
 * @covers GuzzleHttp\Psr7\FnStream
 */
class FnStreamTest extends \PHPUnit_Framework_TestCase {

  /**
   * @expectedException \BadMethodCallException
   * @expectedExceptionMessage seek() is not implemented in the FnStream
   */
  public function testThrowsWhenNotImplemented() {
    (new FnStream([]))
      ->seek(1);
  }
  public function testProxiesToFunction() {
    $s = new FnStream([
      'read' => function ($len) {
        $this
          ->assertEquals(3, $len);
        return 'foo';
      },
    ]);
    $this
      ->assertEquals('foo', $s
      ->read(3));
  }
  public function testCanCloseOnDestruct() {
    $called = false;
    $s = new FnStream([
      'close' => function () use (&$called) {
        $called = true;
      },
    ]);
    unset($s);
    $this
      ->assertTrue($called);
  }
  public function testDoesNotRequireClose() {
    $s = new FnStream([]);
    unset($s);
  }
  public function testDecoratesStream() {
    $a = Psr7\stream_for('foo');
    $b = FnStream::decorate($a, []);
    $this
      ->assertEquals(3, $b
      ->getSize());
    $this
      ->assertEquals($b
      ->isWritable(), true);
    $this
      ->assertEquals($b
      ->isReadable(), true);
    $this
      ->assertEquals($b
      ->isSeekable(), true);
    $this
      ->assertEquals($b
      ->read(3), 'foo');
    $this
      ->assertEquals($b
      ->tell(), 3);
    $this
      ->assertEquals($a
      ->tell(), 3);
    $this
      ->assertSame('', $a
      ->read(1));
    $this
      ->assertEquals($b
      ->eof(), true);
    $this
      ->assertEquals($a
      ->eof(), true);
    $b
      ->seek(0);
    $this
      ->assertEquals('foo', (string) $b);
    $b
      ->seek(0);
    $this
      ->assertEquals('foo', $b
      ->getContents());
    $this
      ->assertEquals($a
      ->getMetadata(), $b
      ->getMetadata());
    $b
      ->seek(0, SEEK_END);
    $b
      ->write('bar');
    $this
      ->assertEquals('foobar', (string) $b);
    $this
      ->assertInternalType('resource', $b
      ->detach());
    $b
      ->close();
  }
  public function testDecoratesWithCustomizations() {
    $called = false;
    $a = Psr7\stream_for('foo');
    $b = FnStream::decorate($a, [
      'read' => function ($len) use (&$called, $a) {
        $called = true;
        return $a
          ->read($len);
      },
    ]);
    $this
      ->assertEquals('foo', $b
      ->read(3));
    $this
      ->assertTrue($called);
  }

}

Classes