Update to Drupal 8.2.2. For more information, see https://www.drupal.org/project/drupal/releases/8.2.2
This commit is contained in:
parent
23ffed3665
commit
507b45a0ed
378 changed files with 11434 additions and 5542 deletions
|
@ -13,6 +13,7 @@ use Drupal\simpletest\TestBase;
|
|||
use Drupal\Core\Test\TestDatabase;
|
||||
use Drupal\simpletest\TestDiscovery;
|
||||
use Symfony\Component\Process\PhpExecutableFinder;
|
||||
use Drupal\Core\Test\TestStatus;
|
||||
|
||||
/**
|
||||
* Implements hook_help().
|
||||
|
@ -183,16 +184,15 @@ function simpletest_run_phpunit_tests($test_id, array $unescaped_test_classnames
|
|||
$phpunit_file = simpletest_phpunit_xml_filepath($test_id);
|
||||
simpletest_phpunit_run_command($unescaped_test_classnames, $phpunit_file, $status, $output);
|
||||
|
||||
$rows = simpletest_phpunit_xml_to_rows($test_id, $phpunit_file);
|
||||
// A $status of 0 = passed test, 1 = failed test, > 1 indicates segfault
|
||||
// timeout, or other type of failure.
|
||||
if ($status > 1) {
|
||||
// Something broke during the execution of phpunit.
|
||||
// Return an error record of all failed classes.
|
||||
$rows = [];
|
||||
if ($status == TestStatus::PASS) {
|
||||
$rows = simpletest_phpunit_xml_to_rows($test_id, $phpunit_file);
|
||||
}
|
||||
else {
|
||||
$rows[] = [
|
||||
'test_id' => $test_id,
|
||||
'test_class' => implode(",", $unescaped_test_classnames),
|
||||
'status' => 'fail',
|
||||
'status' => TestStatus::label($status),
|
||||
'message' => 'PHPunit Test failed to complete; Error: ' . implode("\n", $output),
|
||||
'message_group' => 'Other',
|
||||
'function' => implode(",", $unescaped_test_classnames),
|
||||
|
@ -200,20 +200,6 @@ function simpletest_run_phpunit_tests($test_id, array $unescaped_test_classnames
|
|||
'file' => $phpunit_file,
|
||||
];
|
||||
}
|
||||
|
||||
if ($status === 1) {
|
||||
$rows[] = [
|
||||
'test_id' => $test_id,
|
||||
'test_class' => implode(",", $unescaped_test_classnames),
|
||||
'status' => 'fail',
|
||||
'message' => 'PHPunit Test failed to complete; Error: ' . implode("\n", $output),
|
||||
'message_group' => 'Other',
|
||||
'function' => implode(",", $unescaped_test_classnames),
|
||||
'line' => '0',
|
||||
'file' => $phpunit_file,
|
||||
];
|
||||
}
|
||||
|
||||
return $rows;
|
||||
}
|
||||
|
||||
|
|
|
@ -1532,7 +1532,11 @@ abstract class TestBase {
|
|||
* need to get deleted too.
|
||||
*/
|
||||
public static function filePreDeleteCallback($path) {
|
||||
chmod($path, 0700);
|
||||
// When the webserver runs with the same system user as the test runner, we
|
||||
// can make read-only files writable again. If not, chmod will fail while
|
||||
// the file deletion still works if file permissions have been configured
|
||||
// correctly. Thus, we ignore any problems while running chmod.
|
||||
@chmod($path, 0700);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,6 +4,7 @@ namespace Drupal\simpletest\Tests;
|
|||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
use Drupal\Tests\simpletest\Functional\ThroughUITest;
|
||||
|
||||
/**
|
||||
* Tests the Simpletest UI internal browser.
|
||||
|
@ -131,7 +132,7 @@ class SimpleTestBrowserTest extends WebTestBase {
|
|||
// A PHPUnit unit test.
|
||||
'Drupal\Tests\action\Unit\Menu\ActionLocalTasksTest',
|
||||
// A PHPUnit functional test.
|
||||
'Drupal\FunctionalTests\BrowserTestBaseTest',
|
||||
ThroughUITest::class,
|
||||
);
|
||||
|
||||
foreach ($tests as $test) {
|
||||
|
|
|
@ -2,22 +2,27 @@
|
|||
|
||||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
|
||||
/**
|
||||
* This test crashes PHP.
|
||||
*
|
||||
* To avoid accidentally running, it is not in a normal PSR-4 directory, the
|
||||
* file name does not adhere to PSR-4 and an environment variable also needs to
|
||||
* be set for the crash to happen.
|
||||
*
|
||||
* @see \Drupal\Tests\simpletest\Unit\SimpletestPhpunitRunCommandTest::testSimpletestPhpUnitRunCommand()
|
||||
*/
|
||||
class SimpletestPhpunitRunCommandTestWillDie extends UnitTestCase {
|
||||
class SimpletestPhpunitRunCommandTestWillDie extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* Performs the status specified by SimpletestPhpunitRunCommandTestWillDie.
|
||||
*/
|
||||
public function testWillDie() {
|
||||
if (getenv('SimpletestPhpunitRunCommandTestWillDie') === 'fail') {
|
||||
exit(2);
|
||||
$status = (int) getenv('SimpletestPhpunitRunCommandTestWillDie');
|
||||
if ($status == 0) {
|
||||
$this->assertTrue(TRUE, 'Assertion to ensure test pass');
|
||||
return;
|
||||
}
|
||||
$this->assertTrue(TRUE, 'Assertion to ensure test pass');
|
||||
exit($status);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\simpletest\Functional;
|
||||
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
|
||||
/**
|
||||
* Fixture test that is executed during Simpletest UI testing.
|
||||
*
|
||||
* @see \Drupal\simpletest\Tests::testTestingThroughUI()
|
||||
*
|
||||
* @group simpletest
|
||||
*/
|
||||
class ThroughUITest extends BrowserTestBase {
|
||||
|
||||
/**
|
||||
* This test method must always pass.
|
||||
*/
|
||||
public function testThroughUi() {
|
||||
$this->pass('Success!');
|
||||
}
|
||||
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
namespace Drupal\Tests\simpletest\Unit;
|
||||
|
||||
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
use Drupal\Core\File\FileSystemInterface;
|
||||
|
||||
/**
|
||||
* Tests simpletest_run_phpunit_tests() handles PHPunit fatals correctly.
|
||||
|
@ -11,27 +11,92 @@ use Drupal\Tests\UnitTestCase;
|
|||
* @group simpletest
|
||||
*
|
||||
* @runTestsInSeparateProcesses
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
class SimpletestPhpunitRunCommandTest extends UnitTestCase {
|
||||
class SimpletestPhpunitRunCommandTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
function testSimpletestPhpUnitRunCommand() {
|
||||
include_once __DIR__ . '/../../fixtures/simpletest_phpunit_run_command_test.php';
|
||||
$app_root = __DIR__ . '/../../../../../..';
|
||||
include_once "$app_root/core/modules/simpletest/simpletest.module";
|
||||
/**
|
||||
* Path to the app root.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $root;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function setUpBeforeClass() {
|
||||
parent::setUpBeforeClass();
|
||||
// Figure out our app root.
|
||||
self::$root = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))));
|
||||
// Include the files we need for tests. The stub test we will run is
|
||||
// SimpletestPhpunitRunCommandTestWillDie which is located in
|
||||
// simpletest_phpunit_run_command_test.php.
|
||||
include_once self::$root . '/core/modules/simpletest/tests/fixtures/simpletest_phpunit_run_command_test.php';
|
||||
// Since we're testing simpletest_run_phpunit_tests(), we need to include
|
||||
// simpletest.module.
|
||||
include_once self::$root . '/core/modules/simpletest/simpletest.module';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
// Organize our mock container.
|
||||
$container = new ContainerBuilder();
|
||||
$container->set('app.root', $app_root);
|
||||
$file_system = $this->prophesize('Drupal\Core\File\FileSystemInterface');
|
||||
$container->set('app.root', self::$root);
|
||||
$file_system = $this->prophesize(FileSystemInterface::class);
|
||||
// The simpletest directory wrapper will always point to /tmp.
|
||||
$file_system->realpath('public://simpletest')->willReturn(sys_get_temp_dir());
|
||||
$container->set('file_system', $file_system->reveal());
|
||||
\Drupal::setContainer($container);
|
||||
$test_id = basename(tempnam(sys_get_temp_dir(), 'xxx'));
|
||||
foreach (['pass', 'fail'] as $status) {
|
||||
putenv('SimpletestPhpunitRunCommandTestWillDie=' . $status);
|
||||
$ret = simpletest_run_phpunit_tests($test_id, ['Drupal\Tests\simpletest\Unit\SimpletestPhpunitRunCommandTestWillDie']);
|
||||
$this->assertSame($ret[0]['status'], $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testSimpletestPhpUnitRunCommand().
|
||||
*
|
||||
* @return array
|
||||
* Arrays of status codes and the label they're expected to have.
|
||||
*/
|
||||
public function provideStatusCodes() {
|
||||
$data = [
|
||||
[0, 'pass'],
|
||||
[1, 'fail'],
|
||||
[2, 'exception'],
|
||||
];
|
||||
// All status codes 3 and above should be labeled 'error'.
|
||||
// @todo: The valid values here would be 3 to 127. But since the test
|
||||
// touches the file system a lot, we only have 3, 4, and 127 for speed.
|
||||
foreach ([3, 4, 127] as $status) {
|
||||
$data[] = [$status, 'error'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the round trip for PHPUnit execution status codes.
|
||||
*
|
||||
* @covers ::simpletest_run_phpunit_tests
|
||||
*
|
||||
* @dataProvider provideStatusCodes
|
||||
*/
|
||||
public function testSimpletestPhpUnitRunCommand($status, $label) {
|
||||
$test_id = basename(tempnam(sys_get_temp_dir(), 'xxx'));
|
||||
putenv('SimpletestPhpunitRunCommandTestWillDie=' . $status);
|
||||
$ret = simpletest_run_phpunit_tests($test_id, [SimpletestPhpunitRunCommandTestWillDie::class]);
|
||||
$this->assertSame($ret[0]['status'], $label);
|
||||
putenv('SimpletestPhpunitRunCommandTestWillDie');
|
||||
unlink(simpletest_phpunit_xml_filepath($test_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function tearDown() {
|
||||
// We unset the $base_url global, since the test code sets it as a
|
||||
// side-effect.
|
||||
unset($GLOBALS['base_url']);
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Reference in a new issue