in util/YamlTests.php [112:223]
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) && !is_dir($testDirName)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $testDirName));
}
$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 = self::SKIPPED_TEST;
if (isset($skip[$skippedAllFiles]) || isset($skip[$skippedAllTest])) {
$allSkipped = true;
$functions .= self::render(
self::TEMPLATE_FUNCTION_SKIPPED,
[
':name' => $functionName,
':skipped_msg' => $skip[$skippedAllTest]
]
);
} elseif (isset($skip[$skippedTest])) {
$functions .= self::render(
self::TEMPLATE_FUNCTION_SKIPPED,
[
':name' => $functionName,
':skipped_msg' => $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("OpenSearch\Tests\Yaml\%s\%s", self::$testSuite, $namespace),
':test-name' => $testName,
':tests' => $functions,
':yamlfile' => sprintf(self::OPENSEARCH_GIT_URL, self::$minorEsVersion, $yamlFileName),
':group' => strtolower(self::$testSuite)
]
);
} else {
$test = self::render(
self::TEMPLATE_UNIT_TEST,
[
':namespace' => sprintf("OpenSearch\Tests\Yaml\%s\%s", self::$testSuite, $namespace),
':test-name' => $testName,
':tests' => $functions,
':setup' => $setup,
':teardown' => $teardown,
':yamlfile' => sprintf(self::OPENSEARCH_GIT_URL, self::$minorEsVersion, $yamlFileName),
':group' => strtolower(self::$testSuite)
]
);
}
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
];
}