Skip to content

Commit cd38268

Browse files
Issue #2310415 by cilefen, ednawig, TravisCarden: Fixed run-tests.sh does not handle the error when invalid test groups/classes are specified.
1 parent b73583f commit cd38268

1 file changed

Lines changed: 54 additions & 6 deletions

File tree

‎scripts/run-tests.sh‎

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -419,9 +419,20 @@ function simpletest_script_get_test_list() {
419419
else {
420420
if ($args['class']) {
421421
// Check for valid class names.
422-
foreach ($args['test_names'] as $class_name) {
423-
if (in_array($class_name, $all_tests)) {
424-
$test_list[] = $class_name;
422+
$test_list = array();
423+
foreach ($args['test_names'] as $test_class) {
424+
if (class_exists($test_class)) {
425+
$test_list[] = $test_class;
426+
}
427+
else {
428+
$groups = simpletest_test_get_all();
429+
$all_classes = array();
430+
foreach ($groups as $group) {
431+
$all_classes = array_merge($all_classes, array_keys($group));
432+
}
433+
simpletest_script_print_error('Test class not found: ' . $test_class);
434+
simpletest_script_print_alternatives($test_class, $all_classes, 6);
435+
exit(1);
425436
}
426437
}
427438
}
@@ -444,9 +455,12 @@ function simpletest_script_get_test_list() {
444455
// Check for valid group names and get all valid classes in group.
445456
foreach ($args['test_names'] as $group_name) {
446457
if (isset($groups[$group_name])) {
447-
foreach ($groups[$group_name] as $class_name => $info) {
448-
$test_list[] = $class_name;
449-
}
458+
$test_list = array_merge($test_list, array_keys($groups[$group_name]));
459+
}
460+
else {
461+
simpletest_script_print_error('Test group not found: ' . $group_name);
462+
simpletest_script_print_alternatives($group_name, array_keys($groups));
463+
exit(1);
450464
}
451465
}
452466
}
@@ -674,3 +688,37 @@ function simpletest_script_color_code($status) {
674688
}
675689
return 0; // Default formatting.
676690
}
691+
692+
/**
693+
* Prints alternative test names.
694+
*
695+
* Searches the provided array of string values for close matches based on the
696+
* Levenshtein algorithm.
697+
*
698+
* @see http://php.net/manual/en/function.levenshtein.php
699+
*
700+
* @param string $string
701+
* A string to test.
702+
* @param array $array
703+
* A list of strings to search.
704+
* @param int $degree
705+
* The matching strictness. Higher values return fewer matches. A value of
706+
* 4 means that the function will return strings from $array if the candidate
707+
* string in $array would be identical to $string by changing 1/4 or fewer of
708+
* its characters.
709+
*/
710+
function simpletest_script_print_alternatives($string, $array, $degree = 4) {
711+
$alternatives = array();
712+
foreach ($array as $item) {
713+
$lev = levenshtein($string, $item);
714+
if ($lev <= strlen($item) / $degree || FALSE !== strpos($string, $item)) {
715+
$alternatives[] = $item;
716+
}
717+
}
718+
if (!empty($alternatives)) {
719+
simpletest_script_print(" Did you mean?\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
720+
foreach ($alternatives as $alternative) {
721+
simpletest_script_print(" - $alternative\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
722+
}
723+
}
724+
}

0 commit comments

Comments
 (0)