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++;
+    }
+  }
+
+}