initial version

This commit is contained in:
Robin Appelman 2014-07-23 23:02:10 +02:00
commit d54615fd3a
11 changed files with 494 additions and 0 deletions

81
tests/CallbackWrapper.php Normal file
View file

@ -0,0 +1,81 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\Streams\Tests;
class CallableWrapper extends Wrapper {
public function setUp() {
stream_wrapper_register('callback', '\Icewind\Streams\CallbackWrapper');
}
public function tearDown() {
stream_wrapper_unregister('callback');
}
/**
* @param resource $source
* @param callable $read
* @param callable $write
* @param callable $close
* @return resource
*/
protected function wrapSource($source, $read = null, $write = null, $close = null) {
$context = stream_context_create(array(
'callback' => array(
'source' => $source,
'read' => $read,
'write' => $write,
'close' => $close
)
));
return fopen('callback://', 'r+', false, $context);
}
public function testReadCallback() {
$called = false;
$callBack = function () use (&$called) {
$called = true;
};
$source = fopen('php://temp', 'r+');
fwrite($source, 'foobar');
rewind($source);
$wrapped = $this->wrapSource($source, $callBack);
$this->assertEquals('foo', fread($wrapped, 3));
$this->assertTrue($called);
}
public function testWriteCallback() {
$lastData = '';
$callBack = function ($data) use (&$lastData) {
$lastData = $data;
};
$source = fopen('php://temp', 'r+');
$wrapped = $this->wrapSource($source, null, $callBack);
fwrite($wrapped, 'foobar');
$this->assertEquals('foobar', $lastData);
}
public function testCloseCallback() {
$called = false;
$callBack = function () use (&$called) {
$called = true;
};
$source = fopen('php://temp', 'r+');
fwrite($source, 'foobar');
rewind($source);
$wrapped = $this->wrapSource($source, null, null, $callBack);
fclose($wrapped);
$this->assertTrue($called);
}
}

52
tests/NullWrapper.php Normal file
View file

@ -0,0 +1,52 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\Streams\Tests;
class NullWrapperTest extends Wrapper {
public function setUp() {
stream_wrapper_register('null', '\Icewind\Streams\NullWrapper');
}
public function tearDown() {
stream_wrapper_unregister('null');
}
/**
* @param resource $source
* @return resource
*/
protected function wrapSource($source) {
$context = stream_context_create(array(
'null' => array(
'source' => $source
)
));
return fopen('null://', 'r+', false, $context);
}
/**
* @expectedException \BadMethodCallException
*/
public function testNoContext() {
$context = stream_context_create(array());
fopen('null://', 'r+', false, $context);
}
/**
* @expectedException \BadMethodCallException
*/
public function testNoSource() {
$context = stream_context_create(array(
'null' => array(
'source' => 'bar'
)
));
fopen('null://', 'r+', false, $context);
}
}

102
tests/Wrapper.php Normal file
View file

@ -0,0 +1,102 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
namespace Icewind\Streams\Tests;
abstract class Wrapper extends \PHPUnit_Framework_TestCase {
/**
* @param resource $source
* @return resource
*/
abstract protected function wrapSource($source);
public function testRead() {
$source = fopen('php://temp', 'r+');
fwrite($source, 'foobar');
rewind($source);
$wrapped = $this->wrapSource($source);
$this->assertEquals('foo', fread($wrapped, 3));
$this->assertEquals('bar', fread($wrapped, 3));
$this->assertEquals('', fread($wrapped, 3));
}
public function testWrite() {
$source = fopen('php://temp', 'r+');
rewind($source);
$wrapped = $this->wrapSource($source);
$this->assertEquals(6, fwrite($wrapped, 'foobar'));
rewind($source);
$this->assertEquals('foobar', stream_get_contents($source));
}
public function testClose() {
$source = fopen('php://temp', 'r+');
rewind($source);
$wrapped = $this->wrapSource($source);
fclose($wrapped);
$this->assertFalse(is_resource($source));
}
public function testSeekTell() {
$source = fopen('php://temp', 'r+');
fwrite($source, 'foobar');
rewind($source);
$wrapped = $this->wrapSource($source);
$this->assertEquals(0, ftell($wrapped));
fseek($wrapped, 2);
$this->assertEquals(2, ftell($source));
$this->assertEquals(2, ftell($wrapped));
fseek($wrapped, 2, SEEK_CUR);
$this->assertEquals(4, ftell($source));
$this->assertEquals(4, ftell($wrapped));
fseek($wrapped, -1, SEEK_END);
$this->assertEquals(5, ftell($source));
$this->assertEquals(5, ftell($wrapped));
}
public function testStat() {
$source = fopen(__FILE__, 'r+');
$wrapped = $this->wrapSource($source);
$this->assertEquals(stat(__FILE__), fstat($wrapped));
}
public function testTruncate() {
$source = fopen('php://temp', 'r+');
fwrite($source, 'foobar');
rewind($source);
$wrapped = $this->wrapSource($source);
ftruncate($wrapped, 2);
$this->assertEquals('fo', fread($wrapped, 10));
}
public function testLock() {
$source = tmpfile();
$wrapped = $this->wrapSource($source);
if (!flock($wrapped, LOCK_EX)) {
$this->fail('Unable to acquire lock');
}
}
public function testStreamOptions() {
$source = fopen('php://temp', 'r+');
$wrapped = $this->wrapSource($source);
stream_set_blocking($wrapped, 0);
stream_set_timeout($wrapped, 1, 0);
stream_set_write_buffer($wrapped, 0);
}
}

9
tests/bootstrap.php Normal file
View file

@ -0,0 +1,9 @@
<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Licensed under the MIT license:
* http://opensource.org/licenses/MIT
*/
date_default_timezone_set('UTC');
require_once __DIR__ . '/../vendor/autoload.php';

6
tests/phpunit.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<phpunit bootstrap="bootstrap.php">
<testsuite name='Stream'>
<directory suffix='.php'>./</directory>
</testsuite>
</phpunit>