disable global test listener when not registered

The global test listener is always initialized to register the clock
mock and DNS mock as soon as possible. However, when the listener is
registered locally through the PHPUnit config, it will never be
registered as a listener. In thise case, the state of the local
listener must be reset to correctly report expected deprecation test
results.
This commit is contained in:
Christian Flothmann 2017-03-01 20:06:54 +01:00
parent f7bdfd068f
commit f4cd6708b7
3 changed files with 22 additions and 1 deletions

View File

@ -27,6 +27,11 @@ class SymfonyTestsListener extends \PHPUnit_Framework_BaseTestListener
$this->trait = new SymfonyTestsListenerTrait($mockedNamespaces);
}
public function globalListenerDisabled()
{
$this->trait->globalListenerDisabled();
}
public function startTestSuite(\PHPUnit_Framework_TestSuite $suite)
{
return $this->trait->startTestSuite($suite);

View File

@ -93,6 +93,12 @@ class SymfonyTestsListenerTrait
}
}
public function globalListenerDisabled()
{
self::$globallyEnabled = false;
$this->state = -1;
}
public function startTestSuite($suite)
{
if (class_exists('PHPUnit_Util_Blacklist', false)) {

View File

@ -38,7 +38,17 @@ class TestRunner extends BaseRunner
$arguments['listeners'] = isset($arguments['listeners']) ? $arguments['listeners'] : array();
if (!array_filter($arguments['listeners'], function ($listener) { return $listener instanceof SymfonyTestsListener; })) {
$registeredLocally = false;
foreach ($arguments['listeners'] as $registeredListener) {
if ($registeredListener instanceof SymfonyTestsListener) {
$registeredListener->globalListenerDisabled();
$registeredLocally = true;
break;
}
}
if (!$registeredLocally) {
$arguments['listeners'][] = $listener;
}