| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | <?phpnamespace Drupal\Tests;/** * Provides helper methods for the requirements page. */trait RequirementsPageTrait {  /**   * Handles the update requirements page.   */  protected function updateRequirementsProblem() {    // Assert a warning is shown on older test environments.    $links = $this->getSession()->getPage()->findAll('named', ['link', 'try again']);    if ($links && version_compare(phpversion(), DRUPAL_MINIMUM_SUPPORTED_PHP) < 0) {      $this->assertNoText('Errors found');      $this->assertWarningSummaries(['PHP']);      $this->clickLink('try again');      $this->checkForMetaRefresh();    }  }  /**   * Continues installation when the expected warnings are found.   *   * This function is no longer called by any core test, but it is retained for   * use by contrib/custom tests. It is not deprecated, because it remains the   * recommended function to call for its purpose.   *   * @param string[] $expected_warnings   *   A list of warning summaries to expect on the requirements screen (e.g.   *   'PHP', 'PHP OPcode caching', etc.). If only the expected warnings   *   are found, the test will click the "continue anyway" link to go to the   *   next screen of the installer. If an expected warning is not found, or if   *   a warning not in the list is present, a fail is raised.   */  protected function continueOnExpectedWarnings($expected_warnings = []) {    $this->assertNoText('Errors found');    $this->assertWarningSummaries($expected_warnings);    $this->clickLink('continue anyway');    $this->checkForMetaRefresh();  }  /**   * Assert the given warning summaries are present on the page.   *   * If an expected warning is not found, or if a warning not in the list is   * present, a fail is raised.   *   * @param string[] $warning_summaries   *   A list of warning summaries to expect on the requirements screen (e.g.   *   'PHP', 'PHP OPcode caching', etc.).   */  protected function assertWarningSummaries(array $warning_summaries) {    // Allow only details elements that are directly after the warning header    // or each other. There is no guaranteed wrapper we can rely on across    // distributions. When there are multiple warnings, the selectors will be:    // - h3#warning+details summary    // - h3#warning+details+details summary    // - etc.    // We add one more selector than expected warnings to confirm that there    // isn't any other warning before clicking the link.    // @todo Make this more reliable in    //   https://www.drupal.org/project/drupal/issues/2927345.    $selectors = [];    for ($i = 0; $i <= count($warning_summaries); $i++) {      $selectors[] = 'h3#warning' . implode('', array_fill(0, $i + 1, '+details')) . ' summary';    }    $warning_elements = $this->cssSelect(implode(', ', $selectors));    // Confirm that there are only the expected warnings.    $warnings = [];    foreach ($warning_elements as $warning) {      $warnings[] = trim($warning->getText());    }    $this->assertEquals($warning_summaries, $warnings);  }}
 |