Issue #2937469 by alexpott, Mixologic: Automatic upgrade to PHPUnit 6 is dangerous
							parent
							
								
									f4c5cdf057
								
							
						
					
					
						commit
						45cf042073
					
				| 
						 | 
				
			
			@ -52,7 +52,7 @@
 | 
			
		|||
        "post-autoload-dump": "Drupal\\Core\\Composer\\Composer::ensureHtaccess",
 | 
			
		||||
        "post-package-install": "Drupal\\Core\\Composer\\Composer::vendorTestCodeCleanup",
 | 
			
		||||
        "post-package-update": "Drupal\\Core\\Composer\\Composer::vendorTestCodeCleanup",
 | 
			
		||||
        "post-install-cmd": "Drupal\\Core\\Composer\\Composer::upgradePHPUnit",
 | 
			
		||||
        "drupal-phpunit-upgrade-check": "Drupal\\Core\\Composer\\Composer::upgradePHPUnit",
 | 
			
		||||
        "drupal-phpunit-upgrade": "@composer update phpunit/phpunit --with-dependencies --no-progress",
 | 
			
		||||
        "phpcs": "phpcs --standard=core/phpcs.xml.dist --runtime-set installed_paths $($COMPOSER_BINARY config vendor-dir)/drupal/coder/coder_sniffer --",
 | 
			
		||||
        "phpcbf": "phpcbf --standard=core/phpcs.xml.dist --runtime-set installed_paths $($COMPOSER_BINARY config vendor-dir)/drupal/coder/coder_sniffer --"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,13 +162,29 @@ EOT;
 | 
			
		|||
 | 
			
		||||
    // If the PHP version is 7.2 or above and PHPUnit is less than version 6
 | 
			
		||||
    // call the drupal-phpunit-upgrade script to upgrade PHPUnit.
 | 
			
		||||
    if (version_compare(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, '7.2') >= 0 && version_compare($phpunit_package->getVersion(), '6.1') < 0) {
 | 
			
		||||
    if (!static::upgradePHPUnitCheck($phpunit_package->getVersion())) {
 | 
			
		||||
      $event->getComposer()
 | 
			
		||||
        ->getEventDispatcher()
 | 
			
		||||
        ->dispatchScript('drupal-phpunit-upgrade');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Determines if PHPUnit needs to be upgraded.
 | 
			
		||||
   *
 | 
			
		||||
   * This method is located in this file because it is possible that it is
 | 
			
		||||
   * called before the autoloader is available.
 | 
			
		||||
   *
 | 
			
		||||
   * @param string $phpunit_version
 | 
			
		||||
   *   The PHPUnit version string.
 | 
			
		||||
   *
 | 
			
		||||
   * @return bool
 | 
			
		||||
   *   TRUE if the PHPUnit needs to be upgraded, FALSE if not.
 | 
			
		||||
   */
 | 
			
		||||
  public static function upgradePHPUnitCheck($phpunit_version) {
 | 
			
		||||
    return !(version_compare(PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION, '7.2') >= 0 && version_compare($phpunit_version, '6.1') < 0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Remove possibly problematic test files from vendored projects.
 | 
			
		||||
   *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use Drupal\Component\FileSystem\FileSystem;
 | 
			
		|||
use Drupal\Component\Utility\Html;
 | 
			
		||||
use Drupal\Component\Utility\Timer;
 | 
			
		||||
use Drupal\Component\Uuid\Php;
 | 
			
		||||
use Drupal\Core\Composer\Composer;
 | 
			
		||||
use Drupal\Core\Asset\AttachedAssets;
 | 
			
		||||
use Drupal\Core\Database\Database;
 | 
			
		||||
use Drupal\Core\StreamWrapper\PublicStream;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,10 +19,9 @@ use Drupal\simpletest\Form\SimpletestResultsForm;
 | 
			
		|||
use Drupal\simpletest\TestBase;
 | 
			
		||||
use Drupal\simpletest\TestDiscovery;
 | 
			
		||||
use PHPUnit\Framework\TestCase;
 | 
			
		||||
use PHPUnit\Runner\Version;
 | 
			
		||||
use Symfony\Component\HttpFoundation\Request;
 | 
			
		||||
 | 
			
		||||
$autoloader = require_once __DIR__ . '/../../autoload.php';
 | 
			
		||||
 | 
			
		||||
// Define some colors for display.
 | 
			
		||||
// A nice calming green.
 | 
			
		||||
const SIMPLETEST_SCRIPT_COLOR_PASS = 32;
 | 
			
		||||
| 
						 | 
				
			
			@ -37,11 +37,6 @@ const SIMPLETEST_SCRIPT_EXIT_SUCCESS = 0;
 | 
			
		|||
const SIMPLETEST_SCRIPT_EXIT_FAILURE = 1;
 | 
			
		||||
const SIMPLETEST_SCRIPT_EXIT_EXCEPTION = 2;
 | 
			
		||||
 | 
			
		||||
if (!class_exists(TestCase::class)) {
 | 
			
		||||
  echo "\nrun-tests.sh requires the PHPUnit testing framework. Please use 'composer install --dev' to ensure that it is present.\n\n";
 | 
			
		||||
  exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set defaults and get overrides.
 | 
			
		||||
list($args, $count) = simpletest_script_parse_args();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,14 +47,9 @@ if ($args['help'] || $count == 0) {
 | 
			
		|||
 | 
			
		||||
simpletest_script_init();
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
  $request = Request::createFromGlobals();
 | 
			
		||||
  $kernel = TestRunnerKernel::createFromRequest($request, $autoloader);
 | 
			
		||||
  $kernel->prepareLegacyRequest($request);
 | 
			
		||||
}
 | 
			
		||||
catch (Exception $e) {
 | 
			
		||||
  echo (string) $e;
 | 
			
		||||
  exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION);
 | 
			
		||||
if (!class_exists(TestCase::class)) {
 | 
			
		||||
  echo "\nrun-tests.sh requires the PHPUnit testing framework. Please use 'composer install --dev' to ensure that it is present.\n\n";
 | 
			
		||||
  exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ($args['execute-test']) {
 | 
			
		||||
| 
						 | 
				
			
			@ -142,6 +132,18 @@ if ($args['clean']) {
 | 
			
		|||
  exit(SIMPLETEST_SCRIPT_EXIT_SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Ensure we have the correct PHPUnit version for the version of PHP.
 | 
			
		||||
if (class_exists('\PHPUnit_Runner_Version')) {
 | 
			
		||||
  $phpunit_version = \PHPUnit_Runner_Version::id();
 | 
			
		||||
}
 | 
			
		||||
else {
 | 
			
		||||
  $phpunit_version = Version::id();
 | 
			
		||||
}
 | 
			
		||||
if (!Composer::upgradePHPUnitCheck($phpunit_version)) {
 | 
			
		||||
  simpletest_script_print_error("PHPUnit testing framework version 6 or greater is required when running on PHP 7.2 or greater. Run the command 'composer run-script drupal-phpunit-upgrade' in order to fix this.");
 | 
			
		||||
  exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$test_list = simpletest_script_get_test_list();
 | 
			
		||||
 | 
			
		||||
// Try to allocate unlimited time to run the tests.
 | 
			
		||||
| 
						 | 
				
			
			@ -463,6 +465,25 @@ function simpletest_script_init() {
 | 
			
		|||
    exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Detect if we're in the top-level process using the private 'execute-test'
 | 
			
		||||
  // argument. Determine if being run on drupal.org's testing infrastructure
 | 
			
		||||
  // using the presence of 'drupaltestbot' in the database url.
 | 
			
		||||
  // @todo https://www.drupal.org/project/drupalci_testbot/issues/2860941 Use
 | 
			
		||||
  //   better environment variable to detect DrupalCI.
 | 
			
		||||
  // @todo https://www.drupal.org/project/drupal/issues/2942473 Remove when
 | 
			
		||||
  //   dropping PHPUnit 4 and PHP 5 support.
 | 
			
		||||
  if (!$args['execute-test'] && preg_match('/drupalci/', $args['sqlite'])) {
 | 
			
		||||
    // Update PHPUnit if needed and possible. There is a later check once the
 | 
			
		||||
    // autoloader is in place to ensure we're on the correct version. We need to
 | 
			
		||||
    // do this before the autoloader is in place to ensure that it is correct.
 | 
			
		||||
    $composer = ($composer = rtrim('\\' === DIRECTORY_SEPARATOR ? preg_replace('/[\r\n].*/', '', `where.exe composer.phar`) : `which composer.phar`))
 | 
			
		||||
      ? $php . ' ' . escapeshellarg($composer)
 | 
			
		||||
      : 'composer';
 | 
			
		||||
    passthru("$composer run-script drupal-phpunit-upgrade-check");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $autoloader = require_once __DIR__ . '/../../autoload.php';
 | 
			
		||||
 | 
			
		||||
  // Get URL from arguments.
 | 
			
		||||
  if (!empty($args['url'])) {
 | 
			
		||||
    $parsed_url = parse_url($args['url']);
 | 
			
		||||
| 
						 | 
				
			
			@ -521,6 +542,17 @@ function simpletest_script_init() {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  chdir(realpath(__DIR__ . '/../..'));
 | 
			
		||||
 | 
			
		||||
  // Prepare the kernel.
 | 
			
		||||
  try {
 | 
			
		||||
    $request = Request::createFromGlobals();
 | 
			
		||||
    $kernel = TestRunnerKernel::createFromRequest($request, $autoloader);
 | 
			
		||||
    $kernel->prepareLegacyRequest($request);
 | 
			
		||||
  }
 | 
			
		||||
  catch (Exception $e) {
 | 
			
		||||
    echo (string) $e;
 | 
			
		||||
    exit(SIMPLETEST_SCRIPT_EXIT_EXCEPTION);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
use Drupal\Component\Assertion\Handle;
 | 
			
		||||
use Drupal\Core\Composer\Composer;
 | 
			
		||||
use PHPUnit\Runner\Version;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +151,19 @@ function drupal_phpunit_populate_class_loader() {
 | 
			
		|||
// Do class loader population.
 | 
			
		||||
drupal_phpunit_populate_class_loader();
 | 
			
		||||
 | 
			
		||||
// Ensure we have the correct PHPUnit version for the version of PHP.
 | 
			
		||||
if (class_exists('\PHPUnit_Runner_Version')) {
 | 
			
		||||
  $phpunit_version = \PHPUnit_Runner_Version::id();
 | 
			
		||||
}
 | 
			
		||||
else {
 | 
			
		||||
  $phpunit_version = Version::id();
 | 
			
		||||
}
 | 
			
		||||
if (!Composer::upgradePHPUnitCheck($phpunit_version)) {
 | 
			
		||||
  $message = "PHPUnit testing framework version 6 or greater is required when running on PHP 7.2 or greater. Run the command 'composer run-script drupal-phpunit-upgrade' in order to fix this.";
 | 
			
		||||
  echo "\033[31m" . $message . "\n\033[0m";
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set sane locale settings, to ensure consistent string, dates, times and
 | 
			
		||||
// numbers handling.
 | 
			
		||||
// @see \Drupal\Core\DrupalKernel::bootEnvironment()
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +184,7 @@ Handle::register();
 | 
			
		|||
 | 
			
		||||
// PHPUnit 4 to PHPUnit 6 bridge. Tests written for PHPUnit 4 need to work on
 | 
			
		||||
// PHPUnit 6 with a minimum of fuss.
 | 
			
		||||
if (class_exists('PHPUnit\Runner\Version') && version_compare(Version::id(), '6.1', '>=')) {
 | 
			
		||||
if (version_compare($phpunit_version, '6.1', '>=')) {
 | 
			
		||||
  class_alias('\PHPUnit\Framework\AssertionFailedError', '\PHPUnit_Framework_AssertionFailedError');
 | 
			
		||||
  class_alias('\PHPUnit\Framework\Constraint\Count', '\PHPUnit_Framework_Constraint_Count');
 | 
			
		||||
  class_alias('\PHPUnit\Framework\Error\Error', '\PHPUnit_Framework_Error');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue