File tree Expand file tree Collapse file tree 5 files changed +121
-1
lines changed Expand file tree Collapse file tree 5 files changed +121
-1
lines changed Original file line number Diff line number Diff line change @@ -18,8 +18,10 @@ It also contains this framework-specific rule (can be enabled separately):
18
18
19
19
* Check that both values passed to ` assertSame() ` method are of the same type.
20
20
21
- It also contains this strict framework-specific rule (can be enabled separately):
21
+ It also contains this strict framework-specific rules (can be enabled separately):
22
22
23
+ * Check that you are not using ` assertSame() ` with ` true ` as expected value. ` assertTrue() ` should be used instead.
24
+ * Check that you are not using ` assertSame() ` with ` false ` as expected value. ` assertFalse() ` should be used instead.
23
25
* Check that you are not using ` assertSame() ` with ` null ` as expected value. ` assertNull() ` should be used instead.
24
26
25
27
## How to document mock objects in phpDocs?
Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace PHPStan \Rules \PHPUnit ;
4
+
5
+ use PhpParser \Node ;
6
+ use PHPStan \Analyser \Scope ;
7
+ use PHPStan \Type \FalseBooleanType ;
8
+ use PHPStan \Type \TrueBooleanType ;
9
+
10
+ class AssertSameBooleanExpectedRule implements \PHPStan \Rules \Rule
11
+ {
12
+
13
+ public function getNodeType (): string
14
+ {
15
+ return \PhpParser \NodeAbstract::class;
16
+ }
17
+
18
+ /**
19
+ * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node
20
+ * @param \PHPStan\Analyser\Scope $scope
21
+ * @return string[] errors
22
+ */
23
+ public function processNode (Node $ node , Scope $ scope ): array
24
+ {
25
+ if (!AssertRuleHelper::isMethodOrStaticCallOnTestCase ($ node , $ scope )) {
26
+ return [];
27
+ }
28
+
29
+ if (count ($ node ->args ) < 2 ) {
30
+ return [];
31
+ }
32
+ if (!is_string ($ node ->name ) || strtolower ($ node ->name ) !== 'assertsame ' ) {
33
+ return [];
34
+ }
35
+
36
+ $ leftType = $ scope ->getType ($ node ->args [0 ]->value );
37
+
38
+ if ($ leftType instanceof TrueBooleanType) {
39
+ return [
40
+ 'You should use assertTrue() instead of assertSame() when expecting "true" ' ,
41
+ ];
42
+ }
43
+
44
+ if ($ leftType instanceof FalseBooleanType) {
45
+ return [
46
+ 'You should use assertFalse() instead of assertSame() when expecting "false" ' ,
47
+ ];
48
+ }
49
+
50
+ return [];
51
+ }
52
+
53
+ }
Original file line number Diff line number Diff line change 1
1
services :
2
+ -
3
+ class : PHPStan\Rules\PHPUnit\AssertSameBooleanExpectedRule
4
+ tags :
5
+ - phpstan.rules.rule
2
6
-
3
7
class : PHPStan\Rules\PHPUnit\AssertSameNullExpectedRule
4
8
tags :
Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace PHPStan \Rules \PHPUnit ;
4
+
5
+ use PHPStan \Rules \Rule ;
6
+
7
+ class AssertSameBooleanExpectedRuleTest extends \PHPStan \Testing \RuleTestCase
8
+ {
9
+
10
+ protected function getRule (): Rule
11
+ {
12
+ return new AssertSameBooleanExpectedRule ();
13
+ }
14
+
15
+ public function testRule ()
16
+ {
17
+ $ this ->analyse ([__DIR__ . '/data/assert-same-boolean-expected.php ' ], [
18
+ [
19
+ 'You should use assertTrue() instead of assertSame() when expecting "true" ' ,
20
+ 10 ,
21
+ ],
22
+ [
23
+ 'You should use assertFalse() instead of assertSame() when expecting "false" ' ,
24
+ 11 ,
25
+ ],
26
+ [
27
+ 'You should use assertTrue() instead of assertSame() when expecting "true" ' ,
28
+ 14 ,
29
+ ],
30
+ [
31
+ 'You should use assertFalse() instead of assertSame() when expecting "false" ' ,
32
+ 17 ,
33
+ ],
34
+ ]);
35
+ }
36
+
37
+ }
Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace ExampleTestCase ;
4
+
5
+ class AssertSameBooleanExpectedTestCase extends \PHPUnit \Framework \TestCase
6
+ {
7
+
8
+ public function testAssertSameWithBooleanAsExpected ()
9
+ {
10
+ $ this ->assertSame (true , 'a ' );
11
+ $ this ->assertSame (false , 'a ' );
12
+
13
+ $ truish = true ;
14
+ $ this ->assertSame ($ truish , true );
15
+
16
+ $ falsish = false ;
17
+ $ this ->assertSame ($ falsish , false );
18
+
19
+ /** @var bool $a */
20
+ $ a = null ;
21
+ $ this ->assertSame ($ a , 'b ' ); // OK
22
+ }
23
+
24
+ }
You can’t perform that action at this time.
0 commit comments