diff --git a/tests/ConfigDouble.php b/tests/ConfigDouble.php index 190f75ecef..62caaba8da 100644 --- a/tests/ConfigDouble.php +++ b/tests/ConfigDouble.php @@ -72,6 +72,22 @@ public function __construct(array $cliArgs=[], $skipSettingStandard=false, $skip }//end __construct() + /** + * Ensures the static properties in the Config class are reset to their default values + * when the ConfigDouble is no longer used. + * + * @return void + */ + public function __destruct() + { + $this->setStaticConfigProperty('overriddenDefaults', []); + $this->setStaticConfigProperty('executablePaths', []); + $this->setStaticConfigProperty('configData', null); + $this->setStaticConfigProperty('configDataFile', null); + + }//end __destruct() + + /** * Sets the command line values and optionally prevents a file system search for a custom ruleset. * diff --git a/tests/Core/AbstractMethodUnitTest.php b/tests/Core/AbstractMethodUnitTest.php index f98392d71b..3784fb072d 100644 --- a/tests/Core/AbstractMethodUnitTest.php +++ b/tests/Core/AbstractMethodUnitTest.php @@ -92,6 +92,14 @@ public static function initializeFile() */ public static function reset() { + // Explicitly trigger __destruct() on the ConfigDouble to reset the Config statics. + // The explicit method call prevents potential stray test-local references to the $config object + // preventing the destructor from running the clean up (which without stray references would be + // automagically triggered when `self::$phpcsFile` is reset, but we can't definitively rely on that). + if (isset(self::$phpcsFile) === true) { + self::$phpcsFile->config->__destruct(); + } + self::$fileExtension = 'inc'; self::$tabWidth = 4; self::$phpcsFile = null; diff --git a/tests/Core/Filters/AbstractFilterTestCase.php b/tests/Core/Filters/AbstractFilterTestCase.php index 15dd5bcbc3..4277f8c6ed 100644 --- a/tests/Core/Filters/AbstractFilterTestCase.php +++ b/tests/Core/Filters/AbstractFilterTestCase.php @@ -51,6 +51,29 @@ public static function initializeConfigAndRuleset() }//end initializeConfigAndRuleset() + /** + * Clean up after finished test by resetting all static properties on the Config class to their default values. + * + * Note: This is a PHPUnit cross-version compatible {@see \PHPUnit\Framework\TestCase::tearDownAfterClass()} + * method. + * + * @afterClass + * + * @return void + */ + public static function reset() + { + // Explicitly trigger __destruct() on the ConfigDouble to reset the Config statics. + // The explicit method call prevents potential stray test-local references to the $config object + // preventing the destructor from running the clean up (which without stray references would be + // automagically triggered when `self::$phpcsFile` is reset, but we can't definitively rely on that). + if (isset(self::$config) === true) { + self::$config->__destruct(); + } + + }//end reset() + + /** * Helper method to retrieve a mock object for a Filter class. *