oldEnv = getenv('PATH'); // BinaryFinder always includes the "PATH" environment variable into the search path, // which we want to avoid in this test because they are not usually found in webserver // deployments. putenv('PATH=""'); $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->cache = new ArrayCache(); $this->cacheFactory->method('createLocal')->with('findBinaryPath')->willReturn($this->cache); } protected function tearDown(): void { putenv('PATH=' . $this->oldEnv); } public function testDefaultFindsCat() { $config = $this->createMock(IConfig::class); $config ->method('getSystemValue') ->with('binary_search_paths', $this->anything()) ->will($this->returnCallback(function ($key, $default) { return $default; })); $finder = new BinaryFinder($this->cacheFactory, $config); $this->assertEquals($finder->findBinaryPath('cat'), '/usr/bin/cat'); $this->assertEquals($this->cache->get('cat'), '/usr/bin/cat'); } public function testDefaultDoesNotFindCata() { $config = $this->createMock(IConfig::class); $config ->method('getSystemValue') ->with('binary_search_paths', $this->anything()) ->will($this->returnCallback(function ($key, $default) { return $default; })); $finder = new BinaryFinder($this->cacheFactory, $config); $this->assertFalse($finder->findBinaryPath('cata')); $this->assertFalse($this->cache->get('cata')); } public function testCustomPathFindsCat() { $config = $this->createMock(IConfig::class); $config ->method('getSystemValue') ->with('binary_search_paths', $this->anything()) ->willReturn(['/usr/bin']); $finder = new BinaryFinder($this->cacheFactory, $config); $this->assertEquals($finder->findBinaryPath('cat'), '/usr/bin/cat'); $this->assertEquals($this->cache->get('cat'), '/usr/bin/cat'); } public function testWrongCustomPathDoesNotFindCat() { $config = $this->createMock(IConfig::class); $config ->method('getSystemValue') ->with('binary_search_paths') ->willReturn(['/wrong']); $finder = new BinaryFinder($this->cacheFactory, $config); $this->assertFalse($finder->findBinaryPath('cat')); $this->assertFalse($this->cache->get('cat')); } }