| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-03 20:53:12 +02:00
										 |  |  | use Alchemy\BinaryDriver\Exception\ExecutionFailureException; | 
					
						
							| 
									
										
										
										
											2020-02-13 00:39:31 +01:00
										 |  |  | use FFMpeg\Exception\RuntimeException; | 
					
						
							| 
									
										
										
										
											2016-03-06 23:38:04 +01:00
										 |  |  | use Tests\FFMpeg\Unit\TestCase; | 
					
						
							| 
									
										
										
										
											2013-06-25 10:03:20 +02:00
										 |  |  | use FFMpeg\FFProbe\OptionsTester; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OptionsTesterTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-07-03 20:53:12 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @expectedExceptionMessage Your FFProbe version is too old and does not support `-help` option, please upgrade. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function testHasOptionWithOldFFProbe() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-02-13 00:39:31 +01:00
										 |  |  |         $this->expectException('\FFMpeg\Exception\RuntimeException'); | 
					
						
							| 
									
										
										
										
											2013-07-03 20:53:12 +02:00
										 |  |  |         $cache = $this->getCacheMock(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeDriverMock(); | 
					
						
							|  |  |  |         $ffprobe->expects($this->once()) | 
					
						
							|  |  |  |             ->method('command') | 
					
						
							|  |  |  |             ->with(array('-help', '-loglevel', 'quiet')) | 
					
						
							| 
									
										
										
										
											2020-02-13 00:39:31 +01:00
										 |  |  |             ->will($this->throwException(new RuntimeException('Failed to execute'))); | 
					
						
							| 
									
										
										
										
											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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->never()) | 
					
						
							|  |  |  |             ->method('fetch'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->exactly(2)) | 
					
						
							|  |  |  |             ->method('contains') | 
					
						
							|  |  |  |             ->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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->once()) | 
					
						
							|  |  |  |             ->method('fetch') | 
					
						
							|  |  |  |             ->will($this->returnValue($data)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->at(0)) | 
					
						
							|  |  |  |             ->method('contains') | 
					
						
							|  |  |  |             ->will($this->returnValue(false)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->at(1)) | 
					
						
							|  |  |  |             ->method('contains') | 
					
						
							|  |  |  |             ->will($this->returnValue(true)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->once()) | 
					
						
							|  |  |  |             ->method('fetch') | 
					
						
							|  |  |  |             ->with('option-' . $optionName) | 
					
						
							|  |  |  |             ->will($this->returnValue($isPresent)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $cache->expects($this->once()) | 
					
						
							|  |  |  |             ->method('contains') | 
					
						
							|  |  |  |             ->with('option-' . $optionName) | 
					
						
							|  |  |  |             ->will($this->returnValue(true)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $ffprobe = $this->getFFProbeDriverMock(); | 
					
						
							|  |  |  |         $ffprobe->expects($this->never()) | 
					
						
							|  |  |  |             ->method('command'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $tester = new OptionsTester($ffprobe, $cache); | 
					
						
							|  |  |  |         $this->assertTrue($isPresent === $tester->has($optionName)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |