Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,62 @@ +<?php + +namespace Drupal\Core\EventSubscriber; + +use Drupal\Core\Utility\Error; +use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; + +/** + * Custom handling of errors when in a system-under-test. + */ +class ExceptionTestSiteSubscriber extends HttpExceptionSubscriberBase { + + /** + * {@inheritdoc} + */ + protected static function getPriority() { + return 3; + } + + /** + * {@inheritdoc} + */ + protected function getHandledFormats() { + return ['html']; + } + + /** + * Checks for special handling of errors inside Simpletest. + * + * @todo The $headers array appears to not actually get used at all in the + * original code. It's quite possible that this entire method is now + * vestigial and can be removed. + * + * @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event + */ + public function on500(GetResponseForExceptionEvent $event) { + $exception = $event->getException(); + $error = Error::decodeException($exception); + + $headers = []; + + // When running inside the testing framework, we relay the errors + // to the tested site by the way of HTTP headers. + if (DRUPAL_TEST_IN_CHILD_SITE && !headers_sent() && (!defined('SIMPLETEST_COLLECT_ERRORS') || SIMPLETEST_COLLECT_ERRORS)) { + // $number does not use drupal_static as it should not be reset + // as it uniquely identifies each PHP error. + static $number = 0; + $assertion = [ + $error['@message'], + $error['%type'], + [ + 'function' => $error['%function'], + 'file' => $error['%file'], + 'line' => $error['%line'], + ], + ]; + $headers['X-Drupal-Assertion-' . $number] = rawurlencode(serialize($assertion)); + $number++; + } + } + +}