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().

File

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

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().
    $handler = Error::currentErrorHandler();
    if (!$handler instanceof TestErrorHandler) {
        throw new \RuntimeException(sprintf('%s registered its own error handler (%s) 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(), self::getCallableName($handler)));
    }
    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.