Skip to content

Commit 92ca078

Browse files
committed
Tests/FindExtendedClassNameTest: 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 extended" test up.
1 parent f627f0e commit 92ca078

File tree

2 files changed

+69
-7
lines changed

2 files changed

+69
-7
lines changed

tests/Core/File/FindExtendedClassNameTest.inc

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

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

5-
class testFECNClass {}
6+
/* testNonExtendedClass */
7+
class testFECNNonExtendedClass {}
68

79
/* testExtendsUnqualifiedClass */
810
class testFECNExtendedClass extends testFECNClass {}
911

1012
/* testExtendsFullyQualifiedClass */
1113
class testFECNNamespacedClass extends \PHP_CodeSniffer\Tests\Core\File\testFECNClass {}
1214

13-
/* testNonExtendedClass */
14-
class testFECNNonExtendedClass {}
15+
/* testExtendsPartiallyQualifiedClass */
16+
class testFECNQualifiedClass extends Core\File\RelativeClass {}
1517

1618
/* testNonExtendedInterface */
1719
interface testFECNInterface {}
@@ -22,6 +24,9 @@ interface testInterfaceThatExtendsInterface extends testFECNInterface{}
2224
/* testInterfaceExtendsFullyQualifiedInterface */
2325
interface testInterfaceThatExtendsFQCNInterface extends \PHP_CodeSniffer\Tests\Core\File\testFECNInterface{}
2426

27+
/* testExtendedAnonClass */
28+
$anon = new class( $a, $b ) extends testFECNExtendedAnonClass {};
29+
2530
/* testNestedExtendedClass */
2631
class testFECNNestedExtendedClass {
2732
public function someMethod() {
@@ -35,3 +40,13 @@ class testFECNClassThatExtendsAndImplements extends testFECNClass implements Int
3540

3641
/* testClassThatImplementsAndExtends */
3742
class testFECNClassThatImplementsAndExtends implements InterfaceA, InterfaceB extends testFECNClass {}
43+
44+
/* testInterfaceMultiExtends */
45+
interface Multi extends \Package\FooInterface, \BarInterface {};
46+
47+
/* testMissingExtendsName */
48+
class testMissingExtendsName extends { /* missing classname */ } // Intentional parse error.
49+
50+
// Intentional parse error. Has to be the last test in the file.
51+
/* testParseError */
52+
class testParseError extends testFECNClass

tests/Core/File/FindExtendedClassNameTest.php

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,33 @@ 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).
@@ -50,6 +77,10 @@ public function testFindExtendedClassName($identifier, $expected)
5077
public function dataExtendedClass()
5178
{
5279
return [
80+
'class does not extend' => [
81+
'identifier' => '/* testNonExtendedClass */',
82+
'expected' => false,
83+
],
5384
'class extends unqualified class' => [
5485
'identifier' => '/* testExtendsUnqualifiedClass */',
5586
'expected' => 'testFECNClass',
@@ -58,9 +89,9 @@ public function dataExtendedClass()
5889
'identifier' => '/* testExtendsFullyQualifiedClass */',
5990
'expected' => '\PHP_CodeSniffer\Tests\Core\File\testFECNClass',
6091
],
61-
'class does not extend' => [
62-
'identifier' => '/* testNonExtendedClass */',
63-
'expected' => false,
92+
'class extends partially qualified class' => [
93+
'identifier' => '/* testExtendsPartiallyQualifiedClass */',
94+
'expected' => 'Core\File\RelativeClass',
6495
],
6596
'interface does not extend' => [
6697
'identifier' => '/* testNonExtendedInterface */',
@@ -74,6 +105,10 @@ public function dataExtendedClass()
74105
'identifier' => '/* testInterfaceExtendsFullyQualifiedInterface */',
75106
'expected' => '\PHP_CodeSniffer\Tests\Core\File\testFECNInterface',
76107
],
108+
'anon class extends unqualified class' => [
109+
'identifier' => '/* testExtendedAnonClass */',
110+
'expected' => 'testFECNExtendedAnonClass',
111+
],
77112
'class does not extend but contains anon class which extends' => [
78113
'identifier' => '/* testNestedExtendedClass */',
79114
'expected' => false,
@@ -90,6 +125,18 @@ public function dataExtendedClass()
90125
'identifier' => '/* testClassThatImplementsAndExtends */',
91126
'expected' => 'testFECNClass',
92127
],
128+
'interface extends multiple interfaces (not supported)' => [
129+
'identifier' => '/* testInterfaceMultiExtends */',
130+
'expected' => '\Package\FooInterface',
131+
],
132+
'parse error - extends keyword, but no class name' => [
133+
'identifier' => '/* testMissingExtendsName */',
134+
'expected' => false,
135+
],
136+
'parse error - live coding - no curly braces' => [
137+
'identifier' => '/* testParseError */',
138+
'expected' => false,
139+
],
93140
];
94141

95142
}//end dataExtendedClass()

0 commit comments

Comments
 (0)