parent
88ea150d5a
commit
2432a06c1b
9 changed files with 116 additions and 29 deletions
20
.appveyor.yml
Normal file
20
.appveyor.yml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
install:
|
||||||
|
- sc config wuauserv start= auto
|
||||||
|
- net start wuauserv
|
||||||
|
- cinst php composer ffmpeg rtmpdump
|
||||||
|
- refreshenv
|
||||||
|
- copy C:\tools\php71\php.ini-development C:\tools\php71\php.ini
|
||||||
|
- echo extension=C:\tools\php71\ext\php_gmp.dll >> C:\tools\php71\php.ini
|
||||||
|
- echo extension=C:\tools\php71\ext\php_gettext.dll >> C:\tools\php71\php.ini
|
||||||
|
- echo extension=C:\tools\php71\ext\php_intl.dll >> C:\tools\php71\php.ini
|
||||||
|
- echo extension=C:\tools\php71\ext\php_openssl.dll >> C:\tools\php71\php.ini
|
||||||
|
- echo extension=C:\tools\php71\ext\php_mbstring.dll >> C:\tools\php71\php.ini
|
||||||
|
- composer install --no-dev
|
||||||
|
- composer global require phpunit/phpunit
|
||||||
|
- C:\Python36\python.exe -m pip install youtube-dl
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- phpunit
|
||||||
|
|
||||||
|
build: "off"
|
|
@ -61,10 +61,10 @@ class PlaylistArchiveStream extends TarArchive
|
||||||
/**
|
/**
|
||||||
* PlaylistArchiveStream constructor.
|
* PlaylistArchiveStream constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct(Config $config = null)
|
||||||
{
|
{
|
||||||
$this->client = new \GuzzleHttp\Client();
|
$this->client = new \GuzzleHttp\Client();
|
||||||
$this->download = new VideoDownload();
|
$this->download = new VideoDownload($config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -58,7 +58,7 @@ class VideoDownload
|
||||||
* */
|
* */
|
||||||
public function listExtractors()
|
public function listExtractors()
|
||||||
{
|
{
|
||||||
return explode(PHP_EOL, trim($this->getProp(null, null, 'list-extractors')));
|
return explode("\n", trim($this->getProp(null, null, 'list-extractors')));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -135,7 +135,7 @@ class VideoDownload
|
||||||
* */
|
* */
|
||||||
public function getURL($url, $format = null, $password = null)
|
public function getURL($url, $format = null, $password = null)
|
||||||
{
|
{
|
||||||
return explode(PHP_EOL, $this->getProp($url, $format, 'get-url', $password));
|
return explode("\n", $this->getProp($url, $format, 'get-url', $password));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,10 +7,10 @@ python: /usr/bin/python
|
||||||
|
|
||||||
# An array of parameters to pass to youtube-dl
|
# An array of parameters to pass to youtube-dl
|
||||||
params:
|
params:
|
||||||
- --no-playlist
|
|
||||||
- --no-warnings
|
- --no-warnings
|
||||||
- --playlist-end
|
- --ignore-errors
|
||||||
- 1
|
- --flat-playlist
|
||||||
|
- --restrict-filenames
|
||||||
|
|
||||||
# True to enable audio conversion
|
# True to enable audio conversion
|
||||||
convert: false
|
convert: false
|
||||||
|
|
12
config/config_test_windows.yml
Normal file
12
config/config_test_windows.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
convert: false
|
||||||
|
python: C:\Python36\python.exe
|
||||||
|
avconv: C:\ProgramData\chocolatey\bin\ffmpeg.exe
|
||||||
|
rtmpdump: C:\ProgramData\chocolatey\bin\rtmpdump
|
||||||
|
youtubedl: C:\Python36\Lib\site-packages\youtube_dl\__main__.py
|
||||||
|
params:
|
||||||
|
- --no-warnings
|
||||||
|
- --ignore-errors
|
||||||
|
- --flat-playlist
|
||||||
|
- --restrict-filenames
|
||||||
|
- --no-check-certificate
|
|
@ -83,7 +83,7 @@ class FrontController
|
||||||
} else {
|
} else {
|
||||||
$this->config = Config::getInstance();
|
$this->config = Config::getInstance();
|
||||||
}
|
}
|
||||||
$this->download = new VideoDownload();
|
$this->download = new VideoDownload($this->config);
|
||||||
$this->container = $container;
|
$this->container = $container;
|
||||||
$this->view = $this->container->get('view');
|
$this->view = $this->container->get('view');
|
||||||
$this->localeManager = $this->container->get('locale');
|
$this->localeManager = $this->container->get('locale');
|
||||||
|
|
|
@ -48,6 +48,13 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
private $controller;
|
private $controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config class instance.
|
||||||
|
*
|
||||||
|
* @var Config
|
||||||
|
*/
|
||||||
|
private $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare tests.
|
* Prepare tests.
|
||||||
*/
|
*/
|
||||||
|
@ -58,7 +65,15 @@ class FrontControllerTest extends TestCase
|
||||||
$this->response = new Response();
|
$this->response = new Response();
|
||||||
$this->container['view'] = ViewFactory::create($this->container, $this->request);
|
$this->container['view'] = ViewFactory::create($this->container, $this->request);
|
||||||
$this->container['locale'] = new LocaleManager();
|
$this->container['locale'] = new LocaleManager();
|
||||||
$this->controller = new FrontController($this->container, Config::getInstance('config/config_test.yml'));
|
|
||||||
|
if (PHP_OS == 'WINNT') {
|
||||||
|
$configFile = 'config_test_windows.yml';
|
||||||
|
} else {
|
||||||
|
$configFile = 'config_test.yml';
|
||||||
|
}
|
||||||
|
$this->config = Config::getInstance('config/'.$configFile);
|
||||||
|
$this->controller = new FrontController($this->container, $this->config);
|
||||||
|
|
||||||
$this->container['router']->map(['GET'], '/', [$this->controller, 'index'])
|
$this->container['router']->map(['GET'], '/', [$this->controller, 'index'])
|
||||||
->setName('index');
|
->setName('index');
|
||||||
$this->container['router']->map(['GET'], '/video', [$this->controller, 'video'])
|
$this->container['router']->map(['GET'], '/video', [$this->controller, 'video'])
|
||||||
|
@ -150,6 +165,18 @@ class FrontControllerTest extends TestCase
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
|
{
|
||||||
|
$controller = new FrontController($this->container, $this->config);
|
||||||
|
$this->assertInstanceOf(FrontController::class, $controller);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the constructor with a default config.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @requires OS Linux
|
||||||
|
*/
|
||||||
|
public function testConstructorWithDefaultConfig()
|
||||||
{
|
{
|
||||||
$controller = new FrontController($this->container);
|
$controller = new FrontController($this->container);
|
||||||
$this->assertInstanceOf(FrontController::class, $controller);
|
$this->assertInstanceOf(FrontController::class, $controller);
|
||||||
|
@ -162,7 +189,8 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithStream()
|
public function testConstructorWithStream()
|
||||||
{
|
{
|
||||||
$controller = new FrontController($this->container, new Config(['stream' => true]));
|
$this->config->stream = true;
|
||||||
|
$controller = new FrontController($this->container, $this->config);
|
||||||
$this->assertInstanceOf(FrontController::class, $controller);
|
$this->assertInstanceOf(FrontController::class, $controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,12 +330,12 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testVideoWithStream()
|
public function testVideoWithStream()
|
||||||
{
|
{
|
||||||
$config = new Config(['stream' => true]);
|
$this->config->stream = true;
|
||||||
$this->assertRequestIsOk('video', ['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU'], $config);
|
$this->assertRequestIsOk('video', ['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU'], $this->config);
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'video',
|
'video',
|
||||||
['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU', 'audio' => true],
|
['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU', 'audio' => true],
|
||||||
$config
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,10 +403,11 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testRedirectWithStream()
|
public function testRedirectWithStream()
|
||||||
{
|
{
|
||||||
|
$this->config->stream = true;
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'redirect',
|
'redirect',
|
||||||
['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU'],
|
['url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU'],
|
||||||
new Config(['stream' => true])
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,10 +418,11 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testRedirectWithM3uStream()
|
public function testRedirectWithM3uStream()
|
||||||
{
|
{
|
||||||
|
$this->config->stream = true;
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'redirect',
|
'redirect',
|
||||||
['url' => 'https://twitter.com/verge/status/813055465324056576/video/1'],
|
['url' => 'https://twitter.com/verge/status/813055465324056576/video/1'],
|
||||||
new Config(['stream' => true])
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,10 +433,11 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testRedirectWithRtmpStream()
|
public function testRedirectWithRtmpStream()
|
||||||
{
|
{
|
||||||
|
$this->config->stream = true;
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'redirect',
|
'redirect',
|
||||||
['url' => 'http://www.canalc2.tv/video/12163', 'format' => 'rtmp'],
|
['url' => 'http://www.canalc2.tv/video/12163', 'format' => 'rtmp'],
|
||||||
new Config(['stream' => true])
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,13 +448,14 @@ class FrontControllerTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testRedirectWithRemux()
|
public function testRedirectWithRemux()
|
||||||
{
|
{
|
||||||
|
$this->config->remux = true;
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'redirect',
|
'redirect',
|
||||||
[
|
[
|
||||||
'url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU',
|
'url' => 'https://www.youtube.com/watch?v=M7IpKCZ47pU',
|
||||||
'format' => 'bestvideo+bestaudio',
|
'format' => 'bestvideo+bestaudio',
|
||||||
],
|
],
|
||||||
new Config(['remux' => true])
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,13 +513,15 @@ class FrontControllerTest extends TestCase
|
||||||
* Test the redirect() function with a playlist stream.
|
* Test the redirect() function with a playlist stream.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
* @requires OS Linux
|
||||||
*/
|
*/
|
||||||
public function testRedirectWithPlaylist()
|
public function testRedirectWithPlaylist()
|
||||||
{
|
{
|
||||||
|
$this->config->stream = true;
|
||||||
$this->assertRequestIsOk(
|
$this->assertRequestIsOk(
|
||||||
'redirect',
|
'redirect',
|
||||||
['url' => 'https://www.youtube.com/playlist?list=PLgdySZU6KUXL_8Jq5aUkyNV7wCa-4wZsC'],
|
['url' => 'https://www.youtube.com/playlist?list=PLgdySZU6KUXL_8Jq5aUkyNV7wCa-4wZsC'],
|
||||||
new Config(['stream' => true])
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
namespace Alltube\Test;
|
namespace Alltube\Test;
|
||||||
|
|
||||||
|
use Alltube\Config;
|
||||||
use Alltube\PlaylistArchiveStream;
|
use Alltube\PlaylistArchiveStream;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
@ -25,7 +26,12 @@ class PlaylistArchiveStreamTest extends TestCase
|
||||||
*/
|
*/
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->stream = new PlaylistArchiveStream();
|
if (PHP_OS == 'WINNT') {
|
||||||
|
$configFile = 'config_test_windows.yml';
|
||||||
|
} else {
|
||||||
|
$configFile = 'config_test.yml';
|
||||||
|
}
|
||||||
|
$this->stream = new PlaylistArchiveStream(Config::getInstance('config/'.$configFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -21,12 +21,25 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
private $download;
|
private $download;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config class instance.
|
||||||
|
*
|
||||||
|
* @var Config
|
||||||
|
*/
|
||||||
|
private $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize properties used by test.
|
* Initialize properties used by test.
|
||||||
*/
|
*/
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->download = new VideoDownload(Config::getInstance('config/config_test.yml'));
|
if (PHP_OS == 'WINNT') {
|
||||||
|
$configFile = 'config_test_windows.yml';
|
||||||
|
} else {
|
||||||
|
$configFile = 'config_test.yml';
|
||||||
|
}
|
||||||
|
$this->config = Config::getInstance('config/'.$configFile);
|
||||||
|
$this->download = new VideoDownload($this->config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,9 +58,8 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithMissingYoutubedl()
|
public function testConstructorWithMissingYoutubedl()
|
||||||
{
|
{
|
||||||
new VideoDownload(
|
$this->config->youtubedl = 'foo';
|
||||||
new Config(['youtubedl' => 'foo'])
|
new VideoDownload($this->config);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,9 +70,8 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testConstructorWithMissingPython()
|
public function testConstructorWithMissingPython()
|
||||||
{
|
{
|
||||||
new VideoDownload(
|
$this->config->python = 'foo';
|
||||||
new Config(['python' => 'foo'])
|
new VideoDownload($this->config);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -364,7 +375,8 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testGetAudioStreamAvconvError($url, $format)
|
public function testGetAudioStreamAvconvError($url, $format)
|
||||||
{
|
{
|
||||||
$download = new VideoDownload(new Config(['avconv' => 'foobar']));
|
$this->config->avconv = 'foobar';
|
||||||
|
$download = new VideoDownload($this->config);
|
||||||
$download->getAudioStream($url, $format);
|
$download->getAudioStream($url, $format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +392,8 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testGetAudioStreamRtmpError($url, $format)
|
public function testGetAudioStreamRtmpError($url, $format)
|
||||||
{
|
{
|
||||||
$download = new VideoDownload(new Config(['rtmpdump' => 'foobar']));
|
$this->config->rtmpdump = 'foobar';
|
||||||
|
$download = new VideoDownload($this->config);
|
||||||
$download->getAudioStream($url, $format);
|
$download->getAudioStream($url, $format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,7 +490,8 @@ class VideoDownloadTest extends TestCase
|
||||||
*/
|
*/
|
||||||
public function testGetM3uStreamAvconvError($url, $format)
|
public function testGetM3uStreamAvconvError($url, $format)
|
||||||
{
|
{
|
||||||
$download = new VideoDownload(new Config(['avconv' => 'foobar']));
|
$this->config->avconv = 'foobar';
|
||||||
|
$download = new VideoDownload($this->config);
|
||||||
$video = $download->getJSON($url, $format);
|
$video = $download->getJSON($url, $format);
|
||||||
$download->getM3uStream($video);
|
$download->getM3uStream($video);
|
||||||
}
|
}
|
||||||
|
@ -486,6 +500,7 @@ class VideoDownloadTest extends TestCase
|
||||||
* Test getPlaylistArchiveStream function without avconv.
|
* Test getPlaylistArchiveStream function without avconv.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
|
* @requires OS Linux
|
||||||
*/
|
*/
|
||||||
public function testGetPlaylistArchiveStream()
|
public function testGetPlaylistArchiveStream()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue