Skip to content

Commit f3ef81c

Browse files
committed
Tests/FindImplementedInterfaceNamesTest: add extra tests
This adds some extra tests which were already in use in PHPCSUtils. This brings test coverage for this method up to 100%. It also cleans up the test case file a little by removing some code which isn't actually used in the tests (namespace declaration) and moves the "class not implementing" test up.
1 parent d997e9c commit f3ef81c

File tree

2 files changed

+67
-12
lines changed

2 files changed

+67
-12
lines changed

tests/Core/File/FindImplementedInterfaceNamesTest.inc

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<?php
22

3-
namespace PHP_CodeSniffer\Tests\Core\File;
4-
5-
interface testFIINInterface2 {}
3+
/* testNotAClass */
4+
function notAClass() {}
65

76
/* testPlainInterface */
87
interface testFIINInterface {}
98

9+
/* testNonImplementedClass */
10+
class testFIINNonImplementedClass {}
11+
1012
/* testClassImplementsSingle */
1113
class testFIINImplementedClass implements testFIINInterface {}
1214

@@ -16,8 +18,8 @@ class testFIINMultiImplementedClass implements testFIINInterface, testFIINInterf
1618
/* testImplementsFullyQualified */
1719
class testFIINNamespacedClass implements \PHP_CodeSniffer\Tests\Core\File\testFIINInterface {}
1820

19-
/* testNonImplementedClass */
20-
class testFIINNonImplementedClass {}
21+
/* testImplementsPartiallyQualified */
22+
class testFIINQualifiedClass implements Core\File\RelativeInterface {}
2123

2224
/* testClassThatExtendsAndImplements */
2325
class testFECNClassThatExtendsAndImplements extends testFECNClass implements InterfaceA, \NameSpaced\Cat\InterfaceB {}
@@ -33,3 +35,13 @@ enum Suit implements Colorful {}
3335

3436
/* testBackedEnumImplementsMulti */
3537
enum Suit: string implements Colorful, \Deck {}
38+
39+
/* testAnonClassImplementsSingle */
40+
$anon = class() implements testFIINInterface {}
41+
42+
/* testMissingImplementsName */
43+
class testMissingExtendsName implements { /* missing interface name */ } // Intentional parse error.
44+
45+
// Intentional parse error. Has to be the last test in the file.
46+
/* testParseError */
47+
class testParseError implements testInterface

tests/Core/File/FindImplementedInterfaceNamesTest.php

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,33 @@ class FindImplementedInterfaceNamesTest extends AbstractMethodUnitTest
2020
{
2121

2222

23+
/**
24+
* Test getting a `false` result when a non-existent token is passed.
25+
*
26+
* @return void
27+
*/
28+
public function testNonExistentToken()
29+
{
30+
$result = self::$phpcsFile->findImplementedInterfaceNames(100000);
31+
$this->assertFalse($result);
32+
33+
}//end testNonExistentToken()
34+
35+
36+
/**
37+
* Test getting a `false` result when a token other than one of the supported tokens is passed.
38+
*
39+
* @return void
40+
*/
41+
public function testNotAClass()
42+
{
43+
$token = $this->getTargetToken('/* testNotAClass */', [T_FUNCTION]);
44+
$result = self::$phpcsFile->findImplementedInterfaceNames($token);
45+
$this->assertFalse($result);
46+
47+
}//end testNotAClass()
48+
49+
2350
/**
2451
* Test retrieving the name(s) of the interfaces being implemented by a class.
2552
*
@@ -49,6 +76,14 @@ public function testFindImplementedInterfaceNames($identifier, $expected)
4976
public function dataImplementedInterface()
5077
{
5178
return [
79+
'interface declaration, no implements' => [
80+
'identifier' => '/* testPlainInterface */',
81+
'expected' => false,
82+
],
83+
'class does not implement' => [
84+
'identifier' => '/* testNonImplementedClass */',
85+
'expected' => false,
86+
],
5287
'class implements single interface, unqualified' => [
5388
'identifier' => '/* testClassImplementsSingle */',
5489
'expected' => ['testFIINInterface'],
@@ -64,13 +99,9 @@ public function dataImplementedInterface()
6499
'identifier' => '/* testImplementsFullyQualified */',
65100
'expected' => ['\PHP_CodeSniffer\Tests\Core\File\testFIINInterface'],
66101
],
67-
'class does not implement' => [
68-
'identifier' => '/* testNonImplementedClass */',
69-
'expected' => false,
70-
],
71-
'interface declaration, no implements' => [
72-
'identifier' => '/* testPlainInterface */',
73-
'expected' => false,
102+
'class implements single interface, partially qualified' => [
103+
'identifier' => '/* testImplementsPartiallyQualified */',
104+
'expected' => ['Core\File\RelativeInterface'],
74105
],
75106
'class extends and implements' => [
76107
'identifier' => '/* testClassThatExtendsAndImplements */',
@@ -101,6 +132,18 @@ public function dataImplementedInterface()
101132
'\Deck',
102133
],
103134
],
135+
'anon class implements single interface, unqualified' => [
136+
'identifier' => '/* testAnonClassImplementsSingle */',
137+
'expected' => ['testFIINInterface'],
138+
],
139+
'parse error - implements keyword, but no interface name' => [
140+
'identifier' => '/* testMissingImplementsName */',
141+
'expected' => false,
142+
],
143+
'parse error - live coding - no curly braces' => [
144+
'identifier' => '/* testParseError */',
145+
'expected' => false,
146+
],
104147
];
105148

106149
}//end dataImplementedInterface()

0 commit comments

Comments
 (0)