Skip to content

Commit

Permalink
Add initial integration tests for the Ruleset class
Browse files Browse the repository at this point in the history
  • Loading branch information
jrfnl committed Sep 22, 2019
1 parent fb04e08 commit 040a7a6
Show file tree
Hide file tree
Showing 8 changed files with 553 additions and 0 deletions.
23 changes: 23 additions & 0 deletions package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,15 @@ http://pear.php.net/dtd/package-2.0.xsd">
<file baseinstalldir="" name="AcceptTest.php" role="test" />
</dir>
</dir>
<dir name="Ruleset">
<file baseinstalldir="" name="RuleInclusionTest.php" role="test" />
<file baseinstalldir="" name="RuleInclusionTest.xml" role="test" />
<file baseinstalldir="" name="RuleInclusionTest-include.xml" role="test" />
<file baseinstalldir="" name="RuleInclusionAbsoluteLinuxTest.php" role="test" />
<file baseinstalldir="" name="RuleInclusionAbsoluteLinuxTest.xml" role="test" />
<file baseinstalldir="" name="RuleInclusionAbsoluteWindowsTest.php" role="test" />
<file baseinstalldir="" name="RuleInclusionAbsoluteWindowsTest.xml" role="test" />
</dir>
<dir name="Tokenizer">
<file baseinstalldir="" name="AnonClassParenthesisOwnerTest.inc" role="test" />
<file baseinstalldir="" name="AnonClassParenthesisOwnerTest.php" role="test" />
Expand Down Expand Up @@ -2063,6 +2072,13 @@ http://pear.php.net/dtd/package-2.0.xsd">
<install as="CodeSniffer/Core/File/IsReferenceTest.inc" name="tests/Core/File/IsReferenceTest.inc" />
<install as="CodeSniffer/Core/Filters/Filter/AcceptTest.php" name="tests/Core/Filters/Filter/AcceptTest.php" />
<install as="CodeSniffer/Core/Filters/Filter/AcceptTest.xml" name="tests/Core/Filters/Filter/AcceptTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.php" name="tests/Core/Ruleset/RuleInclusionTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.xml" name="tests/Core/Ruleset/RuleInclusionTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest-include.xml" name="tests/Core/Ruleset/RuleInclusionTest-include.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" />
<install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" />
<install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" />
<install as="CodeSniffer/Standards/AllSniffs.php" name="tests/Standards/AllSniffs.php" />
Expand Down Expand Up @@ -2102,6 +2118,13 @@ http://pear.php.net/dtd/package-2.0.xsd">
<install as="CodeSniffer/Core/File/IsReferenceTest.inc" name="tests/Core/File/IsReferenceTest.inc" />
<install as="CodeSniffer/Core/Filters/Filter/AcceptTest.php" name="tests/Core/Filters/Filter/AcceptTest.php" />
<install as="CodeSniffer/Core/Filters/Filter/AcceptTest.xml" name="tests/Core/Filters/Filter/AcceptTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.php" name="tests/Core/Ruleset/RuleInclusionTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest.xml" name="tests/Core/Ruleset/RuleInclusionTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionTest-include.xml" name="tests/Core/Ruleset/RuleInclusionTest-include.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php" />
<install as="CodeSniffer/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" name="tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml" />
<install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.php" />
<install as="CodeSniffer/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" name="tests/Core/Tokenizer/AnonClassParenthesisOwnerTest.inc" />
<install as="CodeSniffer/Standards/AllSniffs.php" name="tests/Standards/AllSniffs.php" />
Expand Down
111 changes: 111 additions & 0 deletions tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
<?php
/**
* Tests for the \PHP_CodeSniffer\Ruleset class using a Linux-style absolute path to include a sniff.
*
* @author Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
* @copyright 2019 Juliette Reinders Folmer. All rights reserved.
* @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/

namespace PHP_CodeSniffer\Tests\Core\Ruleset;

use PHP_CodeSniffer\Config;
use PHP_CodeSniffer\Ruleset;
use PHPUnit\Framework\TestCase;

class RuleInclusionAbsoluteLinuxTest extends TestCase
{

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

/**
* Path to the ruleset file.
*
* @var string
*/
private $standard = '';

/**
* The original content of the ruleset.
*
* @var string
*/
private $contents = '';


/**
* Initialize the config and ruleset objects.
*
* @return void
*/
public function setUp()
{
$this->standard = __DIR__.'/'.basename(__FILE__, '.php').'.xml';
$repoRootDir = dirname(dirname(dirname(__DIR__)));

// On-the-fly adjust the ruleset test file to be able to test sniffs included with absolute paths.
$contents = file_get_contents($this->standard);
$this->contents = $contents;

$newPath = $repoRootDir;
if (DIRECTORY_SEPARATOR === '\\') {
$newPath = str_replace('\\', '/', $repoRootDir);
}

$adjusted = str_replace('%path_slash_forward%', $newPath, $contents);

if (file_put_contents($this->standard, $adjusted) === false) {
$this->markTestSkipped('On the fly ruleset adjustment failed');
}

// Initialize the config and ruleset objects for the test.
$config = new Config(["--standard={$this->standard}"]);
$this->ruleset = new Ruleset($config);

}//end setUp()


