Skip to content

Commit 5a561df

Browse files
committedAug 4, 2018
Fixes #51
1 parent 37c126e commit 5a561df

File tree

7 files changed

+71
-47
lines changed

7 files changed

+71
-47
lines changed
 

‎src/model/parts/InterfacesPart.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ trait InterfacesPart {
1515

1616
/** @var Set */
1717
private $interfaces;
18-
18+
1919
private function initInterfaces() {
2020
$this->interfaces = new Set();
2121
}
@@ -97,11 +97,11 @@ public function hasInterfaces() {
9797
*/
9898
public function hasInterface($interface) {
9999
if ($interface instanceof PhpInterface) {
100-
return $this->interfaces->contains($interface->getName())
100+
return $this->interfaces->contains($interface->getName())
101101
|| $this->interfaces->contains($interface->getQualifiedName());
102102
}
103103

104-
return $this->hasInterface(new PhpInterface($interface));
104+
return $this->interfaces->contains($interface) || $this->hasInterface(new PhpInterface($interface));
105105
}
106106

107107
/**

‎src/parser/visitor/ClassParserVisitor.php

+8-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
use PhpParser\Node\Stmt\Class_;
66

77
class ClassParserVisitor extends StructParserVisitor {
8-
8+
99
use StructParserPart;
1010

1111
public function visitClass(Class_ $node) {
1212
$struct = $this->getStruct();
13-
13+
1414
if ($node->extends !== null) {
1515
if ($node->extends->getType() === 'Name_FullyQualified') {
1616
$struct->setParentClassName('\\' . implode('\\', $node->extends->parts));
@@ -19,8 +19,12 @@ public function visitClass(Class_ $node) {
1919
}
2020
}
2121

22-
foreach ($node->implements as $name) {
23-
$struct->addInterface(implode('\\', $name->parts));
22+
foreach ($node->implements as $interface) {
23+
if ($interface->getType() === 'Name_FullyQualified') {
24+
$struct->addInterface('\\' . implode('\\', $interface->parts));
25+
} else {
26+
$struct->addInterface(implode('\\', $interface->parts));
27+
}
2428
}
2529

2630
$struct->setAbstract($node->isAbstract());

‎tests/fixtures/MyCollection.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
<?php
22
class MyCollection extends phootwork\collection\AbstractCollection implements phootwork\collection\Collection {
3-
4-
}
3+
}

‎tests/fixtures/MyCollection2.php

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
<?php
22
class MyCollection2 extends \phootwork\collection\AbstractCollection implements \phootwork\collection\Collection {
3-
43
}

‎tests/generator/ClassGeneratorTest.php

+42-24
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* @group generator
1313
*/
1414
class ClassGeneratorTest extends \PHPUnit_Framework_TestCase {
15-
15+
1616
use TestUtils;
1717

1818
public function testSignature() {
@@ -24,103 +24,121 @@ public function testSignature() {
2424

2525
$this->assertEquals($expected, $code);
2626
}
27-
27+
2828
public function testAbstract() {
2929
$expected = 'abstract class MyClass {' . "\n" . '}';
30-
30+
3131
$class = PhpClass::create('MyClass')->setAbstract(true);
3232
$generator = new ModelGenerator();
3333
$code = $generator->generate($class);
34-
34+
3535
$this->assertEquals($expected, $code);
3636
}
37-
37+
3838
public function testFinal() {
3939
$expected = 'final class MyClass {' . "\n" . '}';
40-
40+
4141
$class = PhpClass::create('MyClass')->setFinal(true);
4242
$generator = new ModelGenerator();
4343
$code = $generator->generate($class);
44-
44+
4545
$this->assertEquals($expected, $code);
4646
}
47-
47+
4848
public function testInterfaces() {
4949
$generator = new ModelGenerator();
50-
50+
5151
$expected = 'class MyClass implements \Iterator {' . "\n" . '}';
5252
$class = PhpClass::create('MyClass')->addInterface('\Iterator');
5353
$this->assertEquals($expected, $generator->generate($class));
54-
54+
5555
$expected = 'class MyClass implements \Iterator, \ArrayAccess {' . "\n" . '}';
5656
$class = PhpClass::create('MyClass')->addInterface('\Iterator')->addInterface('\ArrayAccess');
5757
$this->assertEquals($expected, $generator->generate($class));
5858
}
5959

6060
public function testParent() {
6161
$expected = 'class MyClass extends MyParent {' . "\n" . '}';
62-
62+
6363
$class = PhpClass::create('MyClass')->setParentClassName('MyParent');
6464
$generator = new ModelGenerator();
6565
$code = $generator->generate($class);
66-
66+
6767
$this->assertEquals($expected, $code);
6868
}
6969

7070
public function testUseStatements() {
7171
$class = new PhpClass('Foo\\Bar');
7272
$class->addUseStatement('Bam\\Baz');
73-
73+
7474
$codegen = new CodeFileGenerator(['generateDocblock' => false, 'generateEmptyDocblock' => false]);
7575
$code = $codegen->generate($class);
76-
76+
7777
$this->assertEquals($this->getGeneratedContent('FooBar.php'), $code);
78-
78+
7979
$class = new PhpClass('Foo\\Bar');
8080
$class->addUseStatement('Bam\\Baz', 'BamBaz');
81-
81+
8282
$codegen = new CodeFileGenerator(['generateDocblock' => false, 'generateEmptyDocblock' => false]);
8383
$code = $codegen->generate($class);
84-
84+
8585
$this->assertEquals($this->getGeneratedContent('FooBarWithAlias.php'), $code);
86-
86+
8787
$class = new PhpClass('Foo');
8888
$class->addUseStatement('Bar');
89-
89+
9090
$generator = new ModelGenerator();
9191
$code = $generator->generate($class);
9292
$expected = 'class Foo {' . "\n" . '}';
93-
93+
9494
$this->assertEquals($expected, $code);
9595
}
9696

9797
public function testABClass() {
9898
$class = Fixtures::createABClass();
99-
99+
100100
$modelGenerator = new ModelGenerator();
101101
$modelCode = $modelGenerator->generate($class);
102102
$this->assertEquals($this->getGeneratedContent('ABClass.php'), $modelCode);
103103
$generator = new CodeGenerator(['generateDocblock' => false]);
104104
$code = $generator->generate($class);
105105
$this->assertEquals($modelCode, $code);
106-
106+
107107
$modelGenerator = new ModelGenerator(['generateDocblock' => true]);
108108
$modelCode = $modelGenerator->generate($class);
109109
$this->assertEquals($this->getGeneratedContent('ABClassWithComments.php'), $modelCode);
110110
$generator = new CodeGenerator(['generateDocblock' => true]);
111111
$code = $generator->generate($class);
112112
$this->assertEquals($modelCode, $code);
113113
}
114-
114+
115115
public function testRequireTraitsClass() {
116116
$class = PhpClass::create('RequireTraitsClass')
117117
->addRequiredFile('FooBar.php')
118118
->addRequiredFile('ABClass.php')
119119
->addTrait('Iterator');
120-
120+
121121
$generator = new ModelGenerator();
122122
$code = $generator->generate($class);
123123
$this->assertEquals($this->getGeneratedContent('RequireTraitsClass.php'), $code);
124124
}
125125

126+
public function testMyCollection() {
127+
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/MyCollection.php');
128+
129+
$generator = new CodeFileGenerator(['generateDocblock' => false]);
130+
$code = $generator->generate($class);
131+
132+
$this->assertEquals($this->getFixtureContent('MyCollection.php'), $code);
133+
}
134+
135+
public function testMyCollection2() {
136+
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/MyCollection2.php');
137+
138+
$generator = new CodeFileGenerator(['generateDocblock' => false]);
139+
$code = $generator->generate($class);
140+
141+
$this->assertEquals($this->getFixtureContent('MyCollection2.php'), $code);
142+
}
143+
126144
}

‎tests/model/ClassTest.php

+4
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ public function testInterfaces() {
133133
$this->assertTrue($class->hasUseStatement('other\name\space\Interface'));
134134
$this->assertSame($class, $class->removeInterface('other\name\space\Interface'));
135135
$this->assertTrue($class->hasUseStatement('other\name\space\Interface'));
136+
137+
$class->addInterface('\my\Interface');
138+
$this->assertTrue($class->hasInterface('\my\Interface'));
139+
$this->assertFalse($class->hasInterface('my\Interface'));
136140
}
137141

138142
public function testTraits() {

‎tests/parser/ClassParserTest.php

+13-13
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* @group parser
1111
*/
1212
class ClassParserTest extends \PHPUnit_Framework_TestCase {
13-
13+
1414
use ModelAssertions;
1515
use ValueTests;
1616

@@ -47,7 +47,7 @@ public function testClassWithConstants() {
4747

4848
$this->assertTrue($class->hasConstant('NMBR'));
4949
$this->assertEquals(300, $class->getConstant('NMBR')->getValue());
50-
50+
5151
$this->assertTrue($class->hasConstant('BAR'));
5252
$this->assertEquals('self::FOO', $class->getConstant('BAR')->getExpression());
5353
}
@@ -67,10 +67,18 @@ public function testClassWithValues() {
6767
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/ClassWithValues.php');
6868
$this->assertClassWithValues($class);
6969
}
70-
70+
71+
public function testTypeClass() {
72+
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/TypeClass.php');
73+
74+
$doSomething = $class->getMethod('doSomething');
75+
$options = $doSomething->getParameter('options');
76+
$this->assertEquals('Symfony\Component\OptionsResolver\OptionsResolver', $options->getType());
77+
}
78+
7179
public function testMyCollection() {
7280
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/MyCollection.php');
73-
81+
7482
$this->assertEquals('phootwork\collection\AbstractCollection', $class->getParentClassName());
7583
$this->assertTrue($class->hasInterface('phootwork\collection\Collection'));
7684
}
@@ -81,13 +89,5 @@ public function testMyCollection2() {
8189
$this->assertEquals('\phootwork\collection\AbstractCollection', $class->getParentClassName());
8290
$this->assertTrue($class->hasInterface('\phootwork\collection\Collection'));
8391
}
84-
85-
public function testTypeClass() {
86-
$class = PhpClass::fromFile(__DIR__ . '/../fixtures/TypeClass.php');
87-
88-
$doSomething = $class->getMethod('doSomething');
89-
$options = $doSomething->getParameter('options');
90-
$this->assertEquals('Symfony\Component\OptionsResolver\OptionsResolver', $options->getType());
91-
}
92-
92+
9393
}

0 commit comments

Comments
 (0)
Please sign in to comment.