PHP 8.3.31
Preview: RegisterSniffsTest.php Size: 10.27 KB
/proc/self/root/opt/cpanel/ea-wappspector/vendor/squizlabs/php_codesniffer/tests/Core/Ruleset/RegisterSniffsTest.php

<?php
/**
 * Test the Ruleset::registerSniffs() method.
 *
 * @author    Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
 * @copyright 2024 PHPCSStandards and contributors
 * @license   https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/HEAD/licence.txt BSD Licence
 */

namespace PHP_CodeSniffer\Tests\Core\Ruleset;

use PHP_CodeSniffer\Ruleset;
use PHP_CodeSniffer\Tests\ConfigDouble;
use PHPUnit\Framework\TestCase;

/**
 * Test the Ruleset::registerSniffs() method.
 *
 * @covers \PHP_CodeSniffer\Ruleset::registerSniffs
 */
final class RegisterSniffsTest extends TestCase
{

    /**
     * The Ruleset object.
     *
     * @var \PHP_CodeSniffer\Ruleset
     */
    private static $ruleset;

    /**
     * Original value of the $sniffs property on the Ruleset.
     *
     * @var array<string, \PHP_CodeSniffer\Sniffs\Sniff>
     */
    private static $originalSniffs = [];

    /**
     * List of Standards dir relative sniff files loaded for the PSR1 standard.
     *
     * @var array<string>
     */
    private static $psr1SniffFiles = [
        'Generic/Sniffs/Files/ByteOrderMarkSniff.php',
        'Generic/Sniffs/NamingConventions/UpperCaseConstantNameSniff.php',
        'Generic/Sniffs/PHP/DisallowAlternativePHPTagsSniff.php',
        'Generic/Sniffs/PHP/DisallowShortOpenTagSniff.php',
        'PSR1/Sniffs/Classes/ClassDeclarationSniff.php',
        'PSR1/Sniffs/Files/SideEffectsSniff.php',
        'PSR1/Sniffs/Methods/CamelCapsMethodNameSniff.php',
        'Squiz/Sniffs/Classes/ValidClassNameSniff.php',
    ];

    /**
     * Absolute paths to the sniff files loaded for the PSR1 standard.
     *
     * @var array<string>
     */
    private static $psr1SniffAbsolutePaths = [];


    /**
     * Initialize the config and ruleset objects which will be used for some of these tests.
     *
     * @beforeClass
     *
     * @return void
     */
    public static function initializeConfigAndRuleset()
    {
        // Set up the ruleset.
        $config        = new ConfigDouble(['--standard=PSR1']);
        self::$ruleset = new Ruleset($config);

        // Remember the original value of the Ruleset::$sniff property as the tests adjust it.
        self::$originalSniffs = self::$ruleset->sniffs;

        // Sort the value to make the tests stable as different OSes will read directories
        // in a different order and the order is not relevant for these tests. Just the values.
        ksort(self::$originalSniffs);

        // Update the sniff file list.
        $standardsDir  = dirname(dirname(dirname(__DIR__))).DIRECTORY_SEPARATOR;
        $standardsDir .= 'src'.DIRECTORY_SEPARATOR.'Standards'.DIRECTORY_SEPARATOR;

        self::$psr1SniffAbsolutePaths = self::relativeToAbsoluteSniffFiles($standardsDir, self::$psr1SniffFiles);

    }//end initializeConfigAndRuleset()


    /**
     * Convert relative paths to absolute paths and ensure the paths use the correct OS-specific directory separator.
     *
     * @param string        $baseDir       Directory to which these paths are relative to. Including trailing slash.
     * @param array<string> $relativePaths Relative paths.
     *
     * @return array<string>
     */
    public static function relativeToAbsoluteSniffFiles($baseDir, $relativePaths)
    {
        $fileList = [];
        foreach ($relativePaths as $sniffName) {
            $sniffFile  = str_replace('/', DIRECTORY_SEPARATOR, $sniffName);
            $sniffFile  = $baseDir.$sniffFile;
            $fileList[] = $sniffFile;
        }

        return $fileList;

    }//end relativeToAbsoluteSniffFiles()


    /**
     * Clear out the Ruleset::$sniffs property.
     *
     * @before
     *
     * @return void
     */
    protected function clearOutSniffs()
    {
        // Clear out the Ruleset::$sniffs property.
        self::$ruleset->sniffs = [];

    }//end clearOutSniffs()


