Skip to content

Commit

Permalink
Merge pull request #525 from PHPCSStandards/feature/utilitymethodtest…
Browse files Browse the repository at this point in the history
…case-improve-performance

UtilityMethodTestCase: performance improvement
  • Loading branch information
jrfnl authored Dec 7, 2023
2 parents f76bab4 + 9e0ef95 commit dc93c9a
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions PHPCSUtils/TestUtils/UtilityMethodTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use PHPCSUtils\Exceptions\TestTargetNotFound;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use ReflectionProperty;

/**
* Base class for use when testing utility methods for PHP_CodeSniffer.
Expand Down Expand Up @@ -208,9 +209,22 @@ public static function setUpTestFile()

$contents = \file_get_contents($caseFile);

/*
* Set the static properties in the Config class to specific values for performance
* and to clear out values from other tests.
*/
self::setStaticConfigProperty('executablePaths', []);

// Set to values which prevent the test-runner user's `CodeSniffer.conf` file
// from being read and influencing the tests. Also prevent an `exec()` call to stty.
self::setStaticConfigProperty('configData', ['report_width' => 80]);
self::setStaticConfigProperty('configDataFile', '');

$config = new \PHP_CodeSniffer\Config();

/*
* Set to a usable value to circumvent Config trying to find a phpcs.xml config file.
*
* We just need to provide a standard so PHPCS will tokenize the file.
* The standard itself doesn't actually matter for testing utility methods,
* so use the smallest one to get the fastest results.
Expand Down Expand Up @@ -298,6 +312,27 @@ public static function resetTestFile()
self::$tabWidth = 4;
self::$phpcsFile = null;
self::$selectedSniff = ['Dummy.Dummy.Dummy'];

// Reset the static properties in the Config class to their defaults to prevent tests influencing each other.
self::setStaticConfigProperty('executablePaths', []);
self::setStaticConfigProperty('configData', null);
self::setStaticConfigProperty('configDataFile', null);
}

/**
* Helper function to set the value of a private static property on the PHPCS Config class.
*
* @param string $name The name of the property to set.
* @param mixed $value The value to set the property to.
*
* @return void
*/
public static function setStaticConfigProperty($name, $value)
{
$property = new ReflectionProperty('PHP_CodeSniffer\Config', $name);
$property->setAccessible(true);
$property->setValue(null, $value);
$property->setAccessible(false);
}

/**
Expand Down

0 comments on commit dc93c9a

Please sign in to comment.