first commit

This commit is contained in:
2024-11-10 21:08:49 +01:00
commit 0d932ce5ee
14455 changed files with 2567501 additions and 0 deletions

View File

@@ -0,0 +1,139 @@
<?php
namespace LocateBinaries\Tests;
use PHPUnit\Framework\TestCase;
use LocateBinaries\LocateBinaries;
use ExecWithFallback\ExecWithFallback;
class LocateBinariesTest extends TestCase
{
private function isWin()
{
return (stripos(PHP_OS, 'WIN') === 0);
}
public function testLocateInCommonSystemPaths()
{
$binary = ($this->isWin() ? 'where' : 'ls');
$binaries = LocateBinaries::locateInCommonSystemPaths($binary);
$this->assertGreaterThanOrEqual(1, count($binaries));
//echo "found: '" . implode("\n", $binaries) . "'";
/*
if ($this->isWin()) {
// peek into C:\Windows\System32
ExecWithFallback::exec('DIR C:\Windows\System32', $output, $returnCode);
echo "DIR: '" . implode("\r\n", $output) . "'";
}
*/
/*
echo 'OS: "' . PHP_OS . '"' . "\n\r";
ExecWithFallback::exec('echo $PATH', $output, $returnCode);
echo 'PATH: "' . implode("\n\r", $output) . '"';
*/
}
public function testLocateBinariesUsingWhereIs()
{
if ($this->isWin()) {
return;
}
// whereis uses a hardcoded list of paths to search. which uses your PATH.
// You can print the list of paths whereis searches by running the following: sysctl user.cs_path
//
// https://apple.stackexchange.com/questions/287467/use-whereis-can-not-find-the-file-in-the-mac
/* $output = [];
ExecWithFallback::exec('echo hi && echo hi 2>&1', $output, $returnCode);
echo "output (echo)" . print_r($output, true) . "\n";*/
/*
$output = [];
ExecWithFallback::exec('which -a bash 2>&1', $output, $returnCode);
echo "output (which):" . print_r($output, true) . "\n";
$output = [];
ExecWithFallback::exec('whereis bash 2>&1', $output, $returnCode);
echo "output (whereis):" . print_r($output, true) . "\n";
$output = [];
ExecWithFallback::exec('whereis aoeua 2>&1', $output, $returnCode);
echo "output (whereis no result):" . print_r($output, true) . "\n";
*/
// ExecWithFallback::exec('sysctl user.cs_path 2>&1', $output2, $returnCode2);
/*ExecWithFallback::exec('whereis -b which 2>&1', $output2, $returnCode2);
echo "returnCode:" . $returnCode2;
echo "output 2:" . implode("\n", $output2) . "\n";*/
$whereIsBinaries = LocateBinaries::locateInCommonSystemPaths('whereis');
if (count($whereIsBinaries) > 0) {
$binaries = MethodInvoker::invoke(new LocateBinaries, 'locateBinariesUsingWhereIs', ['bash']);
echo 'whereis bash: ' . print_r($binaries, true);
$this->assertEquals('array', gettype($binaries));
$this->assertGreaterThanOrEqual(1, count($binaries));
$this->assertFalse(strpos($binaries[0], ' ')); // make sure there is no space in result
$binaries = MethodInvoker::invoke(new LocateBinaries, 'locateBinariesUsingWhereIs', ['aoeuaoeu']);
$this->assertEquals('array', gettype($binaries));
$this->assertEquals(0, count($binaries));
}
}
public function testLocateBinariesUsingWhich()
{
if ($this->isWin()) {
return;
}
$whichBinaries = LocateBinaries::locateInCommonSystemPaths('which');
if (count($whichBinaries) > 0) {
$binaries = MethodInvoker::invoke(new LocateBinaries, 'locateBinariesUsingWhich', ['ls']);
$this->assertEquals('array', gettype($binaries));
$this->assertGreaterThanOrEqual(1, count($binaries));
}
}
public function testLocateBinariesUsingWhere()
{
if (!$this->isWin()) {
return;
}
$binaries = MethodInvoker::invoke(new LocateBinaries, 'locateBinariesUsingWhere', ['where']);
$this->assertEquals('array', gettype($binaries));
$this->assertGreaterThanOrEqual(1, count($binaries));
}
public function testLocateInstalledBinaries()
{
//$whichBinaries = LocateBinaries::locateInCommonSystemPaths('which');
//if (count($whichBinaries) > 0) {
$binary = ($this->isWin() ? 'where.exe' : 'ls');
$binaries = LocateBinaries::locateInstalledBinaries($binary);
$this->assertEquals('array', gettype($binaries));
$this->assertGreaterThanOrEqual(1, count($binaries));
//}
//echo "found:\n" . implode("\n", $binaries);
}
public function testLocateInstalledNoBinariesFound()
{
$binaries = LocateBinaries::locateInstalledBinaries('lsbananaflip');
$this->assertEquals('array', gettype($binaries));
$this->assertEquals(0, count($binaries));
}
/*
public function testLocateInstalledNoExecAvail()
{
// If no exec() is avail, we expect Exception... But how do we simulate that exec() is unavailable?
// $this->expectException(\Exception::class);
// how to test this?
}*/
}

View File

@@ -0,0 +1,21 @@
<?php
namespace LocateBinaries\Tests;
class MethodInvoker
{
public static function invoke($object, string $methodName, array $args=[]) {
$privateMethod = self::getMethod(get_class($object), $methodName);
return $privateMethod->invokeArgs($object, $args);
}
private static function getMethod(string $className, string $methodName) {
$class = new \ReflectionClass($className);
$method = $class->getMethod($methodName);
$method->setAccessible(true);
return $method;
}
}