/** * Add all sniff unit tests into a test suite. * * Sniff unit tests are found by recursing through the 'Tests' directory * of each installed coding standard. * * @return PHPUnit_Framework_TestSuite */ public static function suite() { $suite = new PHPUnit_Framework_TestSuite('PHP CodeSniffer Standards'); $isInstalled = !is_file(dirname(__FILE__) . '/../../CodeSniffer.php'); $installedPaths = PHP_CodeSniffer::getInstalledStandardPaths(); foreach ($installedPaths as $path) { $path = realpath($path); $origPath = $path; $standards = PHP_CodeSniffer::getInstalledStandards(true, $path); // If the test is running PEAR installed, the built-in standards // are split into different directories; one for the sniffs and // a different file system location for tests. if ($isInstalled === true && is_dir($path . DIRECTORY_SEPARATOR . 'Generic') === true) { $path = dirname(__FILE__); } foreach ($standards as $standard) { $testsDir = $path . DIRECTORY_SEPARATOR . $standard . DIRECTORY_SEPARATOR . 'Tests' . DIRECTORY_SEPARATOR; if (is_dir($testsDir) === false) { // No tests for this standard. continue; } $di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($testsDir)); foreach ($di as $file) { // Skip hidden files. if (substr($file->getFilename(), 0, 1) === '.') { continue; } // Tests must have the extension 'php'. $parts = explode('.', $file); $ext = array_pop($parts); if ($ext !== 'php') { continue; } $filePath = $file->getPathname(); $className = str_replace($path . DIRECTORY_SEPARATOR, '', $filePath); $className = substr($className, 0, -4); $className = str_replace(DIRECTORY_SEPARATOR, '_', $className); // Include the sniff here so tests can use it in their setup() methods. $parts = explode('_', $className); $sniffPath = $origPath . DIRECTORY_SEPARATOR . $parts[0] . DIRECTORY_SEPARATOR . 'Sniffs' . DIRECTORY_SEPARATOR . $parts[2] . DIRECTORY_SEPARATOR . $parts[3]; $sniffPath = substr($sniffPath, 0, -8) . 'Sniff.php'; include_once $sniffPath; include_once $filePath; $GLOBALS['PHP_CODESNIFFER_STANDARD_DIRS'][$className] = $path; $suite->addTestSuite($className); } //end foreach } //end foreach } //end foreach return $suite; }
/** * Autoload static method for loading classes and interfaces. * * @param string $className The name of the class or interface. * * @return void */ public static function autoload($className) { if (substr($className, 0, 4) === 'PHP_') { $newClassName = substr($className, 4); } else { $newClassName = $className; } $path = str_replace(array('_', '\\'), DIRECTORY_SEPARATOR, $newClassName) . '.php'; if (is_file(dirname(__FILE__) . DIRECTORY_SEPARATOR . $path) === true) { // Check standard file locations based on class name. include dirname(__FILE__) . DIRECTORY_SEPARATOR . $path; return; } else { // Check for included sniffs. $installedPaths = PHP_CodeSniffer::getInstalledStandardPaths(); foreach ($installedPaths as $installedPath) { if (is_file($installedPath . DIRECTORY_SEPARATOR . $path) === true) { include $installedPath . DIRECTORY_SEPARATOR . $path; return; } } // Check standard file locations based on the loaded rulesets. foreach (self::$rulesetDirs as $rulesetDir) { if (is_file(dirname($rulesetDir) . DIRECTORY_SEPARATOR . $path) === true) { include_once dirname($rulesetDir) . DIRECTORY_SEPARATOR . $path; return; } } } //end if // Everything else. @(include $path); }