mirror of
https://codeberg.org/icewind/streams.git
synced 2026-06-03 08:34:09 +02:00
initial version
This commit is contained in:
commit
d54615fd3a
11 changed files with 494 additions and 0 deletions
81
tests/CallbackWrapper.php
Normal file
81
tests/CallbackWrapper.php
Normal 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
52
tests/NullWrapper.php
Normal 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
102
tests/Wrapper.php
Normal 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
9
tests/bootstrap.php
Normal 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
6
tests/phpunit.xml
Normal 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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue