provider = new FFProbeProvider(); $this->provider->setMovieFile(self::$moviePath); } public function tearDown(): void { $this->provider = null; } public function testGetOutput() { $output = $this->provider->getOutput(); $this->assertEquals(1, preg_match('/FFprobe version/i', $output)); } public function testGetOutputFileDoesNotExist() { $this->expectException(\UnexpectedValueException::class); $this->expectExceptionCode(334561); $provider = new FFProbeProvider(); $provider->setMovieFile(uniqid('test', true)); $provider->getOutput(); } public function testGetOutputFromRemoteUrl() { $provider = new FFProbeProvider(); $provider->setMovieFile(self::$movieUrl); $output = $provider->getOutput(); $this->assertEquals(1, preg_match('/FFprobe version/i', $output)); } public function testGetOutputFromRemoteUrlDoesNotExist() { $this->expectException(\UnexpectedValueException::class); $this->expectExceptionCode(334561); $provider = new FFProbeProvider(); $provider->setMovieFile('https://github.com/char0n/test.mp4'); $provider->getOutput(); } public function testPersistentResourceSimulation() { Timer::start(); $provider = new FFProbeProvider('ffprobe', true); $provider->setMovieFile(self::$moviePath); $provider->getOutput(); $provider = clone $provider; $provider->getOutput(); $provider = clone $provider; $provider->getOutput(); $elapsed = Timer::stop(); Timer::start(); $provider = new FFProbeProvider('ffprobe', false); $provider->setMovieFile(self::$moviePath); $provider->getOutput(); $provider = clone $provider; $provider->getOutput(); $provider = clone $provider; $provider->getOutput(); $elapsed1 = Timer::stop(); $this->assertGreaterThan($elapsed, $elapsed1, 'Persistent resource simulation should be faster'); } public function testSerializeUnserialize() { $output = $this->provider->getOutput(); $serialized = serialize($this->provider); $this->provider = null; $this->provider = unserialize($serialized); $this->assertEquals( $output, $this->provider->getOutput(), 'Output from original and unserialized provider should be equal' ); } }