function ExpectDeprecationTrait::tearDownErrorHandler

Tears down the test error handler.

This method is run after each test's ::tearDown() method, and checks if collected deprecations match the expectations; it also resets the error handler to the one set prior of the change made by ::setUpErrorHandler().

Attributes

#[After]

File

core/tests/Drupal/TestTools/Extension/DeprecationBridge/ExpectDeprecationTrait.php, line 53

Class

ExpectDeprecationTrait
A trait to include in Drupal tests to manage expected deprecations.

Namespace

Drupal\TestTools\Extension\DeprecationBridge

Code

public function tearDownErrorHandler() : void {
  if (!DeprecationHandler::isEnabled()) {
    return;
  }
  // We expect that the current error handler is the one set by
  // ::setUpErrorHandler() prior to the start of the test execution. If not,
  // the error handler was changed during the test execution but not properly
  // restored during ::tearDown().
  if (!get_error_handler() instanceof TestErrorHandler) {
    throw new \RuntimeException(sprintf('%s registered its own error handler without restoring the previous one before or during tear down. This can cause unpredictable test results. Ensure the test cleans up after itself.', $this->name()));
  }
  restore_error_handler();
  // Checks if collected deprecations match the expectations.
  if (DeprecationHandler::getExpectedDeprecations()) {
    $prefix = "@expectedDeprecation:\n";
    $expDep = $prefix . '%A  ' . implode("\n%A  ", DeprecationHandler::getExpectedDeprecations()) . "\n%A";
    $actDep = $prefix . '  ' . implode("\n  ", DeprecationHandler::getCollectedDeprecations()) . "\n";
    $this->assertStringMatchesFormat($expDep, $actDep);
  }
}

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