annotate core/tests/Drupal/Tests/XdebugRequestTrait.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests;
Chris@0 4
Chris@0 5 use Symfony\Component\HttpFoundation\Request;
Chris@0 6
Chris@0 7 trait XdebugRequestTrait {
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Adds xdebug cookies, from request setup.
Chris@0 11 *
Chris@0 12 * In order to debug web tests you need to either set a cookie, have the
Chris@0 13 * Xdebug session in the URL or set an environment variable in case of CLI
Chris@0 14 * requests. If the developer listens to connection on the parent site, by
Chris@0 15 * default the cookie is not forwarded to the client side, so you cannot
Chris@0 16 * debug the code running on the child site. In order to make debuggers work
Chris@0 17 * this bit of information is forwarded. Make sure that the debugger listens
Chris@0 18 * to at least three external connections.
Chris@0 19 *
Chris@0 20 * @param \Symfony\Component\HttpFoundation\Request $request
Chris@0 21 * The request.
Chris@0 22 *
Chris@0 23 * @return array
Chris@0 24 * The extracted cookies.
Chris@0 25 */
Chris@0 26 protected function extractCookiesFromRequest(Request $request) {
Chris@0 27 $cookie_params = $request->cookies;
Chris@0 28 $cookies = [];
Chris@0 29 if ($cookie_params->has('XDEBUG_SESSION')) {
Chris@0 30 $cookies['XDEBUG_SESSION'][] = $cookie_params->get('XDEBUG_SESSION');
Chris@0 31 }
Chris@0 32 // For CLI requests, the information is stored in $_SERVER.
Chris@0 33 $server = $request->server;
Chris@0 34 if ($server->has('XDEBUG_CONFIG')) {
Chris@0 35 // $_SERVER['XDEBUG_CONFIG'] has the form "key1=value1 key2=value2 ...".
Chris@0 36 $pairs = explode(' ', $server->get('XDEBUG_CONFIG'));
Chris@0 37 foreach ($pairs as $pair) {
Chris@0 38 list($key, $value) = explode('=', $pair);
Chris@0 39 // Account for key-value pairs being separated by multiple spaces.
Chris@0 40 if (trim($key, ' ') == 'idekey') {
Chris@0 41 $cookies['XDEBUG_SESSION'][] = trim($value, ' ');
Chris@0 42 }
Chris@0 43 }
Chris@0 44 }
Chris@0 45 return $cookies;
Chris@0 46 }
Chris@0 47
Chris@0 48 }