Verified Commit 5fcdba13 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3178919 by andregp, AndyF, codebymikey, ankithashetty, Ankit.Gupta,...

Issue #3178919 by andregp, AndyF, codebymikey, ankithashetty, Ankit.Gupta, alexpott, smustgrave, larowlan: Can't run tests with XDEBUG_CONFIG set to empty string

(cherry picked from commit e9750b4c)
parent 6433cd0a
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\Core\Test;

use Drupal\Tests\UnitTestCase;
use Drupal\Tests\XdebugRequestTrait;
use Symfony\Component\HttpFoundation\Request;

/**
 * Provides tests for the Xdebug request trait.
 *
 * @coversDefaultClass \Drupal\Tests\XdebugRequestTrait
 * @group Test
 */
class XdebugRequestTraitTest extends UnitTestCase {

  use XdebugRequestTrait;

  /**
   * Tests that Xdebug cookies are extracted from a request correctly.
   *
   * @param array $server
   *   The request server array.
   * @param array $expected_cookies
   *   The expected cookies for the request.
   *
   * @covers ::extractCookiesFromRequest
   * @dataProvider extractCookiesDataProvider
   */
  public function testExtractCookiesFromRequest(array $server, array $expected_cookies): void {
    $request = new Request([], [], [], [], [], $server);
    $this->assertSame($expected_cookies, $this->extractCookiesFromRequest($request));
  }

  /**
   * Provides data to test extracting Xdebug cookies from a request.
   *
   * @return iterable
   *   Test scenarios.
   */
  public function extractCookiesDataProvider() {
    yield 'no XDEBUG_CONFIG' => [[], []];
    yield 'empty string XDEBUG_CONFIG' => [['XDEBUG_CONFIG' => ''], []];
    yield 'only space string XDEBUG_CONFIG' => [['XDEBUG_CONFIG' => ' '], []];
    yield 'invalid XDEBUG_CONFIG' => [['XDEBUG_CONFIG' => 'invalid_config'], []];
    yield 'idekey XDEBUG_CONFIG' => [
      ['XDEBUG_CONFIG' => 'idekey=XDEBUG_KEY'],
      ['XDEBUG_SESSION' => ['XDEBUG_KEY']],
    ];
    yield 'idekey with another key XDEBUG_CONFIG' => [
      ['XDEBUG_CONFIG' => 'foo=bar  idekey=XDEBUG_KEY '],
      ['XDEBUG_SESSION' => ['XDEBUG_KEY']],
    ];
  }

}
+4 −2
Original line number Diff line number Diff line
@@ -36,9 +36,11 @@ protected function extractCookiesFromRequest(Request $request) {
    }
    elseif ($server->has('XDEBUG_CONFIG')) {
      // $_SERVER['XDEBUG_CONFIG'] has the form "key1=value1 key2=value2 ...".
      $pairs = explode(' ', $server->get('XDEBUG_CONFIG'));
      $pairs = array_filter(explode(' ', $server->get('XDEBUG_CONFIG')), function ($value) {
        return str_contains($value, '=');
      });
      foreach ($pairs as $pair) {
        [$key, $value] = explode('=', $pair);
        [$key, $value] = explode('=', $pair, 2);
        // Account for key-value pairs being separated by multiple spaces.
        if (trim($key, ' ') == 'idekey') {
          $cookies['XDEBUG_SESSION'][] = trim($value, ' ');