    /**
     * Test that registering sniffs works as expected (simple base test case).
     *
     * @return void
     */
    public function testRegisteredSniffsShouldBeTheSame()
    {
        self::$ruleset->registerSniffs(self::$psr1SniffAbsolutePaths, [], []);

        // Make sure the same sniff list was recreated (but without the objects having been created yet).
        $this->assertSame(array_keys(self::$originalSniffs), array_keys(self::$ruleset->sniffs));
        $this->assertSame(array_keys(self::$originalSniffs), array_values(self::$ruleset->sniffs));

    }//end testRegisteredSniffsShouldBeTheSame()


    /**
     * Test that if only specific sniffs are requested, only those are registered.
     *
     * {@internal Can't test this via the CLI arguments due to some code in the Ruleset class
     * related to sniff tests.}
     *
     * @return void
     */
    public function testRegisteredSniffsWithRestrictions()
    {
        $restrictions = [
            'psr1\\sniffs\\classes\\classdeclarationsniff'    => true,
            'psr1\\sniffs\\files\\sideeffectssniff'           => true,
            'psr1\\sniffs\\methods\\camelcapsmethodnamesniff' => true,
        ];

        $expected = [
            'PHP_CodeSniffer\\Standards\\PSR1\\Sniffs\\Classes\\ClassDeclarationSniff',
            'PHP_CodeSniffer\\Standards\\PSR1\\Sniffs\\Files\\SideEffectsSniff',
            'PHP_CodeSniffer\\Standards\\PSR1\\Sniffs\\Methods\\CamelCapsMethodNameSniff',
        ];

        self::$ruleset->registerSniffs(self::$psr1SniffAbsolutePaths, $restrictions, []);

        $this->assertSame($expected, array_keys(self::$ruleset->sniffs));

    }//end testRegisteredSniffsWithRestrictions()


    /**
     * Test that sniffs excluded via the CLI are not registered.
     *
     * @return void
     */
    public function testRegisteredSniffsWithExclusions()
    {
        // Set up the ruleset.
        $args    = [
            '--standard=PSR1',
            '--exclude=PSR1.Classes.ClassDeclaration,PSR1.Files.SideEffects,PSR1.Methods.CamelCapsMethodName',
        ];
        $config  = new ConfigDouble($args);
        $ruleset = new Ruleset($config);

        $expected = [
            'PHP_CodeSniffer\\Standards\\Generic\\Sniffs\\Files\\ByteOrderMarkSniff',
            'PHP_CodeSniffer\\Standards\\Generic\\Sniffs\\NamingConventions\\UpperCaseConstantNameSniff',
            'PHP_CodeSniffer\\Standards\\Generic\\Sniffs\\PHP\\DisallowAlternativePHPTagsSniff',
            'PHP_CodeSniffer\\Standards\\Generic\\Sniffs\\PHP\\DisallowShortOpenTagSniff',
            'PHP_CodeSniffer\\Standards\\Squiz\\Sniffs\\Classes\\ValidClassNameSniff',
        ];

        $actual = array_keys($ruleset->sniffs);
        sort($actual);

        $this->assertSame($expected, $actual);

    }//end testRegisteredSniffsWithExclusions()


    /**
     * Test combining requesting specific sniffs and excluding a subset of those.
     *
     * @return void
     */
    public function testRegisteredSniffsBothRestrictionsAndExclusions()
    {
        $restrictions = [
            'generic\\sniffs\\namingconventions\\uppercaseconstantnamesniff' => true,
            'generic\\sniffs\\php\\disallowalternativephptagssniff'          => true,
            'generic\\sniffs\\php\\disallowshortopentagsniff'                => true,
            'psr1\\sniffs\\classes\\classdeclarationsniff'                   => true,
            'squiz\\sniffs\\classes\\validclassnamesniff'                    => true,
        ];

        $exclusions = [
            'squiz\\sniffs\\classes\\validclassnamesniff'                    => true,
            'generic\\sniffs\\php\\disallowalternativephptagssniff'          => true,
            'generic\\sniffs\\namingconventions\\uppercaseconstantnamesniff' => true,
        ];

        $expected = [
            'PHP_CodeSniffer\\Standards\\Generic\\Sniffs\\PHP\\DisallowShortOpenTagSniff',
            'PHP_CodeSniffer\\Standards\\PSR1\\Sniffs\\Classes\\ClassDeclarationSniff',
        ];

        self::$ruleset->registerSniffs(self::$psr1SniffAbsolutePaths, $restrictions, $exclusions);

        $this->assertSame($expected, array_keys(self::$ruleset->sniffs));

    }//end testRegisteredSniffsBothRestrictionsAndExclusions()


