Skip to content

Commit baef47e

Browse files
mvorisekcmb69
authored andcommitted
List skipped extensions explicitly
We also fix the summary alignment for 10k+ tests. Closes GH-8363.
1 parent 08e190d commit baef47e

File tree

1 file changed

+50
-45
lines changed

1 file changed

+50
-45
lines changed

run-tests.php

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
+----------------------------------------------------------------------+
2424
*/
2525

26-
/* $Id$ */
27-
2826
/* Temporary variables while this file is being refactored. */
2927
/** @var ?JUnit */
3028
$junit = null;
@@ -735,9 +733,9 @@ function main(): void
735733
} else {
736734
// Compile a list of all test files (*.phpt).
737735
$test_files = [];
738-
$exts_tested = count($exts_to_test);
739-
$exts_skipped = 0;
740-
$ignored_by_ext = 0;
736+
$exts_tested = $exts_to_test;
737+
$exts_skipped = [];
738+
$ignored_by_ext = [];
741739
sort($exts_to_test);
742740
$test_dirs = [];
743741
$optionals = ['Zend', 'tests', 'ext', 'sapi'];
@@ -748,11 +746,6 @@ function main(): void
748746
}
749747
}
750748

751-
// Convert extension names to lowercase
752-
foreach ($exts_to_test as $key => $val) {
753-
$exts_to_test[$key] = strtolower($val);
754-
}
755-
756749
foreach ($test_dirs as $dir) {
757750
find_files(TEST_PHP_SRCDIR . "/{$dir}", $dir == 'ext');
758751
}
@@ -880,20 +873,19 @@ function write_information(): void
880873
// load list of enabled and loadable extensions
881874
save_text($info_file, <<<'PHP'
882875
<?php
883-
echo str_replace("Zend OPcache", "opcache", implode(",", get_loaded_extensions()));
884-
$ext_dir = ini_get("extension_dir");
876+
$exts = get_loaded_extensions();
877+
$ext_dir = ini_get('extension_dir');
885878
foreach (scandir($ext_dir) as $file) {
886-
if (!preg_match('/^(?:php_)?([_a-zA-Z0-9]+)\.(?:so|dll)$/', $file, $matches)) {
887-
continue;
888-
}
889-
$ext = $matches[1];
890-
if (!extension_loaded($ext) && @dl($file)) {
891-
echo ",", $ext;
879+
if (preg_match('/^(?:php_)?([_a-zA-Z0-9]+)\.(?:so|dll)$/', $file, $matches)) {
880+
if (!extension_loaded($matches[1]) && @dl($matches[1])) {
881+
$exts[] = $matches[1];
882+
}
892883
}
893884
}
894-
?>
895-
PHP);
896-
$exts_to_test = explode(',', shell_exec("$php $pass_options $info_params $no_file_cache \"$info_file\""));
885+
echo implode(',', $exts);
886+
PHP);
887+
$extensionsNames = explode(',', shell_exec("$php $pass_options $info_params $no_file_cache \"$info_file\""));
888+
$exts_to_test = array_unique(remap_loaded_extensions_names($extensionsNames));
897889
// check for extensions that need special handling and regenerate
898890
$info_params_ex = [
899891
'session' => ['session.auto_start=0'],
@@ -1051,9 +1043,9 @@ function find_files(string $dir, bool $is_ext_dir = false, bool $ignore = false)
10511043

10521044
while (($name = readdir($o)) !== false) {
10531045
if (is_dir("{$dir}/{$name}") && !in_array($name, ['.', '..', '.svn'])) {
1054-
$skip_ext = ($is_ext_dir && !in_array(strtolower($name), $exts_to_test));
1046+
$skip_ext = ($is_ext_dir && !in_array($name, $exts_to_test));
10551047
if ($skip_ext) {
1056-
$exts_skipped++;
1048+
$exts_skipped[] = $name;
10571049
}
10581050
find_files("{$dir}/{$name}", false, $ignore || $skip_ext);
10591051
}
@@ -1068,10 +1060,10 @@ function find_files(string $dir, bool $is_ext_dir = false, bool $ignore = false)
10681060
// (but not those starting with a dot, which are hidden on
10691061
// many platforms)
10701062
if (substr($name, -5) == '.phpt' && substr($name, 0, 1) !== '.') {
1063+
$testfile = realpath("{$dir}/{$name}");
10711064
if ($ignore) {
1072-
$ignored_by_ext++;
1065+
$ignored_by_ext[] = $testfile;
10731066
} else {
1074-
$testfile = realpath("{$dir}/{$name}");
10751067
$test_files[] = $testfile;
10761068
}
10771069
}
@@ -2026,7 +2018,7 @@ function run_test(string $php, $file, array $env): string
20262018
$ext_prefix = IS_WINDOWS ? "php_" : "";
20272019
$missing = [];
20282020
foreach ($extensions as $req_ext) {
2029-
if (!in_array(strtolower($req_ext), $loaded)) {
2021+
if (!in_array($req_ext, $loaded, true)) {
20302022
if ($req_ext == 'opcache' || $req_ext == 'xdebug') {
20312023
$ext_file = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
20322024
$ini_settings['zend_extension'][] = $ext_file;
@@ -2785,6 +2777,22 @@ function run_test(string $php, $file, array $env): string
27852777
return $restype[0] . 'ED';
27862778
}
27872779

2780+
/**
2781+
* Map "Zend OPcache" to "opcache" and convert all ext names to lowercase.
2782+
*/
2783+
function remap_loaded_extensions_names(array $names): array
2784+
{
2785+
$exts = [];
2786+
foreach ($names as $name) {
2787+
if ($name === 'Core') {
2788+
continue;
2789+
}
2790+
$exts[] = ['Zend OPcache' => 'opcache'][$name] ?? strtolower($name);
2791+
}
2792+
2793+
return $exts;
2794+
}
2795+
27882796
/**
27892797
* @return bool|int
27902798
*/
@@ -3042,7 +3050,7 @@ function compute_summary(): void
30423050
global $n_total, $test_results, $ignored_by_ext, $sum_results, $percent_results;
30433051

30443052
$n_total = count($test_results);
3045-
$n_total += $ignored_by_ext;
3053+
$n_total += count($ignored_by_ext);
30463054
$sum_results = [
30473055
'PASSED' => 0,
30483056
'WARNED' => 0,
@@ -3058,7 +3066,7 @@ function compute_summary(): void
30583066
$sum_results[$v]++;
30593067
}
30603068

3061-
$sum_results['SKIPPED'] += $ignored_by_ext;
3069+
$sum_results['SKIPPED'] += count($ignored_by_ext);
30623070
$percent_results = [];
30633071

30643072
foreach ($sum_results as $v => $n) {
@@ -3090,43 +3098,43 @@ function get_summary(bool $show_ext_summary): string
30903098
=====================================================================
30913099
TEST RESULT SUMMARY
30923100
---------------------------------------------------------------------
3093-
Exts skipped : ' . sprintf('%4d', $exts_skipped) . '
3094-
Exts tested : ' . sprintf('%4d', $exts_tested) . '
3101+
Exts skipped : ' . sprintf('%5d', count($exts_skipped)) . ($exts_skipped ? ' (' . implode(', ', $exts_skipped) . ')' : '') . '
3102+
Exts tested : ' . sprintf('%5d', count($exts_tested)) . '
30953103
---------------------------------------------------------------------
30963104
';
30973105
}
30983106

30993107
$summary .= '
3100-
Number of tests : ' . sprintf('%4d', $n_total) . ' ' . sprintf('%8d', $x_total);
3108+
Number of tests : ' . sprintf('%5d', $n_total) . ' ' . sprintf('%8d', $x_total);
31013109

31023110
if ($sum_results['BORKED']) {
31033111
$summary .= '
3104-
Tests borked : ' . sprintf('%4d (%5.1f%%)', $sum_results['BORKED'], $percent_results['BORKED']) . ' --------';
3112+
Tests borked : ' . sprintf('%5d (%5.1f%%)', $sum_results['BORKED'], $percent_results['BORKED']) . ' --------';
31053113
}
31063114

31073115
$summary .= '
3108-
Tests skipped : ' . sprintf('%4d (%5.1f%%)', $sum_results['SKIPPED'], $percent_results['SKIPPED']) . ' --------
3109-
Tests warned : ' . sprintf('%4d (%5.1f%%)', $sum_results['WARNED'], $percent_results['WARNED']) . ' ' . sprintf('(%5.1f%%)', $x_warned) . '
3110-
Tests failed : ' . sprintf('%4d (%5.1f%%)', $sum_results['FAILED'], $percent_results['FAILED']) . ' ' . sprintf('(%5.1f%%)', $x_failed);
3116+
Tests skipped : ' . sprintf('%5d (%5.1f%%)', $sum_results['SKIPPED'], $percent_results['SKIPPED']) . ' --------
3117+
Tests warned : ' . sprintf('%5d (%5.1f%%)', $sum_results['WARNED'], $percent_results['WARNED']) . ' ' . sprintf('(%5.1f%%)', $x_warned) . '
3118+
Tests failed : ' . sprintf('%5d (%5.1f%%)', $sum_results['FAILED'], $percent_results['FAILED']) . ' ' . sprintf('(%5.1f%%)', $x_failed);
31113119

31123120
if ($sum_results['XFAILED']) {
31133121
$summary .= '
3114-
Expected fail : ' . sprintf('%4d (%5.1f%%)', $sum_results['XFAILED'], $percent_results['XFAILED']) . ' ' . sprintf('(%5.1f%%)', $x_xfailed);
3122+
Expected fail : ' . sprintf('%5d (%5.1f%%)', $sum_results['XFAILED'], $percent_results['XFAILED']) . ' ' . sprintf('(%5.1f%%)', $x_xfailed);
31153123
}
31163124

31173125
if ($valgrind) {
31183126
$summary .= '
3119-
Tests leaked : ' . sprintf('%4d (%5.1f%%)', $sum_results['LEAKED'], $percent_results['LEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_leaked);
3127+
Tests leaked : ' . sprintf('%5d (%5.1f%%)', $sum_results['LEAKED'], $percent_results['LEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_leaked);
31203128
if ($sum_results['XLEAKED']) {
31213129
$summary .= '
3122-
Expected leak : ' . sprintf('%4d (%5.1f%%)', $sum_results['XLEAKED'], $percent_results['XLEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_xleaked);
3130+
Expected leak : ' . sprintf('%5d (%5.1f%%)', $sum_results['XLEAKED'], $percent_results['XLEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_xleaked);
31233131
}
31243132
}
31253133

31263134
$summary .= '
3127-
Tests passed : ' . sprintf('%4d (%5.1f%%)', $sum_results['PASSED'], $percent_results['PASSED']) . ' ' . sprintf('(%5.1f%%)', $x_passed) . '
3135+
Tests passed : ' . sprintf('%5d (%5.1f%%)', $sum_results['PASSED'], $percent_results['PASSED']) . ' ' . sprintf('(%5.1f%%)', $x_passed) . '
31283136
---------------------------------------------------------------------
3129-
Time taken : ' . sprintf('%4d seconds', $end_time - $start_time) . '
3137+
Time taken : ' . sprintf('%5d seconds', $end_time - $start_time) . '
31303138
=====================================================================
31313139
';
31323140
$failed_test_summary = '';
@@ -3682,11 +3690,8 @@ public function getExtensions(string $php): array
36823690
}
36833691

36843692
$extDir = shell_exec("$php -d display_errors=0 -r \"echo ini_get('extension_dir');\"");
3685-
$extensions = explode(",", shell_exec("$php -d display_errors=0 -r \"echo implode(',', get_loaded_extensions());\""));
3686-
$extensions = array_map('strtolower', $extensions);
3687-
if (in_array('zend opcache', $extensions)) {
3688-
$extensions[] = 'opcache';
3689-
}
3693+
$extensionsNames = explode(",", shell_exec("$php -d display_errors=0 -r \"echo implode(',', get_loaded_extensions());\""));
3694+
$extensions = remap_loaded_extensions_names($extensionsNames);
36903695

36913696
$result = [$extDir, $extensions];
36923697
$this->extensions[$php] = $result;

0 commit comments

Comments
 (0)