mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-67673 phpunit: Remove the rerun hint on failed test cases
That custom printer was using some hacks to be able to intercept configuration switches, reflection and other tricks to be able to print the: To re-run: vendor/bin/phpunit --verbose "core_setuplib_testcase" lib/tests/setuplib_test.php line on every failed/exceptional/skipped test. After some internal discussion it was agreed that the normal phpunit output: 1) core_setuplib_testcase::test_localcachedir Time is lower that allowed start value Failed asserting that 1601976686 is equal to 1601976687 or is greater than 1601976687. /var/www/html/lib/phpunit/classes/advanced_testcase.php:446 /var/www/html/lib/tests/setuplib_test.php:170 /var/www/html/lib/phpunit/classes/advanced_testcase.php:80 has already all the information at hand about how to rerun a test: - vendor/bin/phpunit lib/tests/setuplib_test.php - vendor/bin/phpunit --filter core_setuplib_testcase::test_localcachedir - vendor/bin/phpunit --filter ::test_localcachedir - vendor/bin/phpunit --testsuite componentname_testsuite - vendor/bin/phpunit --config <<compoenent directory>> - use --cache-result to get failed tests rerun with ease. - ... So better, let's use standard phpunit output and done. Also, note that, with the upgrade to phpunit 8.5, the printer was not working correctly any more, causing some switches, like --verbose ... to be ignored. Sure it could have been fixed but, as commented above, no real need for all that "parapheranlia" to print the rerun information.
This commit is contained in:
parent
447316a9f6
commit
cc1c4de8dc
@ -1,148 +0,0 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Helper test listener.
|
||||
*
|
||||
* @package core
|
||||
* @category phpunit
|
||||
* @copyright 2012 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Helper test listener that prints command necessary
|
||||
* for execution of failed test.
|
||||
*
|
||||
* @package core
|
||||
* @category phpunit
|
||||
* @copyright 2012 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class Hint_ResultPrinter extends PHPUnit\TextUI\ResultPrinter {
|
||||
public function __construct() {
|
||||
// ARRGH - PHPUnit does not give us commandline arguments or xml config, so let's hack hard!
|
||||
if (defined('DEBUG_BACKTRACE_PROVIDE_OBJECT')) {
|
||||
$backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT);
|
||||
if (isset($backtrace[2]['object']) and ($backtrace[2]['object'] instanceof PHPUnit\TextUI\Command)) {
|
||||
list($verbose, $colors, $debug) = Hacky_TextUI_Command_reader::get_settings_hackery($backtrace[2]['object']);
|
||||
parent::__construct(null, $verbose, $colors, $debug);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Fallback if something goes wrong.
|
||||
parent::__construct(null, false, self::COLOR_DEFAULT, false);
|
||||
}
|
||||
|
||||
protected function printDefectTrace(PHPUnit\Framework\TestFailure $defect): void {
|
||||
global $CFG;
|
||||
|
||||
parent::printDefectTrace($defect);
|
||||
|
||||
$failedTest = $defect->failedTest();
|
||||
$testName = get_class($failedTest);
|
||||
|
||||
$exception = $defect->thrownException();
|
||||
$trace = $exception->getTrace();
|
||||
|
||||
if (class_exists('ReflectionClass')) {
|
||||
$reflection = new ReflectionClass($testName);
|
||||
$file = $reflection->getFileName();
|
||||
|
||||
} else {
|
||||
$file = false;
|
||||
$dirroot = realpath($CFG->dirroot).DIRECTORY_SEPARATOR;
|
||||
$classpath = realpath("$CFG->dirroot/lib/phpunit/classes").DIRECTORY_SEPARATOR;
|
||||
foreach ($trace as $item) {
|
||||
if (strpos($item['file'], $dirroot) === 0 and strpos($item['file'], $classpath) !== 0) {
|
||||
if ($content = file_get_contents($item['file'])) {
|
||||
if (preg_match('/class\s+'.$testName.'\s+extends/', $content)) {
|
||||
$file = $item['file'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($file === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
$cwd = getcwd();
|
||||
if (strpos($file, $cwd) === 0) {
|
||||
$file = substr($file, strlen($cwd)+1);
|
||||
$file = testing_cli_fix_directory_separator($file);
|
||||
}
|
||||
|
||||
$pathprefix = testing_cli_argument_path('/');
|
||||
if ($pathprefix) {
|
||||
$pathprefix .= DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
// There is only vendor/bin/phpunit executable. There is no .cmd or .bat files.
|
||||
$executable = $pathprefix . 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'phpunit';
|
||||
$executable = testing_cli_fix_directory_separator($executable);
|
||||
|
||||
// Add server arguments to the rerun if passed.
|
||||
if (isset($_SERVER['argv'][0])) {
|
||||
if (preg_match('/phpunit(\.bat|\.cmd)?$/', $_SERVER['argv'][0])) {
|
||||
for($i=1;$i<count($_SERVER['argv']);$i++) {
|
||||
if (!isset($_SERVER['argv'][$i])) {
|
||||
break;
|
||||
}
|
||||
if (in_array($_SERVER['argv'][$i], array('--colors', '--verbose', '-v', '--debug'))) {
|
||||
$executable .= ' '.$_SERVER['argv'][$i];
|
||||
} else if (in_array($_SERVER['argv'][$i], array('-c', '--config'))) {
|
||||
$executable .= ' '.$_SERVER['argv'][$i] . ' ' . $_SERVER['argv'][++$i];
|
||||
} else if (strpos($_SERVER['argv'][$i], '--config') === 0) {
|
||||
$executable .= ' '.$_SERVER['argv'][$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->write("\nTo re-run:\n $executable \"$testName\" $file\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Class used in bloody hack that works around result printer constructor troubles.
|
||||
*
|
||||
* @package core
|
||||
* @category phpunit
|
||||
* @copyright 2012 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class Hacky_TextUI_Command_reader extends PHPUnit\TextUI\Command {
|
||||
public static function get_settings_hackery(PHPUnit\TextUI\Command $toread) {
|
||||
$arguments = $toread->arguments;
|
||||
$config = PHPUnit\Util\Configuration::getInstance($arguments['configuration'])->getPHPUnitConfiguration();
|
||||
|
||||
$verbose = isset($config['verbose']) ? $config['verbose'] : false;
|
||||
$verbose = isset($arguments['verbose']) ? $arguments['verbose'] : $verbose;
|
||||
|
||||
$colors = isset($config['colors']) ? $config['colors'] : Hint_ResultPrinter::COLOR_DEFAULT;
|
||||
$colors = isset($arguments['colors']) ? $arguments['colors'] : $colors;
|
||||
|
||||
$debug = isset($config['debug']) ? $config['debug'] : false;
|
||||
$debug = isset($arguments['debug']) ? $arguments['debug'] : $debug;
|
||||
|
||||
return array($verbose, $colors, $debug);
|
||||
}
|
||||
}
|
@ -35,7 +35,6 @@ require_once(__DIR__.'/classes/base_testcase.php');
|
||||
require_once(__DIR__.'/classes/basic_testcase.php');
|
||||
require_once(__DIR__.'/classes/database_driver_testcase.php');
|
||||
require_once(__DIR__.'/classes/advanced_testcase.php');
|
||||
require_once(__DIR__.'/classes/hint_resultprinter.php'); // Loaded here because phpunit.xml does not support relative links for printerFile.
|
||||
require_once(__DIR__.'/classes/constraint_object_is_equal_with_exceptions.php');
|
||||
require_once(__DIR__.'/../testing/classes/test_lock.php');
|
||||
require_once(__DIR__.'/../testing/classes/tests_finder.php');
|
||||
|
@ -16,7 +16,6 @@
|
||||
stopOnSkipped="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
beStrictAboutOutputDuringTests="true"
|
||||
printerClass="Hint_ResultPrinter"
|
||||
testSuiteLoaderClass="phpunit_autoloader"
|
||||
>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user