in util/YamlTests.php [229:347]
public function build(): array
{
$numTest = 0;
$numFile = 0;
foreach ($this->tests as $testFile => $value) {
$namespace = $this->extractTestNamespace($testFile);
$testName = $this->extractTestName($testFile);
$yamlFileName = substr($testFile, strlen($this->testDir) + 1);
# Delete and create the output directory
$testDirName = sprintf("%s/%s", $this->testOutput, str_replace ('\\', '/', $namespace));
if (!is_dir($testDirName)) {
mkdir ($testDirName, 0777, true);
}
$functions = '';
$setup = '';
$teardown = '';
$alreadyAssignedNames = [];
$allSkipped = false;
foreach ($value as $test) {
if (!is_array($test)) {
continue;
}
foreach ($test as $name => $actions) {
switch ($name) {
case 'setup':
$setup = (string) new ActionTest($actions);
break;
case 'teardown':
$teardown = (string) new ActionTest($actions);
break;
default:
$functionName = $this->filterFunctionName(ucwords($name), $alreadyAssignedNames);
$alreadyAssignedNames[] = $functionName;
$skippedTest = sprintf("%s\\%s::%s", $namespace, $testName, $functionName);
$skippedAllTest = sprintf("%s\\%s::*", $namespace, $testName);
$skippedAllFiles = sprintf("%s\\*", $namespace);
$skip = strtolower(self::$testSuite) === 'free'
? self::SKIPPED_TEST_OSS
: self::SKIPPED_TEST_XPACK;
if (isset($skip[$skippedAllFiles]) || isset($skip[$skippedAllTest])) {
$allSkipped = true;
$functions .= self::render(
self::TEMPLATE_FUNCTION_SKIPPED,
[
':name' => $functionName,
':skipped_msg' => addslashes($skip[$skippedAllTest])
]
);
} elseif (isset($skip[$skippedTest])) {
$functions .= self::render(
self::TEMPLATE_FUNCTION_SKIPPED,
[
':name' => $functionName,
':skipped_msg' => addslashes($skip[$skippedTest])
]
);
} else {
$functions .= self::render(
self::TEMPLATE_FUNCTION_TEST,
[
':name' => $functionName,
':test' => (string) new ActionTest($actions)
]
);
}
$numTest++;
}
}
}
if ($allSkipped) {
$test = self::render(
self::TEMPLATE_UNIT_TEST_SKIPPED,
[
':namespace' => sprintf("Elastic\Elasticsearch\Tests\Yaml\%s\%s", self::$testSuite, $namespace),
':test-name' => $testName,
':tests' => $functions,
':yamlfile' => sprintf(self::ELASTICSEARCH_GIT_URL, self::$minorEsVersion, $yamlFileName),
':group' => strtolower(self::$testSuite)
]
);
} else {
$test = self::render(
strtolower(self::$testSuite) === 'free'
? self::TEMPLATE_UNIT_TEST_OSS
: self::TEMPLATE_UNIT_TEST_XPACK,
[
':namespace' => sprintf("Elastic\Elasticsearch\Tests\Yaml\%s\%s", self::$testSuite, $namespace),
':test-name' => $testName,
':tests' => $functions,
':setup' => $setup,
':teardown' => $teardown,
':yamlfile' => sprintf(self::ELASTICSEARCH_GIT_URL, self::$minorEsVersion, $yamlFileName),
':group' => strtolower(self::$testSuite)
]
);
}
// Fix ${var} string interpolation deprecated for PHP 8.2
// @see https://php.watch/versions/8.2/$%7Bvar%7D-string-interpolation-deprecated
$test = $this->fixStringInterpolationInCurlyBracket($test);
file_put_contents($testDirName . '/' . $testName . '.php', $test);
try {
eval(substr($test, 5)); // remove <?php header
} catch (ParseError $e) {
throw new Exception(sprintf(
"The PHP code generate in %s not valid: %s",
$testDirName . '/' . $testName . '.php',
$e->getMessage()
));
}
$numFile++;
}
return [
'tests' => $numTest,
'files' => $numFile
];
}