Files
iTop/tests/php-unit-tests/tools/run_class_by_class.php
2023-08-17 17:27:55 +02:00

64 lines
2.3 KiB
PHP

<?php
/**
* Usage: php run_class_by_class.php
*
* Execute the whole test suite (as declared in phpunit.xml.dist) one class at a time.
* This is to ensure that test class are still independant from each other, after a rework of ItopTestCase, for instance.
*/
const PHP_EXE = 'php';
const ITOP_ROOT = __DIR__.'/../../dev-itop';
const ITOP_PHPUNIT = ITOP_ROOT.'/tests/php-unit-tests';
const PHPUNIT_COMMAND = PHP_EXE.' '.ITOP_PHPUNIT.'/vendor/phpunit/phpunit/phpunit';
function ListTests($sUnitaryTestsDir = '')
{
$sConfigFile = ITOP_PHPUNIT."/phpunit.xml.dist";
$sCommand = PHPUNIT_COMMAND." --configuration $sConfigFile --list-tests $sUnitaryTestsDir";
exec($sCommand, $aOutput, $iResultCode);
//passthru($sCommand, $iResultCode);
if ($iResultCode != 0) { // or 1 in case of a failing test
echo "Failed executing command: $sCommand\n";
return [];
}
$aClasses = [];
foreach ($aOutput as $iLine => $sLine) {
// Example of formats to be filtered
//- DatamodelsXmlFilesTest::testAllItopXmlFilesCovered
//- Combodo\iTop\Test\UnitTest\Application\DashboardLayoutTest::testGetDashletCoordinates"OneColLayout-Cell0"
//if (preg_match('@^- ([a-z]+\\\\)*([a-z]+::[a-z0-9]+)@i', $sLine, $aMatches)) {
if (preg_match('@([a-z0-9]+)::test@i', $sLine, $aMatches)) {
$sTestClass = $aMatches[1];
$aClasses[$sTestClass] = $sTestClass;
}
}
return array_keys($aClasses);
}
function RunTests($sFilterRegExp, $sUnitaryTestsDir = '', $bPassthru = false)
{
$sRegExpShellArg = '"'.str_replace('"', '\\"', $sFilterRegExp).'"';
$sConfigFile = ITOP_PHPUNIT."/phpunit.xml.dist";
$sCommand = PHPUNIT_COMMAND." --configuration $sConfigFile --filter $sRegExpShellArg $sUnitaryTestsDir";
///echo "executing <<<$sCommand>>>\n";
if ($bPassthru) {
passthru($sCommand, $iResultCode);
}
else {
exec($sCommand, $aTrashedOutput, $iResultCode);
}
$bTestSuccess = ($iResultCode == 0); // or 1 in case of a failing test
return $bTestSuccess;
}
$sUnitaryTestsDir = '';
$aTestClasses = ListTests($sUnitaryTestsDir);
echo "Found ".count($aTestClasses)." to execute: ".implode(", ", $aTestClasses)."\n";
echo "Testing...\n";
foreach ($aTestClasses as $sTestClass) {
$fStarted = microtime(true);
$bSuccess = RunTests($sTestClass);
$sDuration = round(microtime(true) - $fStarted, 3);
echo "$sTestClass: ".($bSuccess ? 'Ok' : "FAILURE")." [$sDuration s]\n";
}