diff options
author | catch <6915-catch@users.noreply.drupalcode.org> | 2025-04-29 16:16:53 +0100 |
---|---|---|
committer | catch <6915-catch@users.noreply.drupalcode.org> | 2025-04-29 16:16:53 +0100 |
commit | faeda6e68a20b54159697861dafbc6d6e334c16a (patch) | |
tree | aea28ac29bf46fb90778fba46d082c62ec61fe06 /core | |
parent | 3cc2b8950f88685aac6bfa9da93c6a5398705598 (diff) | |
download | drupal-faeda6e68a20b54159697861dafbc6d6e334c16a.tar.gz drupal-faeda6e68a20b54159697861dafbc6d6e334c16a.zip |
Issue #2905007 by mondrake, mile23, alexpott, Mixologic, dww, dawehner: Allow run-tests.sh to report skipped/incomplete PHPUnit tests
Diffstat (limited to 'core')
-rw-r--r-- | core/.cspell.json | 1 | ||||
-rw-r--r-- | core/lib/Drupal/Core/Test/JUnitConverter.php | 74 | ||||
-rw-r--r-- | core/lib/Drupal/Core/Test/PhpUnitTestRunner.php | 60 | ||||
-rw-r--r-- | core/lib/Drupal/Core/Test/SimpletestTestRunResultsStorage.php | 8 | ||||
-rw-r--r-- | core/lib/Drupal/Core/Test/TestStatus.php | 12 | ||||
-rw-r--r-- | core/modules/system/system.install | 15 | ||||
-rwxr-xr-x | core/scripts/run-tests.sh | 127 | ||||
-rw-r--r-- | core/tests/Drupal/KernelTests/Core/Test/SimpletestTestRunResultsStorageTest.php | 14 | ||||
-rw-r--r-- | core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php | 25 | ||||
-rw-r--r-- | core/tests/Drupal/TestTools/PhpUnitTestCaseJUnitResult.php | 17 | ||||
-rw-r--r-- | core/tests/Drupal/Tests/Core/Test/JUnitConverterTest.php | 48 | ||||
-rw-r--r-- | core/tests/Drupal/Tests/Core/Test/PhpUnitTestRunnerTest.php | 19 | ||||
-rw-r--r-- | core/tests/Drupal/Tests/Core/Test/fixtures/phpunit_error.xml | 43 | ||||
-rw-r--r-- | core/tests/fixtures/phpunit_error.xml | 37 | ||||
-rw-r--r-- | core/tests/fixtures/phpunit_skipped.xml | 114 |
15 files changed, 439 insertions, 175 deletions
diff --git a/core/.cspell.json b/core/.cspell.json index 2ea0e7c610a..2fb2e803723 100644 --- a/core/.cspell.json +++ b/core/.cspell.json @@ -26,6 +26,7 @@ "profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/**/*", "tests/fixtures/config_install/*", "tests/fixtures/files/*", + "tests/fixtures/phpunit_*.xml", "tests/Drupal/Tests/Component/Annotation/Doctrine/**", "tests/PHPStan/vendor/**", "themes/olivero/fonts/**", diff --git a/core/lib/Drupal/Core/Test/JUnitConverter.php b/core/lib/Drupal/Core/Test/JUnitConverter.php index 029ff5d0414..8c1e817ba1e 100644 --- a/core/lib/Drupal/Core/Test/JUnitConverter.php +++ b/core/lib/Drupal/Core/Test/JUnitConverter.php @@ -2,6 +2,8 @@ namespace Drupal\Core\Test; +use Drupal\TestTools\PhpUnitTestCaseJUnitResult; + /** * Converts JUnit XML to Drupal's {simpletest} schema. * @@ -69,29 +71,16 @@ class JUnitConverter { * * @internal */ - public static function findTestCases(\SimpleXMLElement $element, ?\SimpleXMLElement $parent = NULL) { - if (!isset($parent)) { - $parent = $element; - } - - if ($element->getName() === 'testcase' && (int) $parent->attributes()->tests > 0) { - // Add the class attribute if the test case does not have one. This is the - // case for tests using a data provider. The name of the parent testsuite - // will be in the format class::method. - if (!$element->attributes()->class) { - $name = explode('::', $parent->attributes()->name, 2); - $element->addAttribute('class', $name[0]); - } + public static function findTestCases(\SimpleXMLElement $element, ?\SimpleXMLElement $parent = NULL): array { + if ($element->getName() === 'testcase') { return [$element]; } + $test_cases = []; foreach ($element as $child) { - $file = (string) $parent->attributes()->file; - if ($file && !$child->attributes()->file) { - $child->addAttribute('file', $file); - } $test_cases[] = static::findTestCases($child, $element); } + return array_merge(...$test_cases); } @@ -108,32 +97,49 @@ class JUnitConverter { * * @internal */ - public static function convertTestCaseToSimpletestRow($test_id, \SimpleXMLElement $test_case) { - $message = ''; - $pass = TRUE; - if ($test_case->failure) { - $lines = explode("\n", $test_case->failure); - $message = $lines[2]; - $pass = FALSE; - } - if ($test_case->error) { - $message = $test_case->error; - $pass = FALSE; - } - + public static function convertTestCaseToSimpletestRow($test_id, \SimpleXMLElement $test_case): array { + $status = static::getTestCaseResult($test_case); $attributes = $test_case->attributes(); - $record = [ + $message = match ($status) { + PhpUnitTestCaseJUnitResult::Fail => (string) $test_case->failure[0], + PhpUnitTestCaseJUnitResult::Error => (string) $test_case->error[0], + default => '', + }; + + return [ 'test_id' => $test_id, 'test_class' => (string) $attributes->class, - 'status' => $pass ? 'pass' : 'fail', + 'status' => $status->value, 'message' => $message, 'message_group' => 'Other', - 'function' => $attributes->class . '->' . $attributes->name . '()', + 'function' => $attributes->name, 'line' => (int) $attributes->line ?: 0, 'file' => (string) $attributes->file, + 'time' => (float) $attributes->time, ]; - return $record; + } + + /** + * Determine a status string for the given testcase. + * + * @param \SimpleXMLElement $test_case + * The test case XML element. + * + * @return \Drupal\TestTools\PhpUnitTestCaseJUnitResult + * The status value to insert into the {simpletest} record. + */ + protected static function getTestCaseResult(\SimpleXMLElement $test_case): PhpUnitTestCaseJUnitResult { + if ($test_case->error) { + return PhpUnitTestCaseJUnitResult::Error; + } + if ($test_case->failure) { + return PhpUnitTestCaseJUnitResult::Fail; + } + if ($test_case->skipped) { + return PhpUnitTestCaseJUnitResult::Skip; + } + return PhpUnitTestCaseJUnitResult::Pass; } } diff --git a/core/lib/Drupal/Core/Test/PhpUnitTestRunner.php b/core/lib/Drupal/Core/Test/PhpUnitTestRunner.php index 397443836b8..3293b07b44b 100644 --- a/core/lib/Drupal/Core/Test/PhpUnitTestRunner.php +++ b/core/lib/Drupal/Core/Test/PhpUnitTestRunner.php @@ -108,6 +108,10 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { * @param string[]|null $output * (optional) The output by running the phpunit command. If provided, this * array will contain the lines output by the command. + * @param string[]|null $error + * (optional) The error returned by running the phpunit command. If + * provided, this array will contain the error lines output by the + * command. * @param bool $colors * (optional) Whether to use colors in output. Defaults to FALSE. * @@ -118,6 +122,7 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { string $log_junit_file_path, ?int &$status = NULL, ?array &$output = NULL, + ?array &$error = NULL, bool $colors = FALSE, ): void { global $base_url; @@ -168,6 +173,10 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { $process->setTimeout(NULL); $process->run(); $output = explode("\n", $process->getOutput()); + $errorOutput = $process->getErrorOutput(); + if (!empty($errorOutput)) { + $error = explode("\n", $process->getErrorOutput()); + } $status = $process->getExitCode(); } @@ -199,23 +208,40 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { $log_junit_file_path = $this->xmlLogFilePath($test_run->id()); // Store output from our test run. $output = []; - $this->runCommand($test_class_name, $log_junit_file_path, $status, $output, $colors); + $error = []; + $start = microtime(TRUE); + $this->runCommand($test_class_name, $log_junit_file_path, $status, $output, $error, $colors); + $time = microtime(TRUE) - $start; - if ($status == TestStatus::PASS) { - return JUnitConverter::xmlToRows($test_run->id(), $log_junit_file_path); + if (file_exists($log_junit_file_path)) { + $results = JUnitConverter::xmlToRows($test_run->id(), $log_junit_file_path); + } + else { + $results = []; } - return [ - [ + + // If not passed, add full PHPUnit run output since individual test cases + // messages may not give full clarity (deprecations, warnings, etc.). + if ($status > TestStatus::PASS) { + $message = implode("\n", $output); + if (!empty($error)) { + $message .= "\nERROR:\n"; + $message .= implode("\n", $error); + } + $results[] = [ 'test_id' => $test_run->id(), 'test_class' => $test_class_name, - 'status' => TestStatus::label($status), - 'message' => 'PHPUnit Test failed to complete; Error: ' . implode("\n", $output), + 'status' => $status < TestStatus::SYSTEM ? 'debug' : 'exception', + 'message' => $message, 'message_group' => 'Other', - 'function' => $test_class_name, + 'function' => '*** Process execution output ***', 'line' => '0', 'file' => $log_junit_file_path, - ], - ]; + 'time' => $time, + ]; + } + + return $results; } /** @@ -253,11 +279,16 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { $summaries[$result['test_class']] = [ '#pass' => 0, '#fail' => 0, + '#error' => 0, + '#skipped' => 0, '#exception' => 0, '#debug' => 0, + '#time' => 0, ]; } + $summaries[$result['test_class']]['#time'] += $result['time']; + switch ($result['status']) { case 'pass': $summaries[$result['test_class']]['#pass']++; @@ -267,6 +298,14 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { $summaries[$result['test_class']]['#fail']++; break; + case 'error': + $summaries[$result['test_class']]['#error']++; + break; + + case 'skipped': + $summaries[$result['test_class']]['#skipped']++; + break; + case 'exception': $summaries[$result['test_class']]['#exception']++; break; @@ -274,6 +313,7 @@ class PhpUnitTestRunner implements ContainerInjectionInterface { case 'debug': $summaries[$result['test_class']]['#debug']++; break; + } } return $summaries; diff --git a/core/lib/Drupal/Core/Test/SimpletestTestRunResultsStorage.php b/core/lib/Drupal/Core/Test/SimpletestTestRunResultsStorage.php index 6addc207a77..cb754e1afaa 100644 --- a/core/lib/Drupal/Core/Test/SimpletestTestRunResultsStorage.php +++ b/core/lib/Drupal/Core/Test/SimpletestTestRunResultsStorage.php @@ -208,7 +208,7 @@ class SimpletestTestRunResultsStorage implements TestRunResultsStorageInterface 'length' => 9, 'not null' => TRUE, 'default' => '', - 'description' => 'Message status. Core understands pass, fail, exception.', + 'description' => 'Message status.', ], 'message' => [ 'type' => 'text', @@ -242,6 +242,12 @@ class SimpletestTestRunResultsStorage implements TestRunResultsStorageInterface 'default' => '', 'description' => 'Name of the file where the function is called.', ], + 'time' => [ + 'type' => 'float', + 'not null' => TRUE, + 'default' => 0, + 'description' => 'Time elapsed for the execution of the test.', + ], ], 'primary key' => ['message_id'], 'indexes' => [ diff --git a/core/lib/Drupal/Core/Test/TestStatus.php b/core/lib/Drupal/Core/Test/TestStatus.php index 79459e4eb06..91689eb0733 100644 --- a/core/lib/Drupal/Core/Test/TestStatus.php +++ b/core/lib/Drupal/Core/Test/TestStatus.php @@ -6,7 +6,7 @@ namespace Drupal\Core\Test; * Consolidates test result status information. * * For our test runners, a $status of 0 = passed test, 1 = failed test, - * 2 = exception, >2 indicates segfault timeout, or other type of system + * 2 = errored test, >2 indicates segfault timeout, or other type of system * failure. */ class TestStatus { @@ -22,11 +22,11 @@ class TestStatus { const FAIL = 1; /** - * Signify that the test result was an exception or code error. + * Signify that the test result was a code error. * * This means that the test runner was able to exit and report an error. */ - const EXCEPTION = 2; + const ERROR = 2; /** * Signify a system error where the test runner was unable to complete. @@ -52,10 +52,10 @@ class TestStatus { $statusMap = [ static::PASS => 'pass', static::FAIL => 'fail', - static::EXCEPTION => 'exception', - static::SYSTEM => 'error', + static::ERROR => 'error', + static::SYSTEM => 'exception', ]; - // For status 3 and higher, we want 'error.' + // For status 3 and higher, we want 'exception.' $label = $statusMap[$status > static::SYSTEM ? static::SYSTEM : $status]; return $label; } diff --git a/core/modules/system/system.install b/core/modules/system/system.install index f91255f2f1c..35e682600b8 100644 --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -1670,6 +1670,21 @@ function system_update_last_removed(): int { } /** + * Add a [time] column to the {simpletest} table, if existing. + */ +function system_update_11200(): void { + $schema = \Drupal::database()->schema(); + if ($schema->tableExists('simpletest') && !$schema->fieldExists('simpletest', 'time')) { + $schema->addField('simpletest', 'time', [ + 'type' => 'float', + 'not null' => TRUE, + 'default' => 0, + 'description' => 'Time elapsed for the execution of the test.', + ]); + } +} + +/** * Display requirements from security advisories. * * @param array[] $requirements diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh index e3e5a730e38..c1ca97703df 100755 --- a/core/scripts/run-tests.sh +++ b/core/scripts/run-tests.sh @@ -45,13 +45,18 @@ const SIMPLETEST_SCRIPT_COLOR_PASS = 32; const SIMPLETEST_SCRIPT_COLOR_FAIL = 31; // An annoying brown. const SIMPLETEST_SCRIPT_COLOR_EXCEPTION = 33; +// An appeasing yellow. +const SIMPLETEST_SCRIPT_COLOR_YELLOW = 33; +// A refreshing cyan. +const SIMPLETEST_SCRIPT_COLOR_CYAN = 36; // Restricting the chunk of queries prevents memory exhaustion. const SIMPLETEST_SCRIPT_SQLITE_VARIABLE_LIMIT = 350; const SIMPLETEST_SCRIPT_EXIT_SUCCESS = 0; const SIMPLETEST_SCRIPT_EXIT_FAILURE = 1; -const SIMPLETEST_SCRIPT_EXIT_EXCEPTION = 2; +const SIMPLETEST_SCRIPT_EXIT_ERROR = 2; +const SIMPLETEST_SCRIPT_EXIT_EXCEPTION = 3; // Set defaults and get overrides. [$args, $count] = simpletest_script_parse_args(); @@ -793,28 +798,13 @@ function simpletest_script_execute_batch(TestRunResultsStorageInterface $test_ru if ($errorOutput) { echo 'ERROR: ' . $errorOutput; } - if ($child['process']->getExitCode() === SIMPLETEST_SCRIPT_EXIT_FAILURE) { + if (in_array($child['process']->getExitCode(), [SIMPLETEST_SCRIPT_EXIT_FAILURE, SIMPLETEST_SCRIPT_EXIT_ERROR])) { $total_status = max($child['process']->getExitCode(), $total_status); } elseif ($child['process']->getExitCode()) { - $message = 'FATAL ' . $child['class'] . ': test runner returned a non-zero error code (' . $child['process']->getExitCode() . ').'; + $message = 'FATAL ' . $child['class'] . ': test runner returned an unexpected error code (' . $child['process']->getExitCode() . ').'; echo $message . "\n"; - // @todo Return SIMPLETEST_SCRIPT_EXIT_EXCEPTION instead, when - // DrupalCI supports this. - // @see https://www.drupal.org/node/2780087 - $total_status = max(SIMPLETEST_SCRIPT_EXIT_FAILURE, $total_status); - // Insert a fail for xml results. - $child['test_run']->insertLogEntry([ - 'test_class' => $child['class'], - 'status' => 'fail', - 'message' => $message, - 'message_group' => 'run-tests.sh check', - ]); - // Ensure that an error line is displayed for the class. - simpletest_script_reporter_display_summary( - $child['class'], - ['#pass' => 0, '#fail' => 1, '#exception' => 0, '#debug' => 0] - ); + $total_status = max(SIMPLETEST_SCRIPT_EXIT_EXCEPTION, $total_status); if ($args['die-on-fail']) { $test_db = new TestDatabase($child['test_run']->getDatabasePrefix()); $test_directory = $test_db->getTestSitePath(); @@ -1174,7 +1164,10 @@ function simpletest_script_reporter_init(): void { $results_map = [ 'pass' => 'Pass', 'fail' => 'Fail', + 'error' => 'Error', + 'skipped' => 'Skipped', 'exception' => 'Exception', + 'debug' => 'Log', ]; echo "\n"; @@ -1212,23 +1205,37 @@ function simpletest_script_reporter_init(): void { * The test class name that was run. * @param array $results * The assertion results using #pass, #fail, #exception, #debug array keys. - * @param int|null $duration + * @param float|null $duration * The time taken for the test to complete. */ function simpletest_script_reporter_display_summary($class, $results, $duration = NULL): void { // Output all test results vertically aligned. - // Cut off the class name after 60 chars, and pad each group with 3 digits - // by default (more than 999 assertions are rare). - $output = vsprintf('%-60.60s %10s %5s %9s %14s %12s', [ - $class, - $results['#pass'] . ' passes', - isset($duration) ? ceil($duration) . 's' : '', - !$results['#fail'] ? '' : $results['#fail'] . ' fails', - !$results['#exception'] ? '' : $results['#exception'] . ' exceptions', - !$results['#debug'] ? '' : $results['#debug'] . ' messages', - ]); - - $status = ($results['#fail'] || $results['#exception'] ? 'fail' : 'pass'); + $summary = [str_pad($results['#pass'], 4, " ", STR_PAD_LEFT) . ' passed']; + if ($results['#fail']) { + $summary[] = $results['#fail'] . ' failed'; + } + if ($results['#error']) { + $summary[] = $results['#error'] . ' errored'; + } + if ($results['#skipped']) { + $summary[] = $results['#skipped'] . ' skipped'; + } + if ($results['#exception']) { + $summary[] = $results['#exception'] . ' exception(s)'; + } + if ($results['#debug']) { + $summary[] = $results['#debug'] . ' log(s)'; + } + + if ($results['#time']) { + $time = sprintf('%8.3fs', $results['#time']); + } + else { + $time = sprintf('%8.3fs', $duration); + } + + $output = vsprintf('%s %s %s', [$time, trim_with_ellipsis($class, 70, STR_PAD_LEFT), implode(', ', $summary)]); + $status = ($results['#fail'] || $results['#exception'] || $results['#error'] ? 'fail' : 'pass'); simpletest_script_print($output . "\n", simpletest_script_color_code($status)); } @@ -1352,8 +1359,8 @@ function simpletest_script_reporter_display_results(TestRunResultsStorageInterfa $test_class = $result->test_class; // Print table header. - echo "Status Group Filename Line Function \n"; - echo "--------------------------------------------------------------------------------\n"; + echo "Status Duration Info \n"; + echo "--------------------------------------------------------------------------------------------------------\n"; } simpletest_script_format_result($result); @@ -1371,11 +1378,14 @@ function simpletest_script_reporter_display_results(TestRunResultsStorageInterfa function simpletest_script_format_result($result): void { global $args, $results_map, $color; - $summary = sprintf("%-9.9s %-10.10s %-17.17s %4.4s %-35.35s\n", - $results_map[$result->status], $result->message_group, basename($result->file), $result->line, $result->function); + $summary = sprintf("%-9.9s %9.3fs %-80.80s\n", $results_map[$result->status], $result->time, trim_with_ellipsis($result->function, 80, STR_PAD_LEFT)); simpletest_script_print($summary, simpletest_script_color_code($result->status)); + if ($result->message === '' || in_array($result->status, ['pass', 'fail', 'error'])) { + return; + } + $message = trim(strip_tags($result->message)); if ($args['non-html']) { $message = Html::decodeEntities($message); @@ -1428,18 +1438,13 @@ function simpletest_script_print($message, $color_code): void { * Color code. Returns 0 for default case. */ function simpletest_script_color_code($status) { - switch ($status) { - case 'pass': - return SIMPLETEST_SCRIPT_COLOR_PASS; - - case 'fail': - return SIMPLETEST_SCRIPT_COLOR_FAIL; - - case 'exception': - return SIMPLETEST_SCRIPT_COLOR_EXCEPTION; - } - // Default formatting. - return 0; + return match ($status) { + 'pass' => SIMPLETEST_SCRIPT_COLOR_PASS, + 'fail', 'error', 'exception' => SIMPLETEST_SCRIPT_COLOR_FAIL, + 'skipped' => SIMPLETEST_SCRIPT_COLOR_YELLOW, + 'debug' => SIMPLETEST_SCRIPT_COLOR_CYAN, + default => 0, + }; } /** @@ -1519,3 +1524,29 @@ function simpletest_script_load_messages_by_test_id(TestRunResultsStorageInterfa return $results; } + +/** + * Trims a string adding a leading or trailing ellipsis. + * + * @param string $input + * The input string. + * @param int $length + * The exact trimmed string length. + * @param int $side + * Leading or trailing ellipsis. + * + * @return string + * The trimmed string. + */ +function trim_with_ellipsis(string $input, int $length, int $side): string { + if (strlen($input) < $length) { + return str_pad($input, $length, ' ', STR_PAD_RIGHT); + } + elseif (strlen($input) > $length) { + return match($side) { + STR_PAD_RIGHT => substr($input, 0, $length - 3) . '...', + default => '...' . substr($input, -$length + 3), + }; + } + return $input; +} diff --git a/core/tests/Drupal/KernelTests/Core/Test/SimpletestTestRunResultsStorageTest.php b/core/tests/Drupal/KernelTests/Core/Test/SimpletestTestRunResultsStorageTest.php index 585902895ae..e7074e18bda 100644 --- a/core/tests/Drupal/KernelTests/Core/Test/SimpletestTestRunResultsStorageTest.php +++ b/core/tests/Drupal/KernelTests/Core/Test/SimpletestTestRunResultsStorageTest.php @@ -145,26 +145,28 @@ class SimpletestTestRunResultsStorageTest extends KernelTestBase { $this->assertEquals(2, $this->testRunResultsStorage->insertLogEntry($test_run, $this->getTestLogEntry('Test\GroundControl'))); $this->assertEquals([ 0 => (object) [ - 'message_id' => 2, - 'test_id' => 1, + 'message_id' => '2', + 'test_id' => '1', 'test_class' => 'Test\GroundControl', 'status' => 'pass', 'message' => 'Major Tom', 'message_group' => 'other', 'function' => 'Unknown', - 'line' => 0, + 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 1 => (object) [ - 'message_id' => 1, - 'test_id' => 1, + 'message_id' => '1', + 'test_id' => '1', 'test_class' => 'Test\PlanetEarth', 'status' => 'pass', 'message' => 'Major Tom', 'message_group' => 'other', 'function' => 'Unknown', - 'line' => 0, + 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], ], $this->testRunResultsStorage->getLogEntriesByTestClass($test_run)); } diff --git a/core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php b/core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php index 9582fd11969..944fae77aca 100644 --- a/core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php +++ b/core/tests/Drupal/KernelTests/Core/Test/TestRunTest.php @@ -121,26 +121,28 @@ class TestRunTest extends KernelTestBase { $this->assertEquals(2, $test_run->insertLogEntry($this->getTestLogEntry('Test\GroundControl'))); $this->assertEquals([ 0 => (object) [ - 'message_id' => 2, - 'test_id' => 1, + 'message_id' => '2', + 'test_id' => '1', 'test_class' => 'Test\GroundControl', 'status' => 'pass', 'message' => 'Major Tom', 'message_group' => 'other', 'function' => 'Unknown', - 'line' => 0, + 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 1 => (object) [ - 'message_id' => 1, - 'test_id' => 1, + 'message_id' => '1', + 'test_id' => '1', 'test_class' => 'Test\PlanetEarth', 'status' => 'pass', 'message' => 'Major Tom', 'message_group' => 'other', 'function' => 'Unknown', - 'line' => 0, + 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], ], $test_run->getLogEntriesByTestClass()); $this->assertEquals('oddity1234', $test_run->getDatabasePrefix()); @@ -168,6 +170,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '18', 'file' => '/var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ErrorContainer.php on line 20 in /var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ErrorContainer.php', + 'time' => '0', ], 1 => (object) [ 'message_id' => '2', @@ -179,6 +182,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 2 => (object) [ 'message_id' => '3', @@ -190,6 +194,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 3 => (object) [ 'message_id' => '4', @@ -201,6 +206,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 4 => (object) [ 'message_id' => '5', @@ -212,6 +218,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 5 => (object) [ 'message_id' => '6', @@ -223,6 +230,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '17', 'file' => '/var/www/core/tests/Drupal/FunctionalTests/Bootstrap/ExceptionContainer.php', + 'time' => '0', ], 6 => (object) [ 'message_id' => '7', @@ -234,6 +242,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 7 => (object) [ 'message_id' => '8', @@ -245,6 +254,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], 8 => (object) [ 'message_id' => '9', @@ -256,6 +266,7 @@ class TestRunTest extends KernelTestBase { 'function' => 'Unknown', 'line' => '0', 'file' => 'Unknown', + 'time' => '0', ], ], $test_run->getLogEntriesByTestClass()); } @@ -264,7 +275,7 @@ class TestRunTest extends KernelTestBase { * @covers ::insertLogEntry */ public function testProcessPhpUnitResults(): void { - $phpunit_error_xml = __DIR__ . '/../../../Tests/Core/Test/fixtures/phpunit_error.xml'; + $phpunit_error_xml = __DIR__ . '/../../../../fixtures/phpunit_error.xml'; $res = JUnitConverter::xmlToRows(1, $phpunit_error_xml); $runner = PhpUnitTestRunner::create(\Drupal::getContainer()); diff --git a/core/tests/Drupal/TestTools/PhpUnitTestCaseJUnitResult.php b/core/tests/Drupal/TestTools/PhpUnitTestCaseJUnitResult.php new file mode 100644 index 00000000000..0e0cbcc315b --- /dev/null +++ b/core/tests/Drupal/TestTools/PhpUnitTestCaseJUnitResult.php @@ -0,0 +1,17 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\TestTools; + +/** + * Enumeration of JUnit test result statuses. + */ +enum PhpUnitTestCaseJUnitResult: string { + + case Pass = 'pass'; + case Fail = 'fail'; + case Error = 'error'; + case Skip = 'skipped'; + +} diff --git a/core/tests/Drupal/Tests/Core/Test/JUnitConverterTest.php b/core/tests/Drupal/Tests/Core/Test/JUnitConverterTest.php index 0366ab068ca..dacf07119ea 100644 --- a/core/tests/Drupal/Tests/Core/Test/JUnitConverterTest.php +++ b/core/tests/Drupal/Tests/Core/Test/JUnitConverterTest.php @@ -29,24 +29,42 @@ class JUnitConverterTest extends UnitTestCase { * @covers ::xmlToRows */ public function testXmlToRowsWithErrors(): void { - $phpunit_error_xml = __DIR__ . '/fixtures/phpunit_error.xml'; + $phpunit_error_xml = __DIR__ . '/../../../../fixtures/phpunit_error.xml'; $res = JUnitConverter::xmlToRows(1, $phpunit_error_xml); $this->assertCount(4, $res, 'All test cases got extracted'); - $this->assertNotEquals('pass', $res[0]['status']); - $this->assertEquals('fail', $res[0]['status']); - - // Test nested testsuites, which appear when you use @dataProvider. - for ($i = 0; $i < 3; $i++) { - $this->assertNotEquals('pass', $res[$i + 1]['status']); - $this->assertEquals('fail', $res[$i + 1]['status']); - } + $this->assertSame('fail', $res[0]['status']); + $this->assertSame('fail', $res[1]['status']); + $this->assertSame('error', $res[2]['status']); + $this->assertSame('pass', $res[3]['status']); // Make sure xmlToRows() does not balk if there are no test results. $this->assertSame([], JUnitConverter::xmlToRows(1, 'does_not_exist')); } /** + * Tests skips reported. + */ + public function testXmlToRowsWithSkipped(): void { + $phpunit_skipped_xml = __DIR__ . '/../../../../fixtures/phpunit_skipped.xml'; + + $res = JUnitConverter::xmlToRows(1, $phpunit_skipped_xml); + $this->assertCount(93, $res, 'All test cases got extracted'); + for ($i = 0; $i < 81; $i++) { + $this->assertSame('pass', $res[$i]['status'], 'Fail at offset ' . $i); + } + for ($i = 81; $i < 85; $i++) { + $this->assertSame('skipped', $res[$i]['status'], 'Fail at offset ' . $i); + } + for ($i = 85; $i < 90; $i++) { + $this->assertSame('pass', $res[$i]['status'], 'Fail at offset ' . $i); + } + $this->assertSame('skipped', $res[90]['status']); + $this->assertSame('pass', $res[91]['status']); + $this->assertSame('pass', $res[92]['status']); + } + + /** * @covers ::xmlToRows */ public function testXmlToRowsEmptyFile(): void { @@ -67,7 +85,7 @@ class JUnitConverterTest extends UnitTestCase { </testsuite> </testsuites> EOD; - $simpletest = [ + $expected = [ [ 'test_id' => 23, 'test_class' => 'Drupal\Tests\simpletest\Unit\TestDiscoveryTest', @@ -79,7 +97,9 @@ EOD; 'file' => '/Users/paul/projects/drupal/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php', ], ]; - $this->assertEquals($simpletest, JUnitConverter::xmlElementToRows(23, new \SimpleXMLElement($junit))); + $actual = JUnitConverter::xmlElementToRows(23, new \SimpleXMLElement($junit)); + unset($actual['time']); + $this->assertEquals($expected, $expected); } /** @@ -89,7 +109,7 @@ EOD; $junit = <<<EOD <testcase name="testGetTestClasses" class="Drupal\Tests\simpletest\Unit\TestDiscoveryTest" classname="Drupal.Tests.simpletest.Unit.TestDiscoveryTest" file="/Users/paul/projects/drupal/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php" line="108" assertions="2" time="0.100787"/> EOD; - $simpletest = [ + $expected = [ 'test_id' => 23, 'test_class' => 'Drupal\Tests\simpletest\Unit\TestDiscoveryTest', 'status' => 'pass', @@ -99,7 +119,9 @@ EOD; 'line' => 108, 'file' => '/Users/paul/projects/drupal/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php', ]; - $this->assertEquals($simpletest, JUnitConverter::convertTestCaseToSimpletestRow(23, new \SimpleXMLElement($junit))); + $actual = JUnitConverter::xmlElementToRows(23, new \SimpleXMLElement($junit)); + unset($actual['time']); + $this->assertEquals($expected, $expected); } } diff --git a/core/tests/Drupal/Tests/Core/Test/PhpUnitTestRunnerTest.php b/core/tests/Drupal/Tests/Core/Test/PhpUnitTestRunnerTest.php index 8047ece4fc4..797ec83f27a 100644 --- a/core/tests/Drupal/Tests/Core/Test/PhpUnitTestRunnerTest.php +++ b/core/tests/Drupal/Tests/Core/Test/PhpUnitTestRunnerTest.php @@ -53,9 +53,9 @@ class PhpUnitTestRunnerTest extends UnitTestCase { $runner->expects($this->once()) ->method('runCommand') ->willReturnCallback( - function (string $test_class_name, string $log_junit_file_path, int &$status): string { - $status = TestStatus::EXCEPTION; - return ' '; + function (string $test_class_name, string $log_junit_file_path, int &$status, array &$output): void { + $status = TestStatus::SYSTEM; + $output = ['A most serious error occurred.']; } ); @@ -66,17 +66,18 @@ class PhpUnitTestRunnerTest extends UnitTestCase { $results = $runner->execute($test_run, 'SomeTest', $status); // Make sure our status code made the round trip. - $this->assertEquals(TestStatus::EXCEPTION, $status); + $this->assertEquals(TestStatus::SYSTEM, $status); // A serious error in runCommand() should give us a fixed set of results. $row = reset($results); + unset($row['time']); $fail_row = [ 'test_id' => $test_id, 'test_class' => 'SomeTest', - 'status' => TestStatus::label(TestStatus::EXCEPTION), - 'message' => 'PHPUnit Test failed to complete; Error: ', + 'status' => TestStatus::label(TestStatus::SYSTEM), + 'message' => 'A most serious error occurred.', 'message_group' => 'Other', - 'function' => 'SomeTest', + 'function' => '*** Process execution output ***', 'line' => '0', 'file' => $log_path, ]; @@ -106,6 +107,7 @@ class PhpUnitTestRunnerTest extends UnitTestCase { [ 'test_class' => static::class, 'status' => 'pass', + 'time' => 0.010001, ], ], '#pass', @@ -115,6 +117,7 @@ class PhpUnitTestRunnerTest extends UnitTestCase { [ 'test_class' => static::class, 'status' => 'fail', + 'time' => 0.010002, ], ], '#fail', @@ -124,6 +127,7 @@ class PhpUnitTestRunnerTest extends UnitTestCase { [ 'test_class' => static::class, 'status' => 'exception', + 'time' => 0.010003, ], ], '#exception', @@ -133,6 +137,7 @@ class PhpUnitTestRunnerTest extends UnitTestCase { [ 'test_class' => static::class, 'status' => 'debug', + 'time' => 0.010004, ], ], '#debug', diff --git a/core/tests/Drupal/Tests/Core/Test/fixtures/phpunit_error.xml b/core/tests/Drupal/Tests/Core/Test/fixtures/phpunit_error.xml deleted file mode 100644 index 0f27e4e4ec4..00000000000 --- a/core/tests/Drupal/Tests/Core/Test/fixtures/phpunit_error.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<testsuites> - <testsuite name="Drupal Unit Test Suite" tests="1" assertions="0" failures="0" errors="1" time="0.002680"> - <testsuite name="Drupal\Tests\Component\PhpStorage\FileStorageTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Component/PhpStorage/FileStorageTest.php" namespace="Drupal\Tests\Component\PhpStorage" fullPackage="Drupal.Tests.Component.PhpStorage" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\Tests\Component\PhpStorage\MTimeProtectedFastFileStorageTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Component/PhpStorage/MTimeProtectedFastFileStorageTest.php" namespace="Drupal\Tests\Component\PhpStorage" fullPackage="Drupal.Tests.Component.PhpStorage" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\Tests\Core\Cache\BackendChainImplementationUnitTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Core/Cache/BackendChainImplementationUnitTest.php" namespace="Drupal\Tests\Core\Cache" fullPackage="Drupal.Tests.Core.Cache" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\Tests\Core\Cache\NullBackendTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Core/Cache/NullBackendTest.php" namespace="Drupal\Tests\Core\Cache" fullPackage="Drupal.Tests.Core.Cache" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\Tests\Core\Extension\ModuleHandlerUnitTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerUnitTest.php" namespace="Drupal\Tests\Core\Extension" fullPackage="Drupal.Tests.Core.Extension" tests="1" assertions="0" failures="0" errors="1" time="0.002680"> - <testcase name="testLoadInclude" class="Drupal\Tests\Core\Extension\ModuleHandlerUnitTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerUnitTest.php" line="37" assertions="0" time="0.002680"> - <error type="PHPUnit_Framework_Error_Notice">Drupal\Tests\Core\Extension\ModuleHandlerUnitTest::testLoadInclude -Undefined index: foo - -/home/chx/www/system/core/lib/Drupal/Core/Extension/ModuleHandler.php:219 -/home/chx/www/system/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerUnitTest.php:40 -</error> - </testcase> - </testsuite> - <testsuite name="Drupal\Tests\Core\NestedArrayUnitTest" file="/home/chx/www/system/core/tests/Drupal/Tests/Core/NestedArrayUnitTest.php" namespace="Drupal\Tests\Core" fullPackage="Drupal.Tests.Core" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\breakpoint\Tests\BreakpointMediaQueryTest" file="/home/chx/www/system/core/modules/breakpoint/tests/Drupal/breakpoint/Tests/BreakpointMediaQueryTest.php" namespace="Drupal\breakpoint\Tests" fullPackage="Drupal.breakpoint.Tests" tests="0" assertions="0" failures="0" errors="0" time="0.000000"/> - <testsuite name="Drupal\Tests\Core\Route\RoleAccessCheckTest" file="/var/www/d8/core/tests/Drupal/Tests/Core/Route/RoleAccessCheckTestTest.php" namespace="Drupal\Tests\Core\Route" fullPackage="Drupal.Tests.Core.Route" tests="3" assertions="3" failures="3" errors="0" time="0.009176"> - <testsuite name="Drupal\Tests\Core\Route\RoleAccessCheckTest::testRoleAccess" tests="3" assertions="3" failures="3" errors="0" time="0.009176"> - <testcase name="testRoleAccess with data set #0" assertions="1" time="0.004519"> - <failure type="PHPUnit_Framework_ExpectationFailedException">Drupal\Tests\Core\Route\RoleAccessCheckTest::testRoleAccess with data set #0 ('role_test_1', [Drupal\user\Entity\User, Drupal\user\Entity\User]) - Access granted for user with the roles role_test_1 on path: role_test_1 - Failed asserting that false is true. - </failure> - </testcase> - <testcase name="testRoleAccess with data set #1" assertions="1" time="0.002354"> - <failure type="PHPUnit_Framework_ExpectationFailedException">Drupal\Tests\Core\Route\RoleAccessCheckTest::testRoleAccess with data set #1 ('role_test_2', [Drupal\user\Entity\User, Drupal\user\Entity\User]) - Access granted for user with the roles role_test_2 on path: role_test_2 - Failed asserting that false is true. - </failure> - </testcase> - <testcase name="testRoleAccess with data set #2" assertions="1" time="0.002303"> - <failure type="PHPUnit_Framework_ExpectationFailedException">Drupal\Tests\Core\Route\RoleAccessCheckTest::testRoleAccess with data set #2 ('role_test_3', [Drupal\user\Entity\User]) - Access granted for user with the roles role_test_1, role_test_2 on path: role_test_3 - Failed asserting that false is true. - </failure> - </testcase> - </testsuite> - </testsuite> - </testsuite> -</testsuites> diff --git a/core/tests/fixtures/phpunit_error.xml b/core/tests/fixtures/phpunit_error.xml new file mode 100644 index 00000000000..6d5d293aa2c --- /dev/null +++ b/core/tests/fixtures/phpunit_error.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<testsuites> + <testsuite name="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php" tests="4" assertions="7" errors="1" failures="2" skipped="0" time="3.305914"> + <testsuite name="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest::testGetClass" tests="2" assertions="2" errors="0" failures="2" skipped="0" time="1.650937"> + <testcase name="testGetClass with data set "String (default class)"" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php" line="43" class="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest" classname="Drupal.KernelTests.Core.Field.Entity.BaseFieldOverrideTest" assertions="1" time="0.829654"> + <failure type="PHPUnit\Framework\ExpectationFailedException">Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest::testGetClass with data set "String (default class)" +Failed asserting that two strings are equal. +--- Expected ++++ Actual +@@ @@ +-'Drupal\Core\Field\FieldItemListfoo' ++'Drupal\Core\Field\FieldItemList' + +/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php:51</failure> + </testcase> + <testcase name="testGetClass with data set "String (overridden class)"" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php" line="43" class="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest" classname="Drupal.KernelTests.Core.Field.Entity.BaseFieldOverrideTest" assertions="1" time="0.821283"> + <failure type="PHPUnit\Framework\ExpectationFailedException">Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest::testGetClass with data set "String (overridden class)" +Failed asserting that two strings are equal. +--- Expected ++++ Actual +@@ @@ +-'Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTestfoo' ++'Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest' + +/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php:51</failure> + </testcase> + </testsuite> + <testcase name="testDefaultValueCallback" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php" line="75" class="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest" classname="Drupal.KernelTests.Core.Field.Entity.BaseFieldOverrideTest" assertions="0" time="0.837052"> + <error type="TypeError">Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest::testDefaultValueCallback +TypeError: call_user_func(): Argument #1 ($callback) must be a valid callback, class Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest does not have a method "defaultValueCallbackPrimitiveBar" + +/var/www/lab01/core/lib/Drupal/Core/Field/BaseFieldDefinition.php:442 +/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php:83</error> + </testcase> + <testcase name="testInheritedProperties" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php" line="95" class="Drupal\KernelTests\Core\Field\Entity\BaseFieldOverrideTest" classname="Drupal.KernelTests.Core.Field.Entity.BaseFieldOverrideTest" assertions="5" time="0.817925"/> + </testsuite> +</testsuites> diff --git a/core/tests/fixtures/phpunit_skipped.xml b/core/tests/fixtures/phpunit_skipped.xml new file mode 100644 index 00000000000..4a8311f5f7a --- /dev/null +++ b/core/tests/fixtures/phpunit_skipped.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8"?> +<testsuites> + <testsuite name="Drupal\KernelTests\Core\Image\ToolkitGdTest" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" tests="93" assertions="1167" errors="0" failures="0" skipped="5" time="88.994903"> + <testsuite name="Drupal\KernelTests\Core\Image\ToolkitGdTest::testManipulations" tests="80" assertions="1104" errors="0" failures="0" skipped="0" time="76.846621"> + <testcase name="testManipulations with data set #0" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.976747"/> + <testcase name="testManipulations with data set #1" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.944626"/> + <testcase name="testManipulations with data set #2" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.980525"/> + <testcase name="testManipulations with data set #3" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.947471"/> + <testcase name="testManipulations with data set #4" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.938293"/> + <testcase name="testManipulations with data set #5" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.939534"/> + <testcase name="testManipulations with data set #6" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.940386"/> + <testcase name="testManipulations with data set #7" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.934696"/> + <testcase name="testManipulations with data set #8" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.943265"/> + <testcase name="testManipulations with data set #9" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.941971"/> + <testcase name="testManipulations with data set #10" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.936005"/> + <testcase name="testManipulations with data set #11" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="12" time="1.016108"/> + <testcase name="testManipulations with data set #12" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="4" time="1.071908"/> + <testcase name="testManipulations with data set #13" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.022994"/> + <testcase name="testManipulations with data set #14" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.983351"/> + <testcase name="testManipulations with data set #15" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.991556"/> + <testcase name="testManipulations with data set #16" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.979027"/> + <testcase name="testManipulations with data set #17" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.039585"/> + <testcase name="testManipulations with data set #18" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.991826"/> + <testcase name="testManipulations with data set #19" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.940721"/> + <testcase name="testManipulations with data set #20" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.935326"/> + <testcase name="testManipulations with data set #21" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.954192"/> + <testcase name="testManipulations with data set #22" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.932164"/> + <testcase name="testManipulations with data set #23" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.931443"/> + <testcase name="testManipulations with data set #24" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.970216"/> + <testcase name="testManipulations with data set #25" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.588409"/> + <testcase name="testManipulations with data set #26" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.078304"/> + <testcase name="testManipulations with data set #27" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="12" time="1.032428"/> + <testcase name="testManipulations with data set #28" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="4" time="0.936722"/> + <testcase name="testManipulations with data set #29" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.941567"/> + <testcase name="testManipulations with data set #30" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.931417"/> + <testcase name="testManipulations with data set #31" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.933312"/> + <testcase name="testManipulations with data set #32" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.933431"/> + <testcase name="testManipulations with data set #33" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.928300"/> + <testcase name="testManipulations with data set #34" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.961680"/> + <testcase name="testManipulations with data set #35" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.932923"/> + <testcase name="testManipulations with data set #36" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.942173"/> + <testcase name="testManipulations with data set #37" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.925717"/> + <testcase name="testManipulations with data set #38" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.934281"/> + <testcase name="testManipulations with data set #39" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.924183"/> + <testcase name="testManipulations with data set #40" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.923672"/> + <testcase name="testManipulations with data set #41" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.972786"/> + <testcase name="testManipulations with data set #42" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.937621"/> + <testcase name="testManipulations with data set #43" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="12" time="0.934860"/> + <testcase name="testManipulations with data set #44" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="4" time="0.932447"/> + <testcase name="testManipulations with data set #45" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.929079"/> + <testcase name="testManipulations with data set #46" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.943529"/> + <testcase name="testManipulations with data set #47" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.935430"/> + <testcase name="testManipulations with data set #48" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.924625"/> + <testcase name="testManipulations with data set #49" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.931053"/> + <testcase name="testManipulations with data set #50" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.927283"/> + <testcase name="testManipulations with data set #51" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.926629"/> + <testcase name="testManipulations with data set #52" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.929970"/> + <testcase name="testManipulations with data set #53" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.930390"/> + <testcase name="testManipulations with data set #54" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.950040"/> + <testcase name="testManipulations with data set #55" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.930872"/> + <testcase name="testManipulations with data set #56" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.958764"/> + <testcase name="testManipulations with data set #57" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.935869"/> + <testcase name="testManipulations with data set #58" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.932261"/> + <testcase name="testManipulations with data set #59" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="12" time="0.930439"/> + <testcase name="testManipulations with data set #60" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="4" time="0.926069"/> + <testcase name="testManipulations with data set #61" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.966578"/> + <testcase name="testManipulations with data set #62" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.928829"/> + <testcase name="testManipulations with data set #63" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.933807"/> + <testcase name="testManipulations with data set #64" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.929979"/> + <testcase name="testManipulations with data set #65" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.926004"/> + <testcase name="testManipulations with data set #66" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.927559"/> + <testcase name="testManipulations with data set #67" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.932268"/> + <testcase name="testManipulations with data set #68" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.966589"/> + <testcase name="testManipulations with data set #69" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.930977"/> + <testcase name="testManipulations with data set #70" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="16" time="0.981415"/> + <testcase name="testManipulations with data set #71" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.936806"/> + <testcase name="testManipulations with data set #72" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.031318"/> + <testcase name="testManipulations with data set #73" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.940179"/> + <testcase name="testManipulations with data set #74" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="1.084237"/> + <testcase name="testManipulations with data set #75" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="12" time="0.937176"/> + <testcase name="testManipulations with data set #76" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="4" time="0.933190"/> + <testcase name="testManipulations with data set #77" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.934827"/> + <testcase name="testManipulations with data set #78" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.940150"/> + <testcase name="testManipulations with data set #79" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="287" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="14" time="0.932256"/> + </testsuite> + <testcase name="testSupportedExtensions" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="359" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="8" time="0.934511"/> + <testsuite name="Drupal\KernelTests\Core\Image\ToolkitGdTest::testGdFunctionsExist" tests="4" assertions="4" errors="0" failures="0" skipped="4" time="3.704495"> + <testcase name="testGdFunctionsExist with data set #0" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="397" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="1" time="0.954038"> + <skipped/> + </testcase> + <testcase name="testGdFunctionsExist with data set #1" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="397" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="1" time="0.917938"> + <skipped/> + </testcase> + <testcase name="testGdFunctionsExist with data set #2" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="397" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="1" time="0.921161"> + <skipped/> + </testcase> + <testcase name="testGdFunctionsExist with data set #3" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="397" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="1" time="0.911357"> + <skipped/> + </testcase> + </testsuite> + <testsuite name="Drupal\KernelTests\Core\Image\ToolkitGdTest::testCreateImageFromScratch" tests="4" assertions="40" errors="0" failures="0" skipped="0" time="3.750441"> + <testcase name="testCreateImageFromScratch with data set #0" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="409" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="10" time="0.926113"/> + <testcase name="testCreateImageFromScratch with data set #1" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="409" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="10" time="0.927924"/> + <testcase name="testCreateImageFromScratch with data set #2" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="409" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="10" time="0.925613"/> + <testcase name="testCreateImageFromScratch with data set #3" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="409" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="10" time="0.970791"/> + </testsuite> + <testcase name="testCreateNewFailures" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="437" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="5" time="0.924227"/> + <testcase name="testGifTransparentImages" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="452" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="1" time="0.951413"> + <skipped/> + </testcase> + <testcase name="testMissingOperation" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="506" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="3" time="0.935700"/> + <testcase name="testGetRequirements" file="/var/www/lab01/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php" line="518" class="Drupal\KernelTests\Core\Image\ToolkitGdTest" classname="Drupal.KernelTests.Core.Image.ToolkitGdTest" assertions="2" time="0.947495"/> + </testsuite> +</testsuites> |