1+ <?php
2+ namespace Test \Hal \Component \OOP ;
3+
4+ use Hal \Component \Token \TokenCollection ;
5+ use Hal \Metrics \Design \Component \MaintainabilityIndex \MaintainabilityIndex ;
6+ use Hal \Metrics \Design \Component \MaintainabilityIndex \Result ;
7+ use Hal \Component \OOP \Extractor \Extractor ;
8+ use Hal \Component \OOP \Extractor \MethodExtractor ;
9+ use Hal \Component \OOP \Extractor \Searcher ;
10+
11+ /**
12+ * @group oop
13+ * @group extractor
14+ * @group php7
15+ */
16+ class Php7AnonymousClassExtractorTest extends \PHPUnit_Framework_TestCase {
17+
18+ public function testAnonymousClassIsFound () {
19+
20+ $ filename = __DIR__ .'/../../../resources/oop/php7-1.php ' ;
21+ $ extractor = new Extractor (new \Hal \Component \Token \Tokenizer ());
22+ $ result = $ extractor ->extract ($ filename );
23+
24+ $ classes = $ result ->getClasses ();
25+ $ this ->assertEquals (2 , sizeof ($ classes ));
26+
27+ $ mother = $ classes [0 ];
28+ $ anonymous = $ classes [1 ];
29+ $ this ->assertEquals ('\\My \\Mother ' , $ mother ->getFullname (), 'mother class is found ' );
30+ $ this ->assertEquals ('class@anonymous ' , $ anonymous ->getName (), 'anonymous class is found ' );
31+ $ this ->assertEquals ('\\My \\Mother ' , $ anonymous ->getParent (), 'mother of anonymous class is found ' );
32+ $ this ->assertEquals ('\\' , $ anonymous ->getNamespace (), 'anonymous class is in default namespace ' );
33+ }
34+
35+ public function testInterfacesOfAnonymousClassAreFound () {
36+
37+ $ filename = __DIR__ .'/../../../resources/oop/php7-2.php ' ;
38+ $ extractor = new Extractor (new \Hal \Component \Token \Tokenizer ());
39+ $ result = $ extractor ->extract ($ filename );
40+
41+ $ classes = $ result ->getClasses ();
42+ $ this ->assertEquals (4 , sizeof ($ classes ));
43+
44+ $ mother = $ classes [0 ];
45+ $ interface1 = $ classes [1 ];
46+ $ interface2 = $ classes [2 ];
47+ $ anonymous = $ classes [3 ];
48+ $ this ->assertEquals ('\\My \\Mother ' , $ mother ->getFullname (), 'mother class is found ' );
49+ $ this ->assertEquals ('\\My \\Contract1 ' , $ interface1 ->getFullname (), 'interface is found ' );
50+ $ this ->assertEquals ('\\My \\Contract2 ' , $ interface2 ->getFullname (), 'interface is found ' );
51+ $ this ->assertEquals ('class@anonymous ' , $ anonymous ->getName (), 'anonymous class is found ' );
52+ $ this ->assertEquals ('\\My \\Mother ' , $ anonymous ->getParent (), 'mother of anonymous class is found ' );
53+ $ this ->assertEquals (array ('\\My \\Contract1 ' , '\\My \\Contract2 ' ), $ anonymous ->getInterfaces (), 'interfaces of anonymous class are found ' );
54+ }
55+
56+ public function testAnonymousClassDoesNotBreakMainClassExtractor () {
57+ $ filename = __DIR__ .'/../../../resources/oop/php7-3.php ' ;
58+ $ extractor = new Extractor (new \Hal \Component \Token \Tokenizer ());
59+ $ result = $ extractor ->extract ($ filename );
60+
61+ $ classes = $ result ->getClasses ();
62+ $ this ->assertEquals (2 , sizeof ($ classes ));
63+ $ main = $ classes [0 ];
64+ $ anonymous = $ classes [1 ];
65+ $ this ->assertEquals ('\\My \\MainClass ' , $ main ->getFullname ());
66+ $ this ->assertEquals ('class@anonymous ' , $ anonymous ->getName ());
67+
68+ $ methods = $ main ->getMethods ();
69+ $ this ->assertEquals (array ('foo ' , 'bar ' ), array_keys ($ main ->getMethods ()), 'Methods of class containing anonymous class are found ' );
70+ $ this ->assertEquals (array ('sub ' ), array_keys ($ anonymous ->getMethods ()), 'Methods of anonymous class contained in class are found ' );
71+ }
72+
73+ public function testInnerClassAreAttachedToMainClassExtractor () {
74+ $ filename = __DIR__ .'/../../../resources/oop/php7-4.php ' ;
75+ $ extractor = new Extractor (new \Hal \Component \Token \Tokenizer ());
76+ $ result = $ extractor ->extract ($ filename );
77+
78+ $ classes = $ result ->getClasses ();
79+ $ this ->assertEquals (4 , sizeof ($ classes ));
80+ $ main = $ classes [0 ];
81+ $ this ->assertEquals ('\\My \\MainClass ' , $ main ->getFullname ());
82+
83+ $ anonymousClasses = $ main ->getAnonymousClasses ();
84+ $ this ->assertEquals (3 , sizeof ($ anonymousClasses ));
85+ }
86+
87+ }
0 commit comments