Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1431908
GitModifiedTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
GitModifiedTest.php
View Options
<?php
/**
* Tests for the \PHP_CodeSniffer\Filters\GitModified class.
*
* @author Juliette Reinders Folmer <phpcs_nospam@adviesenzo.nl>
* @copyright 2023 PHPCSStandards Contributors
* @license https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/
namespace
PHP_CodeSniffer\Tests\Core\Filters
;
use
PHP_CodeSniffer\Filters\GitModified
;
use
PHP_CodeSniffer\Tests\Core\Filters\AbstractFilterTestCase
;
use
RecursiveArrayIterator
;
use
ReflectionMethod
;
/**
* Tests for the \PHP_CodeSniffer\Filters\GitModified class.
*
* @covers \PHP_CodeSniffer\Filters\GitModified
*/
final
class
GitModifiedTest
extends
AbstractFilterTestCase
{
/**
* Test filtering a file list for excluded paths.
*
* @return void
*/
public
function
testFileNamePassesAsBasePathWillTranslateToDirname
()
{
$rootFile
=
self
::
getBaseDir
().
'/autoload.php'
;
$fakeDI
=
new
RecursiveArrayIterator
(
self
::
getFakeFileList
());
$constructorArgs
=
[
$fakeDI
,
$rootFile
,
self
::
$config
,
self
::
$ruleset
,
];
$mockObj
=
$this
->
getMockedClass
(
'PHP_CodeSniffer
\F
ilters
\G
itModified'
,
$constructorArgs
,
[
'exec'
]);
$mockObj
->
expects
(
$this
->
once
())
->
method
(
'exec'
)
->
willReturn
([
'autoload.php'
]);
$this
->
assertEquals
([
$rootFile
],
$this
->
getFilteredResultsAsArray
(
$mockObj
));
}
//end testFileNamePassesAsBasePathWillTranslateToDirname()
/**
* Test filtering a file list for excluded paths.
*
* @param array<string> $inputPaths List of file paths to be filtered.
* @param array<string> $outputGitModified Simulated "git modified" output.
* @param array<string> $expectedOutput Expected filtering result.
*
* @dataProvider dataAcceptOnlyGitModified
*
* @return void
*/
public
function
testAcceptOnlyGitModified
(
$inputPaths
,
$outputGitModified
,
$expectedOutput
)
{
$fakeDI
=
new
RecursiveArrayIterator
(
$inputPaths
);
$constructorArgs
=
[
$fakeDI
,
self
::
getBaseDir
(),
self
::
$config
,
self
::
$ruleset
,
];
$mockObj
=
$this
->
getMockedClass
(
'PHP_CodeSniffer
\F
ilters
\G
itModified'
,
$constructorArgs
,
[
'exec'
]);
$mockObj
->
expects
(
$this
->
once
())
->
method
(
'exec'
)
->
willReturn
(
$outputGitModified
);
$this
->
assertEquals
(
$expectedOutput
,
$this
->
getFilteredResultsAsArray
(
$mockObj
));
}
//end testAcceptOnlyGitModified()
/**
* Data provider.
*
* @see testAcceptOnlyGitModified
*
* @return array<string, array<string, array<string>>>
*/
public
static
function
dataAcceptOnlyGitModified
()
{
$basedir
=
self
::
getBaseDir
();
$fakeFileList
=
self
::
getFakeFileList
();
$testCases
=
[
'no files marked as git modified'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[],
'expectedOutput'
=>
[],
],
'files marked as git modified which don
\'
t actually exist'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'src/WillNotExist.php'
,
'src/WillNotExist.bak'
,
'src/WillNotExist.orig'
,
],
'expectedOutput'
=>
[],
],
'single file marked as git modified - file in root dir'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'autoload.php'
,
],
'expectedOutput'
=>
[
$basedir
.
'/autoload.php'
,
],
],
'single file marked as git modified - file in sub dir'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'src/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.php'
,
],
'expectedOutput'
=>
[
$basedir
.
'/src'
,
$basedir
.
'/src/Standards'
,
$basedir
.
'/src/Standards/Generic'
,
$basedir
.
'/src/Standards/Generic/Sniffs'
,
$basedir
.
'/src/Standards/Generic/Sniffs/Classes'
,
$basedir
.
'/src/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.php'
,
],
],
'multiple files marked as git modified, none valid for scan'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'.gitignore'
,
'phpcs.xml.dist'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.js.fixed'
,
],
'expectedOutput'
=>
[
$basedir
.
'/src'
,
$basedir
.
'/src/Standards'
,
$basedir
.
'/src/Standards/Squiz'
,
$basedir
.
'/src/Standards/Squiz/Tests'
,
$basedir
.
'/src/Standards/Squiz/Tests/WhiteSpace'
,
],
],
'multiple files marked as git modified, only one file valid for scan'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'.gitignore'
,
'src/Standards/Generic/Docs/Classes/DuplicateClassNameStandard.xml'
,
'src/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.php'
,
],
'expectedOutput'
=>
[
$basedir
.
'/src'
,
$basedir
.
'/src/Standards'
,
$basedir
.
'/src/Standards/Generic'
,
$basedir
.
'/src/Standards/Generic/Docs'
,
$basedir
.
'/src/Standards/Generic/Docs/Classes'
,
$basedir
.
'/src/Standards/Generic/Sniffs'
,
$basedir
.
'/src/Standards/Generic/Sniffs/Classes'
,
$basedir
.
'/src/Standards/Generic/Sniffs/Classes/DuplicateClassNameSniff.php'
,
],
],
'multiple files marked as git modified, multiple files valid for scan'
=>
[
'inputPaths'
=>
$fakeFileList
,
'outputGitModified'
=>
[
'.yamllint.yml'
,
'autoload.php'
,
'src/Standards/Squiz/Sniffs/WhiteSpace/OperatorSpacingSniff.php'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.1.inc'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.1.inc.fixed'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.js'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.js.fixed'
,
'src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.php'
,
],
'expectedOutput'
=>
[
$basedir
.
'/autoload.php'
,
$basedir
.
'/src'
,
$basedir
.
'/src/Standards'
,
$basedir
.
'/src/Standards/Squiz'
,
$basedir
.
'/src/Standards/Squiz/Sniffs'
,
$basedir
.
'/src/Standards/Squiz/Sniffs/WhiteSpace'
,
$basedir
.
'/src/Standards/Squiz/Sniffs/WhiteSpace/OperatorSpacingSniff.php'
,
$basedir
.
'/src/Standards/Squiz/Tests'
,
$basedir
.
'/src/Standards/Squiz/Tests/WhiteSpace'
,
$basedir
.
'/src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.1.inc'
,
$basedir
.
'/src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.js'
,
$basedir
.
'/src/Standards/Squiz/Tests/WhiteSpace/OperatorSpacingUnitTest.php'
,
],
],
];
return
$testCases
;
}
//end dataAcceptOnlyGitModified()
/**
* Test filtering a file list for excluded paths.
*
* @param string $cmd Command to run.
* @param array<string> $expected Expected return value.
*
* @dataProvider dataExecAlwaysReturnsArray
*
* @return void
*/
public
function
testExecAlwaysReturnsArray
(
$cmd
,
$expected
)
{
if
(
is_dir
(
__DIR__
.
'/../../../.git'
)
===
false
)
{
$this
->
markTestSkipped
(
'Not a git repository'
);
}
$fakeDI
=
new
RecursiveArrayIterator
(
self
::
getFakeFileList
());
$filter
=
new
GitModified
(
$fakeDI
,
'/'
,
self
::
$config
,
self
::
$ruleset
);
$reflMethod
=
new
ReflectionMethod
(
$filter
,
'exec'
);
$reflMethod
->
setAccessible
(
true
);
$result
=
$reflMethod
->
invoke
(
$filter
,
$cmd
);
$this
->
assertSame
(
$expected
,
$result
);
}
//end testExecAlwaysReturnsArray()
/**
* Data provider.
*
* @see testExecAlwaysReturnsArray
*
* {@internal Missing: test with a command which yields a `false` return value.
* JRF: I've not managed to find a command which does so, let alone one, which then
* doesn't have side-effects of uncatchable output while running the tests.}
*
* @return array<string, array<string, string|array<string>>>
*/
public
static
function
dataExecAlwaysReturnsArray
()
{
return
[
'valid command which won
\'
t have any output unless files in the bin dir have been modified'
=>
[
// Largely using the command used in the filter, but only checking the bin dir.
// This should prevent the test unexpectedly failing during local development (in most cases).
'cmd'
=>
'git ls-files -o -m --exclude-standard -- '
.
escapeshellarg
(
self
::
getBaseDir
().
'/bin'
),
'expected'
=>
[],
],
'valid command which will have output'
=>
[
'cmd'
=>
'git ls-files --exclude-standard -- '
.
escapeshellarg
(
self
::
getBaseDir
().
'/bin'
),
'expected'
=>
[
'bin/phpcbf'
,
'bin/phpcbf.bat'
,
'bin/phpcs'
,
'bin/phpcs.bat'
,
],
],
];
}
//end dataExecAlwaysReturnsArray()
}
//end class
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, May 16, 21:12 (1 d, 15 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
07/54/f72deaa45cc29750521fb4f00c60
Default Alt Text
GitModifiedTest.php (10 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment