2013-06-25 10:03:20 +02:00
|
|
|
<?php
|
|
|
|
|
|
2016-03-06 23:38:04 +01:00
|
|
|
namespace Tests\FFMpeg\Unit\FFProbe;
|
2013-06-25 10:03:20 +02:00
|
|
|
|
|
|
|
|
use FFMpeg\FFProbe\OptionsTester;
|
2021-12-20 10:46:53 +01:00
|
|
|
use Symfony\Component\Cache\CacheItem;
|
|
|
|
|
use Tests\FFMpeg\Unit\TestCase;
|
2013-06-25 10:03:20 +02:00
|
|
|
|
|
|
|
|
class OptionsTesterTest extends TestCase
|
|
|
|
|
{
|
2013-07-03 20:53:12 +02:00
|
|
|
public function testHasOptionWithOldFFProbe()
|
|
|
|
|
{
|
2020-02-19 21:52:13 +01:00
|
|
|
$this->expectException(
|
|
|
|
|
'\FFMpeg\Exception\RuntimeException',
|
|
|
|
|
'Your FFProbe version is too old and does not support `-help` option, please upgrade.'
|
|
|
|
|
);
|
2013-07-03 20:53:12 +02:00
|
|
|
$cache = $this->getCacheMock();
|
|
|
|
|
|
2020-02-19 21:52:13 +01:00
|
|
|
$executionFailerExceptionMock = $this->getMockBuilder('Alchemy\BinaryDriver\Exception\ExecutionFailureException')
|
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
|
->getMock();
|
|
|
|
|
|
2013-07-03 20:53:12 +02:00
|
|
|
$ffprobe = $this->getFFProbeDriverMock();
|
|
|
|
|
$ffprobe->expects($this->once())
|
|
|
|
|
->method('command')
|
2022-02-09 14:32:43 +01:00
|
|
|
->with(['-help', '-loglevel', 'quiet'])
|
2020-02-19 21:52:13 +01:00
|
|
|
->will($this->throwException($executionFailerExceptionMock));
|
2013-07-03 20:53:12 +02:00
|
|
|
|
|
|
|
|
$tester = new OptionsTester($ffprobe, $cache);
|
|
|
|
|
$tester->has('-print_format');
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-25 10:03:20 +02:00
|
|
|
/**
|
|
|
|
|
* @dataProvider provideOptions
|
|
|
|
|
*/
|
|
|
|
|
public function testHasOptionWithCacheEmpty($isPresent, $data, $optionName)
|
|
|
|
|
{
|
|
|
|
|
$cache = $this->getCacheMock();
|
|
|
|
|
|
2021-12-20 10:46:53 +01:00
|
|
|
$cache->expects($this->exactly(2))
|
|
|
|
|
->method('getItem')
|
|
|
|
|
->will($this->returnValue(new CacheItem));
|
2013-06-25 10:03:20 +02:00
|
|
|
|
|
|
|
|
$cache->expects($this->exactly(2))
|
2021-12-20 10:46:53 +01:00
|
|
|
->method('hasItem')
|
2013-06-25 10:03:20 +02:00
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
|
|
|
|
|
$cache->expects($this->exactly(2))
|
|
|
|
|
->method('save');
|
|
|
|
|
|
|
|
|
|
$ffprobe = $this->getFFProbeDriverMock();
|
|
|
|
|
$ffprobe->expects($this->once())
|
|
|
|
|
->method('command')
|
2022-02-09 14:32:43 +01:00
|
|
|
->with(['-help', '-loglevel', 'quiet'])
|
2013-06-25 10:03:20 +02:00
|
|
|
->will($this->returnValue($data));
|
|
|
|
|
|
|
|
|
|
$tester = new OptionsTester($ffprobe, $cache);
|
|
|
|
|
$this->assertTrue($isPresent === $tester->has($optionName));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function provideOptions()
|
|
|
|
|
{
|
2016-03-06 23:38:04 +01:00
|
|
|
$data = file_get_contents(__DIR__ . '/../../fixtures/ffprobe/help.raw');
|
2013-06-25 10:03:20 +02:00
|
|
|
|
2022-02-09 14:32:43 +01:00
|
|
|
return [
|
|
|
|
|
[true, $data, '-print_format'],
|
|
|
|
|
[false, $data, '-another_print_format'],
|
|
|
|
|
];
|
2013-06-25 10:03:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideOptions
|
|
|
|
|
*/
|
|
|
|
|
public function testHasOptionWithHelpCacheLoaded($isPresent, $data, $optionName)
|
|
|
|
|
{
|
|
|
|
|
$cache = $this->getCacheMock();
|
|
|
|
|
|
2021-12-20 10:46:53 +01:00
|
|
|
$cacheItem = new CacheItem;
|
|
|
|
|
$cacheItem->set($data);
|
2013-06-25 10:03:20 +02:00
|
|
|
|
2020-12-18 15:27:38 +01:00
|
|
|
$cache->expects($this->exactly(2))
|
2021-12-20 10:46:53 +01:00
|
|
|
->method('getItem')
|
2020-12-18 15:27:38 +01:00
|
|
|
->willReturnOnConsecutiveCalls(
|
2021-12-20 10:46:53 +01:00
|
|
|
$this->returnValue($cacheItem),
|
|
|
|
|
$this->returnValue(new CacheItem)
|
|
|
|
|
);
|
2013-06-25 10:03:20 +02:00
|
|
|
|
2021-12-20 10:46:53 +01:00
|
|
|
$cache->expects($this->exactly(2))
|
|
|
|
|
->method('hasItem')
|
|
|
|
|
->willReturnOnConsecutiveCalls(
|
|
|
|
|
$this->returnValue(false),
|
|
|
|
|
$this->returnValue(true)
|
|
|
|
|
);
|
2013-06-25 10:03:20 +02:00
|
|
|
$cache->expects($this->once())
|
|
|
|
|
->method('save');
|
|
|
|
|
|
|
|
|
|
$ffprobe = $this->getFFProbeDriverMock();
|
|
|
|
|
$ffprobe->expects($this->never())
|
|
|
|
|
->method('command');
|
|
|
|
|
|
|
|
|
|
$tester = new OptionsTester($ffprobe, $cache);
|
|
|
|
|
$this->assertTrue($isPresent === $tester->has($optionName));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideOptions
|
|
|
|
|
*/
|
|
|
|
|
public function testHasOptionWithCacheFullyLoaded($isPresent, $data, $optionName)
|
|
|
|
|
{
|
|
|
|
|
$cache = $this->getCacheMock();
|
|
|
|
|
|
2021-12-20 10:46:53 +01:00
|
|
|
$cacheItem = new CacheItem();
|
|
|
|
|
$cacheItem->set($isPresent);
|
|
|
|
|
|
2013-06-25 10:03:20 +02:00
|
|
|
$cache->expects($this->once())
|
2021-12-20 10:46:53 +01:00
|
|
|
->method('getItem')
|
|
|
|
|
->with(md5('option-' . $optionName))
|
|
|
|
|
->will($this->returnValue($cacheItem));
|
2013-06-25 10:03:20 +02:00
|
|
|
|
|
|
|
|
$cache->expects($this->once())
|
2021-12-20 10:46:53 +01:00
|
|
|
->method('hasItem')
|
|
|
|
|
->with(md5('option-' . $optionName))
|
2013-06-25 10:03:20 +02:00
|
|
|
->will($this->returnValue(true));
|
|
|
|
|
|
|
|
|
|
$ffprobe = $this->getFFProbeDriverMock();
|
|
|
|
|
$ffprobe->expects($this->never())
|
|
|
|
|
->method('command');
|
|
|
|
|
|
|
|
|
|
$tester = new OptionsTester($ffprobe, $cache);
|
|
|
|
|
$this->assertTrue($isPresent === $tester->has($optionName));
|
|
|
|
|
}
|
|
|
|
|
}
|