@@ -20,12 +20,39 @@ class FindExtendedClassNameTest 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 ->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+
2350 /**
2451 * Test retrieving the name of the class being extended by another class
2552 * (or interface).
2653 *
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.
2956 *
3057 * @dataProvider dataExtendedClass
3158 *
@@ -45,50 +72,70 @@ public function testFindExtendedClassName($identifier, $expected)
4572 *
4673 * @see testFindExtendedClassName()
4774 *
48- * @return array
75+ * @return array<string, array<string, string|false>>
4976 */
5077 public function dataExtendedClass ()
5178 {
5279 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 ' ,
56103 ],
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 ' ,
60107 ],
61- [
62- '/* testNonExtendedClass */ ' ,
63- false ,
108+ ' anon class extends unqualified class ' => [
109+ 'identifier ' => ' /* testExtendedAnonClass */ ' ,
110+ ' expected ' => ' testFECNExtendedAnonClass ' ,
64111 ],
65- [
66- '/* testInterface */ ' ,
67- false ,
112+ ' class does not extend but contains anon class which extends ' => [
113+ 'identifier ' => ' /* testNestedExtendedClass */ ' ,
114+ ' expected ' => false ,
68115 ],
69- [
70- '/* testInterfaceThatExtendsInterface */ ' ,
71- 'testFECNInterface ' ,
116+ ' anon class extends, nested in non-extended class ' => [
117+ 'identifier ' => ' /* testNestedExtendedAnonClass */ ' ,
118+ 'expected ' => ' testFECNAnonClass ' ,
72119 ],
73- [
74- '/* testInterfaceThatExtendsFQCNInterface */ ' ,
75- '\PHP_CodeSniffer\Tests\Core\File\testFECNInterface ' ,
120+ ' class extends and implements ' => [
121+ 'identifier ' => ' /* testClassThatExtendsAndImplements */ ' ,
122+ 'expected ' => ' testFECNClass ' ,
76123 ],
77- [
78- '/* testNestedExtendedClass */ ' ,
79- false ,
124+ ' class implements and extends ' => [
125+ 'identifier ' => ' /* testClassThatImplementsAndExtends */ ' ,
126+ ' expected ' => ' testFECNClass ' ,
80127 ],
81- [
82- '/* testNestedExtendedAnonClass */ ' ,
83- 'testFECNAnonClass ' ,
128+ ' interface extends multiple interfaces (not supported) ' => [
129+ 'identifier ' => ' /* testInterfaceMultiExtends */ ' ,
130+ 'expected ' => ' \Package\FooInterface ' ,
84131 ],
85- [
86- '/* testClassThatExtendsAndImplements */ ' ,
87- 'testFECNClass ' ,
132+ ' parse error - extends keyword, but no class name ' => [
133+ 'identifier ' => ' /* testMissingExtendsName */ ' ,
134+ 'expected ' => false ,
88135 ],
89- [
90- '/* testClassThatImplementsAndExtends */ ' ,
91- 'testFECNClass ' ,
136+ ' parse error - live coding - no curly braces ' => [
137+ 'identifier ' => ' /* testParseError */ ' ,
138+ 'expected ' => false ,
92139 ],
93140 ];
94141
0 commit comments