    /**
     * Verify that abstract sniffs are filtered out and not registered.
     *
     * @return void
     */
    public function testRegisterSniffsFiltersOutAbstractClasses()
    {
        $extraPathsBaseDir = __DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR;
        $extraPaths        = [
            'DirectoryExpansion/.hiddenAbove/src/MyStandard/Sniffs/AbstractSniff.php',
            'DirectoryExpansion/.hiddenAbove/src/MyStandard/Sniffs/CategoryB/AnotherAbstractSniff.php',
        ];
        $extraPaths        = self::relativeToAbsoluteSniffFiles($extraPathsBaseDir, $extraPaths);

        $fileList = self::$psr1SniffAbsolutePaths;
        foreach ($extraPaths as $path) {
            $fileList[] = $path;
        }

        self::$ruleset->registerSniffs($fileList, [], []);

        // Make sure the same sniff list was recreated (but without the objects having been created yet).
        $this->assertSame(array_keys(self::$originalSniffs), array_keys(self::$ruleset->sniffs));
        $this->assertSame(array_keys(self::$originalSniffs), array_values(self::$ruleset->sniffs));

    }//end testRegisterSniffsFiltersOutAbstractClasses()


    /**
     * Test that sniff files not in a "/Sniffs/" directory are filtered out and not registered.
     *
     * @return void
     */
    public function testRegisteredSniffsFiltersOutFilePathsWithoutSniffsDir()
    {
        $extraPathsBaseDir = __DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR;
        $extraPaths        = [
            'DirectoryExpansion/.hiddenAbove/src/MyStandard/Utils/NotInSniffsDirSniff.php',
            'DirectoryExpansion/.hiddenAbove/src/MyStandard/Utils/SubDir/NotInSniffsDirSniff.php',
        ];
        $extraPaths        = self::relativeToAbsoluteSniffFiles($extraPathsBaseDir, $extraPaths);

        $fileList = self::$psr1SniffAbsolutePaths;
        foreach ($extraPaths as $path) {
            $fileList[] = $path;
        }

        self::$ruleset->registerSniffs($fileList, [], []);

        // Make sure the same sniff list was recreated (but without the objects having been created yet).
        $this->assertSame(array_keys(self::$originalSniffs), array_keys(self::$ruleset->sniffs));
        $this->assertSame(array_keys(self::$originalSniffs), array_values(self::$ruleset->sniffs));

    }//end testRegisteredSniffsFiltersOutFilePathsWithoutSniffsDir()


}//end class

Directory Contents

Dirs: 1 × Files: 92

Name Size Perms Modified Actions
Fixtures DIR
- drwxr-xr-x 2025-11-04 16:30:35
Edit Download
3.83 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
217 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
11.11 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
10.83 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
512 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
547 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
425 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.48 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
337 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
643 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
330 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
2.51 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
332 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
333 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
325 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
434 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
364 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
5.35 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
621 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
508 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
515 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
469 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
2.49 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
349 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
374 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
247 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
8.16 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.42 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
742 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.23 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
556 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
4.67 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.55 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
465 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
4.13 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
369 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
21.06 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.99 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.18 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
345 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
592 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
394 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
6.12 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.39 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
0 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
420 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
201 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.13 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
362 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
439 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
997 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
12.43 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.67 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
11.24 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
24.71 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.31 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
317 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
12.04 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.81 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
355 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
2.08 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
446 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
444 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
454 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
445 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
2.71 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
10.27 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.28 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
482 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
3.19 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
479 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
364 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
18.56 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
1.84 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
728 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
732 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
729 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
338 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
343 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
376 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
439 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
354 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
16.73 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
371 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
367 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
373 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
373 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
369 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
513 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
360 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download
25.61 KB lrw-r--r-- 2025-11-04 16:30:35
Edit Download
622 B lrw-r--r-- 2025-11-04 16:30:35
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).