You are here

public function PhpRequirementsTest::providerMinimumSupportedPhp in Drupal 10

Data provider for ::testMinimumSupportedPhp().

See the parameter documentation of testMinimumSupportedPhp() for the test array structure. The last element is the expected minimum supported PHP.

Return value

\Generator Test scenarios.

File

core/tests/Drupal/Tests/Core/Utility/PhpRequirementsTest.php, line 87

Class

PhpRequirementsTest
Tests the \Drupal\Core\Utility\PhpRequirements class.

Namespace

Drupal\Tests\Core\Utility

Code

public function providerMinimumSupportedPhp() : \Generator {
  $eol_lists = [];

  // Test against the known valid data from 9.0.0 to 9.3.0.
  $eol_lists['d9_release'] = [
    '7.2' => '2020-11-30',
    '7.3' => '2021-12-06',
    '7.4' => '2022-11-28',
    '8.0' => '2023-11-26',
    '8.1' => '2024-11-25',
  ];

  // The actual situation the day of 9.0.0's release.
  (yield [
    '2020-06-03',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.3.0',
  ]);

  // If Drupal's MINIMUM_PHP had been 7.3.12 then.
  (yield [
    '2020-06-03',
    '7.3.12',
    $eol_lists['d9_release'],
    '7.3.12',
  ]);

  // If Drupal's MINIMUM_PHP had been 7.2.17 then.
  (yield [
    '2020-06-03',
    '7.2.17',
    $eol_lists['d9_release'],
    '7.2.17',
  ]);

  // If Drupal's MINIMUM_PHP had been 7.1.5 then.
  (yield [
    '2020-06-03',
    '7.1.5',
    $eol_lists['d9_release'],
    '7.2',
  ]);

  // If the PHP EOL date list were empty.
  (yield [
    '2020-06-03',
    '7.3.0',
    [],
    '7.3.0',
  ]);

  // Cases around PHP 7.2's EOL.
  (yield [
    '2020-11-29',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.3.0',
  ]);
  (yield [
    '2020-11-30',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.3.0',
  ]);
  (yield [
    '2020-12-01',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.3.0',
  ]);

  // Cases around PHP 7.3's EOL.
  (yield [
    '2021-12-05',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.3.0',
  ]);
  (yield [
    '2021-12-06',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.4',
  ]);
  (yield [
    '2021-12-07',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.4',
  ]);

  // Cases around PHP 7.4's EOL.
  (yield [
    '2022-11-27',
    '7.3.0',
    $eol_lists['d9_release'],
    '7.4',
  ]);
  (yield [
    '2022-11-28',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.0',
  ]);
  (yield [
    '2022-11-29',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.0',
  ]);

  // Cases around PHP 8.0's EOL.
  (yield [
    '2023-11-25',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.0',
  ]);
  (yield [
    '2023-11-26',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2023-11-27',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.1',
  ]);

  // Cases around PHP 8.1's EOL, without any data for 8.2.
  (yield [
    '2024-11-24',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2024-11-25',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2024-11-26',
    '7.3.0',
    $eol_lists['d9_release'],
    '8.1',
  ]);

  // Cases for Drupal 10, with its current 8.0.2 MINIMUM_PHP, prior to PHP
  // 8.0's EOL.
  (yield [
    '2021-12-05',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2021-12-06',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2021-12-07',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2022-11-27',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2022-11-28',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2022-11-29',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);

  // Cases for Drupal 10 around PHP 8.0's EOL.
  (yield [
    '2023-11-25',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.0.2',
  ]);
  (yield [
    '2023-11-26',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2023-11-27',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);

  // Cases for Drupal 10 around and after PHP 8.1's EOL, without any data
  // for 8.2.
  (yield [
    '2024-11-24',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2024-11-25',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2024-11-26',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);
  (yield [
    '2027-01-01',
    '8.0.2',
    $eol_lists['d9_release'],
    '8.1',
  ]);

  // Test against a hypothetical set of PHP versions that have an LTS
  // (supported longer than subsequent versions).
  $eol_lists['php_with_lts'] = $eol_lists['d9_release'];

  // Ensure that the PHP version with longest support is listed last.
  unset($eol_lists['php_with_lts']['7.4']);
  $eol_lists['php_with_lts']['7.4'] = '2025-11-28';
  (yield [
    '2021-12-05',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.3',
  ]);
  (yield [
    '2021-12-06',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.4',
  ]);
  (yield [
    '2022-11-28',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.4',
  ]);
  (yield [
    '2023-11-26',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.4',
  ]);
  (yield [
    '2024-11-25',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.4',
  ]);
  (yield [
    '2025-12-01',
    '7.3',
    $eol_lists['php_with_lts'],
    '7.4',
  ]);

  // Case with multiple versions EOL on the same day.
  $eol_lists['same_eol_date'] = $eol_lists['d9_release'];
  $eol_lists['same_eol_date']['8.2'] = $eol_lists['same_eol_date']['8.1'];
  (yield [
    '2021-12-05',
    '7.3',
    $eol_lists['same_eol_date'],
    '7.3',
  ]);
  (yield [
    '2023-11-27',
    '8.0.2',
    $eol_lists['same_eol_date'],
    '8.1',
  ]);
  (yield [
    '2027-07-31',
    '8.0.2',
    $eol_lists['same_eol_date'],
    '8.2',
  ]);
}