Add Silex FFMpegServiceProvider

This commit is contained in:
Romain Neutron 2012-09-03 14:52:53 +02:00
commit 20a3c21d82
3 changed files with 122 additions and 0 deletions

View file

@ -38,6 +38,10 @@ abstract class Binary implements AdapterInterface
*/
public function __construct($binary, Logger $logger)
{
if (!is_executable($binary)) {
throw new \FFMpeg\Exception\BinaryNotFoundException(sprintf('`%s` is not a valid binary', $binary));
}
$this->binary = $binary;
$this->logger = $logger;
}

View file

@ -0,0 +1,46 @@
<?php
namespace FFMpeg;
use FFMpeg\FFMpeg;
use FFMpeg\FFProbe;
use Monolog\Logger;
use Monolog\Handler\NullHandler;
use Silex\Application;
use Silex\ServiceProviderInterface;
class FFMpegServiceProvider implements ServiceProviderInterface
{
public function register(Application $app)
{
if ( ! isset($app['ffmpeg.logger'])) {
$app['ffmpeg.logger'] = $app->share(function(Application $app) {
$logger = new Logger('FFMpeg logger');
$logger->pushHandler(new NullHandler());
return $logger;
});
}
$app['ffmpeg.ffmpeg'] = $app->share(function(Application $app) {
if (isset($app['ffmpeg.ffmpeg.binary'])) {
return new FFMpeg($app['ffmpeg.ffmpeg.binary'], $app['ffmpeg.logger']);
} else {
return FFMpeg::load($app['ffmpeg.logger']);
}
});
$app['ffmpeg.ffprobe'] = $app->share(function(Application $app) {
if (isset($app['ffmpeg.ffprobe.binary'])) {
return new FFProbe($app['ffmpeg.ffprobe.binary'], $app['ffmpeg.logger']);
} else {
return FFProbe::load($app['ffmpeg.logger']);
}
});
}
public function boot(Application $app)
{
}
}

View file

@ -0,0 +1,72 @@
<?php
namespace FFMpeg;
use Monolog\Logger;
use Monolog\Handler\NullHandler;
use Silex\Application;
class FFMpegServiceProviderTest extends \PHPUnit_Framework_TestCase
{
private function getApplication()
{
return new Application();
}
/**
* @covers FFMpeg\FFMpegServiceProvider::register
*/
public function testRegister()
{
$app = $this->getApplication();
$app->register(new FFMpegServiceProvider());
$this->assertInstanceOf('\\FFMpeg\\FFProbe', $app['ffmpeg.ffprobe']);
$this->assertInstanceOf('\\FFMpeg\\FFMpeg', $app['ffmpeg.ffmpeg']);
}
/**
* @expectedException FFMpeg\Exception\BinaryNotFoundException
* @covers FFMpeg\FFMpegServiceProvider::register
*/
public function testRegisterFFMpegFails()
{
$app = $this->getApplication();
$app->register(new FFMpegServiceProvider(), array('ffmpeg.ffmpeg.binary' => '/path/to/no/ffmpeg'));
$app['ffmpeg.ffmpeg'];
}
/**
* @expectedException FFMpeg\Exception\BinaryNotFoundException
* @covers FFMpeg\FFMpegServiceProvider::register
*/
public function testRegisterFFProbeFails()
{
$app = $this->getApplication();
$app->register(new FFMpegServiceProvider(), array('ffmpeg.ffprobe.binary' => '/path/to/no/ffprobe'));
$app['ffmpeg.ffprobe'];
}
/**
* @covers FFMpeg\FFMpegServiceProvider::register
*/
public function testRegisterCustomLogger()
{
$app = $this->getApplication();
$app['logger'] = $app->share(function(Application $app){
$logger = new Logger('tests');
$logger->pushHandler(new NullHandler());
return $logger;
});
$app->register(new FFMpegServiceProvider());
$this->assertInstanceOf('\\FFMpeg\\FFProbe', $app['ffmpeg.ffprobe']);
$this->assertInstanceOf('\\FFMpeg\\FFMpeg', $app['ffmpeg.ffmpeg']);
}
}