| 
									
										
										
										
											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') | 
					
						
							|  |  |  |             ->with(array('-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') | 
					
						
							|  |  |  |             ->with(array('-help', '-loglevel', 'quiet')) | 
					
						
							|  |  |  |             ->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
										 |  |  | 
 | 
					
						
							|  |  |  |         return array( | 
					
						
							|  |  |  |             array(true, $data, '-print_format'), | 
					
						
							|  |  |  |             array(false, $data, '-another_print_format'), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @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)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |