2015-08-29 19:46:57 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* VideoDownloadTest class
|
2016-08-01 11:29:13 +00:00
|
|
|
*/
|
2016-03-29 23:49:08 +00:00
|
|
|
namespace Alltube\Test;
|
|
|
|
|
2015-10-29 19:43:43 +00:00
|
|
|
use Alltube\VideoDownload;
|
2015-08-29 19:46:57 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Unit tests for the VideoDownload class
|
2016-08-01 11:29:13 +00:00
|
|
|
*/
|
2016-03-29 23:49:08 +00:00
|
|
|
class VideoDownloadTest extends \PHPUnit_Framework_TestCase
|
2015-08-29 19:46:57 +00:00
|
|
|
{
|
2016-08-01 11:29:13 +00:00
|
|
|
/**
|
|
|
|
* VideoDownload instance
|
|
|
|
* @var VideoDownload
|
|
|
|
*/
|
|
|
|
private $download;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialize properties used by test
|
|
|
|
*/
|
2016-04-08 17:06:41 +00:00
|
|
|
protected function setUp()
|
|
|
|
{
|
|
|
|
$this->download = new VideoDownload();
|
|
|
|
}
|
|
|
|
|
2016-08-01 11:29:13 +00:00
|
|
|
/**
|
|
|
|
* Destroy properties after test
|
|
|
|
*/
|
2016-07-30 10:40:49 +00:00
|
|
|
protected function tearDown()
|
|
|
|
{
|
|
|
|
\Alltube\Config::destroyInstance();
|
|
|
|
}
|
|
|
|
|
2015-08-29 19:46:57 +00:00
|
|
|
/**
|
2016-04-10 21:57:19 +00:00
|
|
|
* Test listExtractors function
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-08-29 19:46:57 +00:00
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function testListExtractors()
|
|
|
|
{
|
2016-04-08 17:06:41 +00:00
|
|
|
$extractors = $this->download->listExtractors();
|
2015-09-04 20:45:55 +00:00
|
|
|
$this->assertContains('youtube', $extractors);
|
2015-08-29 19:46:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getURL function
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-09-04 20:45:55 +00:00
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
2016-08-01 11:29:13 +00:00
|
|
|
* @param string $filename Filename
|
|
|
|
* @param string $domain Domain
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-10-29 20:23:02 +00:00
|
|
|
* @return void
|
2015-10-29 17:40:22 +00:00
|
|
|
* @dataProvider urlProvider
|
2015-09-04 20:45:55 +00:00
|
|
|
*/
|
2016-04-08 18:08:04 +00:00
|
|
|
public function testGetURL($url, $format, $filename, $domain)
|
2015-09-04 20:45:55 +00:00
|
|
|
{
|
2016-04-08 17:06:41 +00:00
|
|
|
$videoURL = $this->download->getURL($url, $format);
|
2016-04-08 18:08:04 +00:00
|
|
|
$this->assertContains($domain, $videoURL);
|
2015-09-04 20:45:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getURL function errors
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-09-04 20:45:55 +00:00
|
|
|
* @param string $url URL
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-10-29 20:23:02 +00:00
|
|
|
* @return void
|
2015-09-04 20:45:55 +00:00
|
|
|
* @expectedException Exception
|
2015-10-29 20:23:02 +00:00
|
|
|
* @dataProvider ErrorUrlProvider
|
2015-09-04 20:45:55 +00:00
|
|
|
*/
|
|
|
|
public function testGetURLError($url)
|
|
|
|
{
|
2016-04-08 18:08:04 +00:00
|
|
|
$this->download->getURL($url);
|
2015-09-04 20:45:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provides URLs for tests
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2016-08-01 11:29:13 +00:00
|
|
|
* @return array[]
|
2015-09-04 20:45:55 +00:00
|
|
|
*/
|
2015-10-29 17:40:22 +00:00
|
|
|
public function urlProvider()
|
2015-09-04 20:45:55 +00:00
|
|
|
{
|
|
|
|
return array(
|
|
|
|
array(
|
|
|
|
'https://www.youtube.com/watch?v=M7IpKCZ47pU', null,
|
2016-04-08 18:08:04 +00:00
|
|
|
"It's Not Me, It's You - Hearts Under Fire-M7IpKCZ47pU.mp4",
|
2016-07-29 22:47:46 +00:00
|
|
|
'googlevideo.com',
|
|
|
|
"It's Not Me, It's You - Hearts Under Fire-M7IpKCZ47pU.mp3"
|
2015-09-04 20:45:55 +00:00
|
|
|
),
|
|
|
|
array(
|
|
|
|
'https://www.youtube.com/watch?v=RJJ6FCAXvKg', 22,
|
|
|
|
"'Heart Attack' - Demi Lovato ".
|
2016-04-08 18:08:04 +00:00
|
|
|
"(Sam Tsui & Against The Current)-RJJ6FCAXvKg.mp4",
|
2016-07-29 22:47:46 +00:00
|
|
|
'googlevideo.com',
|
|
|
|
"'Heart Attack' - Demi Lovato ".
|
|
|
|
"(Sam Tsui & Against The Current)-RJJ6FCAXvKg.mp3"
|
2015-09-04 20:45:55 +00:00
|
|
|
),
|
|
|
|
array(
|
|
|
|
'https://vimeo.com/24195442', null,
|
2016-04-08 18:08:04 +00:00
|
|
|
"Carving the Mountains-24195442.mp4",
|
2016-07-29 22:47:46 +00:00
|
|
|
'vimeocdn.com',
|
|
|
|
"Carving the Mountains-24195442.mp3"
|
2015-09-04 20:45:55 +00:00
|
|
|
),
|
2016-07-30 12:01:00 +00:00
|
|
|
array(
|
|
|
|
'http://www.bbc.co.uk/programmes/b039g8p7', 'bestaudio/best',
|
|
|
|
"Leonard Cohen, Kaleidoscope - BBC Radio 4-b039d07m.flv",
|
|
|
|
'bbcodspdns.fcod.llnwd.net',
|
|
|
|
"Leonard Cohen, Kaleidoscope - BBC Radio 4-b039d07m.mp3"
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
'http://www.rtl2.de/sendung/grip-das-motormagazin/folge/folge-203-0', 'bestaudio/best',
|
|
|
|
"GRIP sucht den Sommerkönig-folge-203-0.f4v",
|
|
|
|
'edgefcs.net',
|
|
|
|
"GRIP sucht den Sommerkönig-folge-203-0.mp3"
|
|
|
|
)
|
2015-09-04 20:45:55 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provides incorrect URLs for tests
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2016-08-01 11:29:13 +00:00
|
|
|
* @return array[]
|
2015-09-04 20:45:55 +00:00
|
|
|
*/
|
2015-10-29 17:40:22 +00:00
|
|
|
public function errorUrlProvider()
|
2015-09-04 20:45:55 +00:00
|
|
|
{
|
|
|
|
return array(
|
|
|
|
array('http://example.com/video')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getJSON function
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-09-04 20:45:55 +00:00
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-10-29 20:23:02 +00:00
|
|
|
* @return void
|
2015-09-04 20:45:55 +00:00
|
|
|
* @dataProvider URLProvider
|
|
|
|
*/
|
|
|
|
public function testGetJSON($url, $format)
|
|
|
|
{
|
2016-04-08 17:06:41 +00:00
|
|
|
$info = $this->download->getJSON($url, $format);
|
2015-09-04 20:45:55 +00:00
|
|
|
$this->assertObjectHasAttribute('webpage_url', $info);
|
|
|
|
$this->assertObjectHasAttribute('url', $info);
|
|
|
|
$this->assertObjectHasAttribute('ext', $info);
|
|
|
|
$this->assertObjectHasAttribute('title', $info);
|
|
|
|
$this->assertObjectHasAttribute('formats', $info);
|
|
|
|
$this->assertObjectHasAttribute('_filename', $info);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getJSON function errors
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-09-04 20:45:55 +00:00
|
|
|
* @param string $url URL
|
2015-10-29 17:40:22 +00:00
|
|
|
*
|
2015-10-29 20:23:02 +00:00
|
|
|
* @return void
|
2015-09-04 20:45:55 +00:00
|
|
|
* @expectedException Exception
|
2015-10-29 20:23:02 +00:00
|
|
|
* @dataProvider ErrorURLProvider
|
2015-08-29 19:46:57 +00:00
|
|
|
*/
|
2015-09-04 20:45:55 +00:00
|
|
|
public function testGetJSONError($url)
|
2015-08-29 19:46:57 +00:00
|
|
|
{
|
2016-04-08 17:06:41 +00:00
|
|
|
$videoURL = $this->download->getJSON($url);
|
2015-08-29 19:46:57 +00:00
|
|
|
}
|
2016-07-29 22:47:46 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getFilename function
|
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
2016-08-01 11:29:13 +00:00
|
|
|
* @param string $filename Filename
|
2016-07-29 22:47:46 +00:00
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @dataProvider urlProvider
|
|
|
|
*/
|
|
|
|
public function testGetFilename($url, $format, $filename)
|
|
|
|
{
|
|
|
|
$videoFilename = $this->download->getFilename($url, $format);
|
|
|
|
$this->assertEquals($videoFilename, $filename);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getFilename function errors
|
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @expectedException Exception
|
|
|
|
* @dataProvider ErrorUrlProvider
|
|
|
|
*/
|
|
|
|
public function testGetFilenameError($url)
|
|
|
|
{
|
|
|
|
$this->download->getFilename($url);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getAudioFilename function
|
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
2016-08-01 11:29:13 +00:00
|
|
|
* @param string $filename Filename
|
|
|
|
* @param string $domain Domain
|
|
|
|
* @param string $audioFilename MP3 audio file name
|
2016-07-29 22:47:46 +00:00
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @dataProvider urlProvider
|
|
|
|
*/
|
|
|
|
public function testGetAudioFilename($url, $format, $filename, $domain, $audioFilename)
|
|
|
|
{
|
|
|
|
$videoFilename = $this->download->getAudioFilename($url, $format);
|
|
|
|
$this->assertEquals($videoFilename, $audioFilename);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getAudioStream function
|
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @dataProvider urlProvider
|
|
|
|
*/
|
|
|
|
public function testGetAudioStream($url, $format)
|
|
|
|
{
|
2016-07-30 12:01:00 +00:00
|
|
|
$stream = $this->download->getAudioStream($url, $format);
|
|
|
|
$this->assertInternalType('resource', $stream);
|
|
|
|
$this->assertNotEmpty(fread($stream, 100));
|
2016-07-29 22:47:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2016-07-30 12:01:00 +00:00
|
|
|
* Test getAudioStream function without avconv
|
2016-07-29 22:47:46 +00:00
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @expectedException Exception
|
|
|
|
* @dataProvider urlProvider
|
|
|
|
*/
|
|
|
|
public function testGetAudioStreamAvconvError($url, $format)
|
|
|
|
{
|
|
|
|
$config = \Alltube\Config::getInstance();
|
|
|
|
$config->avconv = 'foobar';
|
|
|
|
$this->download->getAudioStream($url, $format);
|
|
|
|
}
|
2016-07-30 12:01:00 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Test getAudioStream function without curl or rtmpdump
|
|
|
|
*
|
|
|
|
* @param string $url URL
|
|
|
|
* @param string $format Format
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @expectedException Exception
|
|
|
|
* @dataProvider urlProvider
|
|
|
|
*/
|
|
|
|
public function testGetAudioStreamCurlError($url, $format)
|
|
|
|
{
|
|
|
|
$config = \Alltube\Config::getInstance();
|
|
|
|
$config->curl = 'foobar';
|
|
|
|
$config->rtmpdump = 'foobar';
|
|
|
|
$this->download->getAudioStream($url, $format);
|
|
|
|
}
|
2015-08-29 19:46:57 +00:00
|
|
|
}
|