test(phpunit): Better tests for streams
This commit is contained in:
parent
d30614668b
commit
7bf2510dd2
8 changed files with 307 additions and 175 deletions
|
@ -191,6 +191,8 @@ class PlaylistArchiveStream extends ZipArchive implements StreamInterface
|
|||
*/
|
||||
public function __toString()
|
||||
{
|
||||
$this->rewind();
|
||||
|
||||
return $this->getContents();
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
namespace Alltube\Test;
|
||||
|
||||
use Alltube\Controller\BaseController;
|
||||
use Alltube\Controller\DownloadController;
|
||||
use Alltube\Controller\FrontController;
|
||||
use Alltube\LocaleManager;
|
||||
|
@ -43,8 +42,6 @@ abstract class ControllerTest extends BaseTest
|
|||
|
||||
/**
|
||||
* Controller instance used in tests.
|
||||
*
|
||||
* @var BaseController
|
||||
*/
|
||||
protected $controller;
|
||||
|
||||
|
|
27
tests/ConvertedPlaylistArchiveStreamTest.php
Normal file
27
tests/ConvertedPlaylistArchiveStreamTest.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* ConvertedPlaylistArchiveStreamTest class.
|
||||
*/
|
||||
|
||||
namespace Alltube\Test;
|
||||
|
||||
use Alltube\Stream\ConvertedPlaylistArchiveStream;
|
||||
use Alltube\Video;
|
||||
|
||||
/**
|
||||
* Unit tests for the ConvertedPlaylistArchiveStream class.
|
||||
*/
|
||||
class ConvertedPlaylistArchiveStreamTest extends StreamTest
|
||||
{
|
||||
/**
|
||||
* Prepare tests.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$video = new Video('https://www.youtube.com/playlist?list=PL1j4Ff8cAqPu5iowaeUAY8lRgkfT4RybJ');
|
||||
|
||||
$this->stream = new ConvertedPlaylistArchiveStream($video);
|
||||
}
|
||||
}
|
|
@ -16,13 +16,6 @@ use Slim\Http\Request;
|
|||
*/
|
||||
class FrontControllerTest extends ControllerTest
|
||||
{
|
||||
/**
|
||||
* Controller instance used in tests.
|
||||
*
|
||||
* @var FrontController
|
||||
*/
|
||||
protected $controller;
|
||||
|
||||
/**
|
||||
* Prepare tests.
|
||||
*/
|
||||
|
|
|
@ -9,17 +9,10 @@ use Alltube\Stream\PlaylistArchiveStream;
|
|||
use Alltube\Video;
|
||||
|
||||
/**
|
||||
* Unit tests for the ViewFactory class.
|
||||
* Unit tests for the PlaylistArchiveStream class.
|
||||
*/
|
||||
class PlaylistArchiveStreamTest extends BaseTest
|
||||
class PlaylistArchiveStreamTest extends StreamTest
|
||||
{
|
||||
/**
|
||||
* PlaylistArchiveStream instance.
|
||||
*
|
||||
* @var PlaylistArchiveStream
|
||||
*/
|
||||
private $stream;
|
||||
|
||||
/**
|
||||
* Prepare tests.
|
||||
*/
|
||||
|
@ -31,160 +24,4 @@ class PlaylistArchiveStreamTest extends BaseTest
|
|||
|
||||
$this->stream = new PlaylistArchiveStream($video);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean variables used in tests.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->stream->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the write() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testWrite()
|
||||
{
|
||||
$this->assertNull($this->stream->write('foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the tell() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testTell()
|
||||
{
|
||||
$this->assertInternalType('int', $this->stream->tell());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the seek() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSeek()
|
||||
{
|
||||
$this->stream->write('foobar');
|
||||
$this->stream->seek(3);
|
||||
$this->assertEquals(3, $this->stream->tell());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the read() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRead()
|
||||
{
|
||||
$result = $this->stream->read(8192);
|
||||
$this->assertInternalType('string', $result);
|
||||
$this->assertLessThanOrEqual(8192, strlen($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the eof() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testEof()
|
||||
{
|
||||
$this->assertFalse($this->stream->eof());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getSize() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetSize()
|
||||
{
|
||||
$this->assertNull($this->stream->getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isSeekable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsSeekable()
|
||||
{
|
||||
$this->assertTrue($this->stream->isSeekable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the rewind() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRewind()
|
||||
{
|
||||
$this->stream->rewind();
|
||||
$this->assertEquals(0, $this->stream->tell());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isWritable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsWritable()
|
||||
{
|
||||
$this->assertTrue($this->stream->isWritable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isReadable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsReadable()
|
||||
{
|
||||
$this->assertTrue($this->stream->isReadable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getContents() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetContents()
|
||||
{
|
||||
$this->assertInternalType('string', $this->stream->getContents());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getMetadata() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetMetadata()
|
||||
{
|
||||
$this->assertInternalType('array', $this->stream->getMetadata());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the detach() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDetach()
|
||||
{
|
||||
$this->assertInternalType('resource', $this->stream->detach());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the __toString() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testToString()
|
||||
{
|
||||
$this->assertInternalType('string', $this->stream->__toString());
|
||||
$this->assertInternalType('string', (string) $this->stream);
|
||||
}
|
||||
}
|
||||
|
|
222
tests/StreamTest.php
Normal file
222
tests/StreamTest.php
Normal file
|
@ -0,0 +1,222 @@
|
|||
<?php
|
||||
/**
|
||||
* StreamTest class.
|
||||
*/
|
||||
|
||||
namespace Alltube\Test;
|
||||
|
||||
use RuntimeException;
|
||||
|
||||
/**
|
||||
* Abstract class used by the stream tests.
|
||||
*/
|
||||
abstract class StreamTest extends BaseTest
|
||||
{
|
||||
/**
|
||||
* Stream instance.
|
||||
*/
|
||||
protected $stream;
|
||||
|
||||
/**
|
||||
* Clean variables used in tests.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->stream->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the write() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testWrite()
|
||||
{
|
||||
if ($this->stream->isWritable()) {
|
||||
$this->assertNull($this->stream->write('foo'));
|
||||
} else {
|
||||
$this->expectException(RuntimeException::class);
|
||||
$this->stream->write('foo');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the tell() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testTell()
|
||||
{
|
||||
$this->assertInternalType('int', $this->stream->tell());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the seek() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSeek()
|
||||
{
|
||||
if ($this->stream->isSeekable()) {
|
||||
if ($this->stream->isWritable()) {
|
||||
// We might need some data.
|
||||
$this->stream->write('foobar');
|
||||
}
|
||||
|
||||
$this->stream->seek(3);
|
||||
$this->assertEquals(3, $this->stream->tell());
|
||||
} else {
|
||||
$this->expectException(RuntimeException::class);
|
||||
$this->stream->seek(3);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the read() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRead()
|
||||
{
|
||||
$result = $this->stream->read(8192);
|
||||
$this->assertInternalType('string', $result);
|
||||
$this->assertLessThanOrEqual(8192, strlen($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the read() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testReadEntireStream()
|
||||
{
|
||||
$this->markTestIncomplete('Can we test the whole logic without reading the whole stream?');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the eof() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testEof()
|
||||
{
|
||||
$this->assertFalse($this->stream->eof());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getSize() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetSize()
|
||||
{
|
||||
$this->assertNull($this->stream->getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isSeekable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsSeekable()
|
||||
{
|
||||
$this->assertInternalType('boolean', $this->stream->isSeekable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the rewind() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRewind()
|
||||
{
|
||||
if ($this->stream->isSeekable()) {
|
||||
if ($this->stream->isWritable()) {
|
||||
// We might need some data.
|
||||
$this->stream->write('foobar');
|
||||
}
|
||||
|
||||
$this->stream->rewind();
|
||||
$this->assertEquals(0, $this->stream->tell());
|
||||
} else {
|
||||
$this->expectException(RuntimeException::class);
|
||||
$this->stream->rewind();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isWritable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsWritable()
|
||||
{
|
||||
$this->assertInternalType('boolean', $this->stream->isWritable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the isReadable() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsReadable()
|
||||
{
|
||||
$this->assertTrue($this->stream->isReadable());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getContents() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetContents()
|
||||
{
|
||||
$this->assertInternalType('string', $this->stream->getContents());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getMetadata() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetMetadata()
|
||||
{
|
||||
$this->assertInternalType('array', $this->stream->getMetadata());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the getMetadata() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetMetadataWithKey()
|
||||
{
|
||||
$this->assertInternalType('string', $this->stream->getMetadata('stream_type'));
|
||||
$this->assertInternalType('string', $this->stream->getMetadata('mode'));
|
||||
$this->assertInternalType('boolean', $this->stream->getMetadata('seekable'));
|
||||
$this->assertNull($this->stream->getMetadata('foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the detach() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDetach()
|
||||
{
|
||||
$this->assertInternalType('resource', $this->stream->detach());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the __toString() function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testToString()
|
||||
{
|
||||
$this->assertInternalType('string', $this->stream->__toString());
|
||||
$this->assertInternalType('string', (string) $this->stream);
|
||||
}
|
||||
}
|
27
tests/YoutubeChunkStreamTest.php
Normal file
27
tests/YoutubeChunkStreamTest.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* YoutubeChunkStreamTest class.
|
||||
*/
|
||||
|
||||
namespace Alltube\Test;
|
||||
|
||||
use Alltube\Stream\YoutubeChunkStream;
|
||||
use Alltube\Video;
|
||||
|
||||
/**
|
||||
* Unit tests for the YoutubeChunkStream class.
|
||||
*/
|
||||
class YoutubeChunkStreamTest extends StreamTest
|
||||
{
|
||||
/**
|
||||
* Prepare tests.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$video = new Video('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
|
||||
|
||||
$this->stream = new YoutubeChunkStream($video->getHttpResponse());
|
||||
}
|
||||
}
|
27
tests/YoutubeStreamTest.php
Normal file
27
tests/YoutubeStreamTest.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* YoutubeStreamTest class.
|
||||
*/
|
||||
|
||||
namespace Alltube\Test;
|
||||
|
||||
use Alltube\Stream\YoutubeStream;
|
||||
use Alltube\Video;
|
||||
|
||||
/**
|
||||
* Unit tests for the YoutubeStream class.
|
||||
*/
|
||||
class YoutubeStreamTest extends StreamTest
|
||||
{
|
||||
/**
|
||||
* Prepare tests.
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$video = new Video('https://www.youtube.com/watch?v=dQw4w9WgXcQ', '135');
|
||||
|
||||
$this->stream = new YoutubeStream($video);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue