diff --git a/src/FFMpeg/Binary.php b/src/FFMpeg/Binary.php index a85518e..00a6a11 100644 --- a/src/FFMpeg/Binary.php +++ b/src/FFMpeg/Binary.php @@ -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; } diff --git a/src/FFMpeg/FFMpegServiceProvider.php b/src/FFMpeg/FFMpegServiceProvider.php new file mode 100644 index 0000000..1eee5df --- /dev/null +++ b/src/FFMpeg/FFMpegServiceProvider.php @@ -0,0 +1,46 @@ +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) + { + } +} diff --git a/tests/src/FFMpeg/FFMpegServiceProviderTest.php b/tests/src/FFMpeg/FFMpegServiceProviderTest.php new file mode 100644 index 0000000..ed426bf --- /dev/null +++ b/tests/src/FFMpeg/FFMpegServiceProviderTest.php @@ -0,0 +1,72 @@ +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']); + } +} +