You are here

public function CachingStreamTest::testSkipsOverwrittenBytes in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/guzzlehttp/psr7/tests/CachingStreamTest.php \GuzzleHttp\Tests\Psr7\CachingStreamTest::testSkipsOverwrittenBytes()

File

vendor/guzzlehttp/psr7/tests/CachingStreamTest.php, line 109

Class

CachingStreamTest
@covers GuzzleHttp\Psr7\CachingStream

Namespace

GuzzleHttp\Tests\Psr7

Code

public function testSkipsOverwrittenBytes() {
  $decorated = Psr7\stream_for(implode("\n", array_map(function ($n) {
    return str_pad($n, 4, '0', STR_PAD_LEFT);
  }, range(0, 25))));
  $body = new CachingStream($decorated);
  $this
    ->assertEquals("0000\n", Psr7\readline($body));
  $this
    ->assertEquals("0001\n", Psr7\readline($body));

  // Write over part of the body yet to be read, so skip some bytes
  $this
    ->assertEquals(5, $body
    ->write("TEST\n"));
  $this
    ->assertEquals(5, $this
    ->readAttribute($body, 'skipReadBytes'));

  // Read, which skips bytes, then reads
  $this
    ->assertEquals("0003\n", Psr7\readline($body));
  $this
    ->assertEquals(0, $this
    ->readAttribute($body, 'skipReadBytes'));
  $this
    ->assertEquals("0004\n", Psr7\readline($body));
  $this
    ->assertEquals("0005\n", Psr7\readline($body));

  // Overwrite part of the cached body (so don't skip any bytes)
  $body
    ->seek(5);
  $this
    ->assertEquals(5, $body
    ->write("ABCD\n"));
  $this
    ->assertEquals(0, $this
    ->readAttribute($body, 'skipReadBytes'));
  $this
    ->assertEquals("TEST\n", Psr7\readline($body));
  $this
    ->assertEquals("0003\n", Psr7\readline($body));
  $this
    ->assertEquals("0004\n", Psr7\readline($body));
  $this
    ->assertEquals("0005\n", Psr7\readline($body));
  $this
    ->assertEquals("0006\n", Psr7\readline($body));
  $this
    ->assertEquals(5, $body
    ->write("1234\n"));
  $this
    ->assertEquals(5, $this
    ->readAttribute($body, 'skipReadBytes'));

  // Seek to 0 and ensure the overwritten bit is replaced
  $body
    ->seek(0);
  $this
    ->assertEquals("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", $body
    ->read(50));

  // Ensure that casting it to a string does not include the bit that was overwritten
  $this
    ->assertContains("0000\nABCD\nTEST\n0003\n0004\n0005\n0006\n1234\n0008\n0009\n", (string) $body);
}