@@ -20,12 +20,39 @@ class FindExtendedClassNameTest extends AbstractMethodUnitTest
20
20
{
21
21
22
22
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 ->findExtendedClassName (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 ->findExtendedClassName ($ token );
45
+ $ this ->assertFalse ($ result );
46
+
47
+ }//end testNotAClass()
48
+
49
+
23
50
/**
24
51
* Test retrieving the name of the class being extended by another class
25
52
* (or interface).
26
53
*
27
- * @param string $identifier Comment which precedes the test case.
28
- * @param bool $expected Expected function output.
54
+ * @param string $identifier Comment which precedes the test case.
55
+ * @param string|false $expected Expected function output.
29
56
*
30
57
* @dataProvider dataExtendedClass
31
58
*
@@ -45,50 +72,70 @@ public function testFindExtendedClassName($identifier, $expected)
45
72
*
46
73
* @see testFindExtendedClassName()
47
74
*
48
- * @return array
75
+ * @return array<string, array<string, string|false>>
49
76
*/
50
77
public function dataExtendedClass ()
51
78
{
52
79
return [
53
- [
54
- '/* testExtendedClass */ ' ,
55
- 'testFECNClass ' ,
80
+ 'class does not extend ' => [
81
+ 'identifier ' => '/* testNonExtendedClass */ ' ,
82
+ 'expected ' => false ,
83
+ ],
84
+ 'class extends unqualified class ' => [
85
+ 'identifier ' => '/* testExtendsUnqualifiedClass */ ' ,
86
+ 'expected ' => 'testFECNClass ' ,
87
+ ],
88
+ 'class extends fully qualified class ' => [
89
+ 'identifier ' => '/* testExtendsFullyQualifiedClass */ ' ,
90
+ 'expected ' => '\PHP_CodeSniffer\Tests\Core\File\testFECNClass ' ,
91
+ ],
92
+ 'class extends partially qualified class ' => [
93
+ 'identifier ' => '/* testExtendsPartiallyQualifiedClass */ ' ,
94
+ 'expected ' => 'Core\File\RelativeClass ' ,
95
+ ],
96
+ 'interface does not extend ' => [
97
+ 'identifier ' => '/* testNonExtendedInterface */ ' ,
98
+ 'expected ' => false ,
99
+ ],
100
+ 'interface extends unqualified interface ' => [
101
+ 'identifier ' => '/* testInterfaceExtendsUnqualifiedInterface */ ' ,
102
+ 'expected ' => 'testFECNInterface ' ,
56
103
],
57
- [
58
- '/* testNamespacedClass */ ' ,
59
- '\PHP_CodeSniffer\Tests\Core\File\testFECNClass ' ,
104
+ ' interface extends fully qualified interface ' => [
105
+ 'identifier ' => ' /* testInterfaceExtendsFullyQualifiedInterface */ ' ,
106
+ 'expected ' => ' \PHP_CodeSniffer\Tests\Core\File\testFECNInterface ' ,
60
107
],
61
- [
62
- '/* testNonExtendedClass */ ' ,
63
- false ,
108
+ ' anon class extends unqualified class ' => [
109
+ 'identifier ' => ' /* testExtendedAnonClass */ ' ,
110
+ ' expected ' => ' testFECNExtendedAnonClass ' ,
64
111
],
65
- [
66
- '/* testInterface */ ' ,
67
- false ,
112
+ ' class does not extend but contains anon class which extends ' => [
113
+ 'identifier ' => ' /* testNestedExtendedClass */ ' ,
114
+ ' expected ' => false ,
68
115
],
69
- [
70
- '/* testInterfaceThatExtendsInterface */ ' ,
71
- 'testFECNInterface ' ,
116
+ ' anon class extends, nested in non-extended class ' => [
117
+ 'identifier ' => ' /* testNestedExtendedAnonClass */ ' ,
118
+ 'expected ' => ' testFECNAnonClass ' ,
72
119
],
73
- [
74
- '/* testInterfaceThatExtendsFQCNInterface */ ' ,
75
- '\PHP_CodeSniffer\Tests\Core\File\testFECNInterface ' ,
120
+ ' class extends and implements ' => [
121
+ 'identifier ' => ' /* testClassThatExtendsAndImplements */ ' ,
122
+ 'expected ' => ' testFECNClass ' ,
76
123
],
77
- [
78
- '/* testNestedExtendedClass */ ' ,
79
- false ,
124
+ ' class implements and extends ' => [
125
+ 'identifier ' => ' /* testClassThatImplementsAndExtends */ ' ,
126
+ ' expected ' => ' testFECNClass ' ,
80
127
],
81
- [
82
- '/* testNestedExtendedAnonClass */ ' ,
83
- 'testFECNAnonClass ' ,
128
+ ' interface extends multiple interfaces (not supported) ' => [
129
+ 'identifier ' => ' /* testInterfaceMultiExtends */ ' ,
130
+ 'expected ' => ' \Package\FooInterface ' ,
84
131
],
85
- [
86
- '/* testClassThatExtendsAndImplements */ ' ,
87
- 'testFECNClass ' ,
132
+ ' parse error - extends keyword, but no class name ' => [
133
+ 'identifier ' => ' /* testMissingExtendsName */ ' ,
134
+ 'expected ' => false ,
88
135
],
89
- [
90
- '/* testClassThatImplementsAndExtends */ ' ,
91
- 'testFECNClass ' ,
136
+ ' parse error - live coding - no curly braces ' => [
137
+ 'identifier ' => ' /* testParseError */ ' ,
138
+ 'expected ' => false ,
92
139
],
93
140
];
94
141
0 commit comments