function PhpRequirementsTest::providerMinimumSupportedPhp

Same name in other branches
  1. 9 core/tests/Drupal/Tests/Core/Utility/PhpRequirementsTest.php \Drupal\Tests\Core\Utility\PhpRequirementsTest::providerMinimumSupportedPhp()
  2. 10 core/tests/Drupal/Tests/Core/Utility/PhpRequirementsTest.php \Drupal\Tests\Core\Utility\PhpRequirementsTest::providerMinimumSupportedPhp()

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 89

Class

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

Namespace

Drupal\Tests\Core\Utility

Code

public static 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',
    ]);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.