Skip to content

Commit 340247b

Browse files
committed
ContextHelper::is_in_array_comparison(): add basic tests
1 parent 1f6e183 commit 340247b

3 files changed

Lines changed: 156 additions & 1 deletion

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
/*
4+
* The below should NOT be recognized as being inside an array comparison function call.
5+
*/
6+
7+
some_function( /* testOtherFunctionCall */ $value );
8+
MyNamespace\in_array( /* testPartiallyQualifiedFunction */ $value, $haystack );
9+
\MyNamespace\array_search( /* testFullyQualifiedNamespacedFunction */ $value, $haystack );
10+
namespace\array_keys( $array, /* testNamespaceRelativeFunction */ $value ); // The method should start recognizing this as an array comparison function once it can resolve relative namespaces.
11+
namespace\Sub\in_array( /* testNamespaceRelativeSubFunction */ $value, $haystack );
12+
$obj->array_search( /* testObjectMethod */ $value, $haystack );
13+
$obj?->array_keys( $array, /* testNullsafeObjectMethod */ $value );
14+
ArrayHelper::in_array( /* testStaticMethod */ $value, $haystack );
15+
array_keys( /* testArrayKeysFirstParamOnly */ $array );
16+
array_keys( array: /* testArrayKeysWrongNamedParam */ $array, search_value: 'value', strict: true );
17+
18+
/*
19+
* The below should be recognized as being inside an array comparison function call.
20+
*/
21+
22+
in_array( /* testInArray */ $value, $haystack );
23+
array_search( /* testArraySearch */ $value, $haystack );
24+
array_keys( $array, /* testArrayKeysWithFilterValue */ $value );
25+
array_keys( filter_value: /* testArrayKeysNamedParam */ $value, array: $array );
26+
IN_array( /* testMixedCaseFunction */ $value, $haystack );
27+
\array_search( /* testFullyQualifiedFunction */ $value, $haystack );
28+
\ARRAY_KEYS( $array, /* testFullyQualifiedUpperCaseFunction */ $value );
29+
in_array( my_function( /* testNestedFunctionCall */ $value ), $haystack );
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
/**
3+
* WordPress Coding Standard.
4+
*
5+
* @package WPCS\WordPressCodingStandards
6+
* @link https://github.com/WordPress/WordPress-Coding-Standards
7+
* @license https://opensource.org/licenses/MIT MIT
8+
*/
9+
10+
namespace WordPressCS\WordPress\Tests\Helpers\ContextHelper;
11+
12+
use PHPCSUtils\TestUtils\UtilityMethodTestCase;
13+
use WordPressCS\WordPress\Helpers\ContextHelper;
14+
15+
/**
16+
* Tests for the `ContextHelper::is_in_array_comparison()` utility method.
17+
*
18+
* @since 3.4.0
19+
*
20+
* @covers \WordPressCS\WordPress\Helpers\ContextHelper::is_in_array_comparison
21+
*/
22+
final class IsInArrayComparisonUnitTest extends UtilityMethodTestCase {
23+
24+
/**
25+
* Test is_in_array_comparison().
26+
*
27+
* @dataProvider dataIsInArrayComparison
28+
*
29+
* @param string $testMarker The comment which prefaces the target token in the test file.
30+
* @param bool $expectedResult The expected return value.
31+
*
32+
* @return void
33+
*/
34+
public function testIsInArrayComparison( $testMarker, $expectedResult ) {
35+
$stackPtr = $this->getTargetToken( $testMarker, \T_VARIABLE );
36+
$result = ContextHelper::is_in_array_comparison( self::$phpcsFile, $stackPtr );
37+
38+
$this->assertSame( $expectedResult, $result );
39+
}
40+
41+
/**
42+
* Data provider.
43+
*
44+
* @see testIsInArrayComparison()
45+
*
46+
* @return array<string, array<string, bool|string>>
47+
*/
48+
public static function dataIsInArrayComparison() {
49+
return array(
50+
// Cases that should return false.
51+
'other_function_call' => array(
52+
'testMarker' => '/* testOtherFunctionCall */',
53+
'expectedResult' => false,
54+
),
55+
'partially_qualified_function' => array(
56+
'testMarker' => '/* testPartiallyQualifiedFunction */',
57+
'expectedResult' => false,
58+
),
59+
'fully_qualified_namespaced_function' => array(
60+
'testMarker' => '/* testFullyQualifiedNamespacedFunction */',
61+
'expectedResult' => false,
62+
),
63+
'namespace_relative_function' => array(
64+
'testMarker' => '/* testNamespaceRelativeFunction */',
65+
'expectedResult' => false,
66+
),
67+
'namespace_relative_sub_function' => array(
68+
'testMarker' => '/* testNamespaceRelativeSubFunction */',
69+
'expectedResult' => false,
70+
),
71+
'object_method' => array(
72+
'testMarker' => '/* testObjectMethod */',
73+
'expectedResult' => false,
74+
),
75+
'nullsafe_object_method' => array(
76+
'testMarker' => '/* testNullsafeObjectMethod */',
77+
'expectedResult' => false,
78+
),
79+
'static_method' => array(
80+
'testMarker' => '/* testStaticMethod */',
81+
'expectedResult' => false,
82+
),
83+
'array_keys_first_param_only' => array(
84+
'testMarker' => '/* testArrayKeysFirstParamOnly */',
85+
'expectedResult' => false,
86+
),
87+
'array_keys_wrong_named_param' => array(
88+
'testMarker' => '/* testArrayKeysWrongNamedParam */',
89+
'expectedResult' => false,
90+
),
91+
92+
// Cases that should return true.
93+
'in_array' => array(
94+
'testMarker' => '/* testInArray */',
95+
'expectedResult' => true,
96+
),
97+
'array_search' => array(
98+
'testMarker' => '/* testArraySearch */',
99+
'expectedResult' => true,
100+
),
101+
'array_keys_with_filter_value' => array(
102+
'testMarker' => '/* testArrayKeysWithFilterValue */',
103+
'expectedResult' => true,
104+
),
105+
'array_keys_named_param' => array(
106+
'testMarker' => '/* testArrayKeysNamedParam */',
107+
'expectedResult' => true,
108+
),
109+
'mixed_case_function' => array(
110+
'testMarker' => '/* testMixedCaseFunction */',
111+
'expectedResult' => true,
112+
),
113+
'fully_qualified_function' => array(
114+
'testMarker' => '/* testFullyQualifiedFunction */',
115+
'expectedResult' => true,
116+
),
117+
'fully_qualified_upper_case_function' => array(
118+
'testMarker' => '/* testFullyQualifiedUpperCaseFunction */',
119+
'expectedResult' => true,
120+
),
121+
'nested_function_call' => array(
122+
'testMarker' => '/* testNestedFunctionCall */',
123+
'expectedResult' => true,
124+
),
125+
);
126+
}
127+
}

WordPress/Tests/Security/NonceVerificationUnitTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
*
2121
* @covers \WordPressCS\WordPress\Helpers\ContextHelper::is_in_type_test
2222
* @covers \WordPressCS\WordPress\Helpers\ContextHelper::is_in_isset_or_empty
23-
* @covers \WordPressCS\WordPress\Helpers\ContextHelper::is_in_array_comparison
2423
* @covers \WordPressCS\WordPress\Sniffs\Security\NonceVerificationSniff
2524
*/
2625
final class NonceVerificationUnitTest extends AbstractSniffUnitTest {

0 commit comments

Comments
 (0)