Skip to content

Commit

Permalink
Disable xdebug in subprocess when inactive
Browse files Browse the repository at this point in the history
  • Loading branch information
staabm committed Oct 13, 2024
1 parent 0cfe722 commit 1090876
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 12 deletions.
2 changes: 0 additions & 2 deletions src/Runner/PHPT/PhptTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -906,8 +906,6 @@ private function settings(bool $collectCoverage): array
if (extension_loaded('xdebug')) {
if ($collectCoverage) {
$settings[] = 'xdebug.mode=coverage';
} else {
$settings[] = 'xdebug.mode=off';
}
}

Expand Down
30 changes: 20 additions & 10 deletions src/Util/PHP/DefaultJobRunner.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use function assert;
use function fclose;
use function file_put_contents;
use function function_exists;
use function fwrite;
use function ini_get_all;
use function is_array;
Expand All @@ -27,6 +28,7 @@
use function tempnam;
use function trim;
use function unlink;
use PHPUnit\Runner\CodeCoverage;
use SebastianBergmann\Environment\Runtime;

/**
Expand Down Expand Up @@ -174,16 +176,24 @@ private function buildCommand(Job $job, ?string $file): array
),
);
} elseif ($runtime->hasXdebug()) {
$xdebugSettings = ini_get_all('xdebug');

assert($xdebugSettings !== false);

$phpSettings = array_merge(
$phpSettings,
$runtime->getCurrentSettings(
array_keys($xdebugSettings),
),
);
if (
!CodeCoverage::instance()->isActive() &&
function_exists('xdebug_is_debugger_active') &&
xdebug_is_debugger_active() === false
) {
$phpSettings[] = 'xdebug.mode=off';
} else {
$xdebugSettings = ini_get_all('xdebug');

assert($xdebugSettings !== false);

$phpSettings = array_merge(
$phpSettings,
$runtime->getCurrentSettings(
array_keys($xdebugSettings),
),
);
}
}

$command = array_merge($command, $this->settingsToParameters($phpSettings));
Expand Down
23 changes: 23 additions & 0 deletions tests/end-to-end/event/_files/XdebugIsDisabled.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\TestFixture\Event;

use function extension_loaded;
use function ini_get;
use PHPUnit\Framework\TestCase;

final class XdebugIsDisabled extends TestCase
{
public function testOne(): void
{
$this->assertTrue(extension_loaded('xdebug'));
$this->assertSame('', (string) ini_get('xdebug.mode'));
}
}
35 changes: 35 additions & 0 deletions tests/end-to-end/event/process-isolation-disable-xdebug.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
--TEST--
Subprocesses auto-disable xdebug when no debugger is attached.
--SKIPIF--
<?php declare(strict_types=1);
if (!extension_loaded('xdebug')) {
print 'skip: Extension xdebug must be loaded.';
}
--FILE--
<?php declare(strict_types=1);
$_SERVER['argv'][] = '--do-not-cache-result';
$_SERVER['argv'][] = '--no-configuration';
$_SERVER['argv'][] = '--process-isolation';
$_SERVER['argv'][] = '--debug';
$_SERVER['argv'][] = __DIR__ . '/_files/XdebugIsDisabled.php';

require __DIR__ . '/../../bootstrap.php';

(new PHPUnit\TextUI\Application)->run($_SERVER['argv']);
--EXPECTF--
PHPUnit Started (PHPUnit %s using %s)
Test Runner Configured
Event Facade Sealed
Test Suite Loaded (1 test)
Test Runner Started
Test Suite Sorted
Test Runner Execution Started (1 test)
Test Suite Started (PHPUnit\TestFixture\Event\XdebugIsDisabled, 1 test)
Test Preparation Started (PHPUnit\TestFixture\Event\XdebugIsDisabled::testOne)
Test Prepared (PHPUnit\TestFixture\Event\XdebugIsDisabled::testOne)
Test Passed (PHPUnit\TestFixture\Event\XdebugIsDisabled::testOne)
Test Finished (PHPUnit\TestFixture\Event\XdebugIsDisabled::testOne)
Test Suite Finished (PHPUnit\TestFixture\Event\XdebugIsDisabled, 1 test)
Test Runner Execution Finished
Test Runner Finished
PHPUnit Finished (Shell Exit Code: 0)

0 comments on commit 1090876

Please sign in to comment.