/**
* Reset ruleset file.
*
* @return void
*/
public function tearDown()
{
file_put_contents($this->standard, $this->contents);

}//end tearDown()


/**
* Test that sniffs registed with a Linux absolute path are correctly recognized and that
* properties are correctly set for them.
*
* @return void
*/
public function testLinuxStylePathRuleInclusion()
{
// Test that the sniff is correctly registered.
$this->assertObjectHasAttribute('sniffCodes', $this->ruleset);
$this->assertCount(1, $this->ruleset->sniffCodes);
$this->assertArrayHasKey('Generic.Formatting.SpaceAfterNot', $this->ruleset->sniffCodes);
$this->assertSame(
'PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterNotSniff',
$this->ruleset->sniffCodes['Generic.Formatting.SpaceAfterNot']
);

// Test that the sniff properties are correctly set.
$this->assertSame(
'10',
$this->ruleset->sniffs['PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterNotSniff']->spacing
);

}//end testLinuxStylePathRuleInclusion()


}//end class
11 changes: 11 additions & 0 deletions tests/Core/Ruleset/RuleInclusionAbsoluteLinuxTest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="RuleInclusionAbsoluteLinuxTest" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">

<!-- %path_slash_forward% will be replaced on the fly -->
<rule ref="%path_slash_forward%/src/Standards/Generic/Sniffs/Formatting/SpaceAfterNotSniff.php">
<properties>
<property name="spacing" value="10" />
</properties>
</rule>

</ruleset>
112 changes: 112 additions & 0 deletions tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?php
/**
* Tests for the \PHP_CodeSniffer\Ruleset class using a Windows-style absolute path to include a sniff.
*
* @author Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
* @copyright 2019 Juliette Reinders Folmer. All rights reserved.
* @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/

namespace PHP_CodeSniffer\Tests\Core\Ruleset;

use PHP_CodeSniffer\Config;
use PHP_CodeSniffer\Ruleset;
use PHPUnit\Framework\TestCase;

class RuleInclusionAbsoluteWindowsTest extends TestCase
{

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

/**
* Path to the ruleset file.
*
* @var string
*/
private $standard = '';

/**
* The original content of the ruleset.
*
* @var string
*/
private $contents = '';


/**
* Initialize the config and ruleset objects.
*
* @return void
*/
public function setUp()
{
if (DIRECTORY_SEPARATOR === '/') {
$this->markTestSkipped('Windows specific test');
}

$this->standard = __DIR__.'/'.basename(__FILE__, '.php').'.xml';
$repoRootDir = dirname(dirname(dirname(__DIR__)));

// On-the-fly adjust the ruleset test file to be able to test sniffs included with absolute paths.
$contents = file_get_contents($this->standard);
$this->contents = $contents;

$adjusted = str_replace('%path_slash_back%', $repoRootDir, $contents);

if (file_put_contents($this->standard, $adjusted) === false) {
$this->markTestSkipped('On the fly ruleset adjustment failed');
}

// Initialize the config and ruleset objects for the test.
$config = new Config(["--standard={$this->standard}"]);
$this->ruleset = new Ruleset($config);

}//end setUp()


/**
* Reset ruleset file.
*
* @return void
*/
public function tearDown()
{
if (DIRECTORY_SEPARATOR !== '/') {
file_put_contents($this->standard, $this->contents);
}

}//end tearDown()


/**
* Test that sniffs registed with a Windows absolute path are correctly recognized and that
* properties are correctly set for them.
*
* @return void
*/
public function testWindowsStylePathRuleInclusion()
{
// Test that the sniff is correctly registered.
$this->assertObjectHasAttribute('sniffCodes', $this->ruleset);
$this->assertCount(1, $this->ruleset->sniffCodes);
$this->assertArrayHasKey('Generic.Formatting.SpaceAfterCast', $this->ruleset->sniffCodes);
$this->assertSame(
'PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterCastSniff',
$this->ruleset->sniffCodes['Generic.Formatting.SpaceAfterCast']
);

// Test that the sniff property is correctly set.
$this->assertSame(
'10',
$this->ruleset->sniffs['PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterCastSniff']->spacing
);

}//end testWindowsStylePathRuleInclusion()


}//end class
11 changes: 11 additions & 0 deletions tests/Core/Ruleset/RuleInclusionAbsoluteWindowsTest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="RuleInclusionAbsoluteWindowsTest" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">

<!-- %path_slash_back% will be replaced on the fly -->
<rule ref="%path_slash_back%\src\Standards\Generic\Sniffs\Formatting\SpaceAfterCastSniff.php">
<properties>
<property name="spacing" value="10" />
</properties>
</rule>

</ruleset>
10 changes: 10 additions & 0 deletions tests/Core/Ruleset/RuleInclusionTest-include.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="RuleInclusionTest-include" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">

<rule ref="Generic.Metrics.NestingLevel">
<properties>
<property name="nestingLevel" value="2" />
</properties>
</rule>

</ruleset>

0 comments on commit 040a7a6

Please sign in to comment.