Skip to content

Commit 7eeee37

Browse files
harm-lessharm-less
harm-less
authored and
harm-less
committed
Overwriting the default type gave some problems
If the default type was overwritten the type with the same name could not be added because it said it already existed which shouldn't be the case
1 parent 723c286 commit 7eeee37

File tree

7 files changed

+78
-1
lines changed

7 files changed

+78
-1
lines changed

src/PE/Nodes/EncoderNode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public static function addNode(EncoderNode $node) {
112112
// make this node the default one if no type has yet been specified
113113
if (count(self::getNodeTypes($nodeName)) == 0) {
114114
// set the default type name so it can be registered as a type
115-
$node->typeName = $node->getDefaultType();
115+
$node->typeName = self::DEFAULT_TYPE;
116116
self::addNodeType($node);
117117
}
118118

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace PE\Nodes\Specials;
4+
5+
use PE\Nodes\EncoderNode;
6+
use PE\Nodes\EncoderNodeChild;
7+
8+
class HasDefaultTypeNode extends EncoderNode {
9+
10+
const NEW_DEFAULT_TYPE = 'should-be-the-default-type';
11+
12+
function __construct($nodeTypeName = null) {
13+
parent::__construct('has-default-types', 'has-default-type', '\\PE\\Samples\\Specials', $nodeTypeName);
14+
}
15+
16+
public function getDefaultType() {
17+
return self::NEW_DEFAULT_TYPE;
18+
}
19+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace PE\Nodes\Specials;
4+
5+
class HasDefaultTypeTypeNode extends HasDefaultTypeNode {
6+
7+
function __construct() {
8+
parent::__construct(HasDefaultTypeNode::NEW_DEFAULT_TYPE);
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace PE\Samples\Specials;
4+
5+
class HasDefaultType {
6+
7+
function __construct() {
8+
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace PE\Samples\Specials;
4+
5+
class HasDefaultTypeType {
6+
7+
function __construct() {
8+
9+
}
10+
}

tests/PE/Tests/Nodes/EncoderNodeTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PE\Nodes\EncoderNode;
77
use PE\Nodes\EncoderNodeChild;
88
use PE\Nodes\EncoderNodeVariable;
9+
use PE\Nodes\Specials\HasDefaultTypeNode;
910
use PE\Tests\Samples;
1011

1112
class EncoderNodeTest extends Samples
@@ -150,6 +151,15 @@ public function testStaticAddNodeTypeWithoutNodeType() {
150151
EncoderNode::addNodeType($this->nodeType());
151152
}
152153

154+
public function testOverwrittenDefaultType() {
155+
$hasDefaultTypeNode = $this->addHasDefaultTypeNode();
156+
$this->addHasDefaultTypeTypeNode();
157+
158+
$this->assertTrue(EncoderNode::nodeTypeExists($hasDefaultTypeNode->getNodeName(), 'default'));
159+
$this->assertTrue(EncoderNode::nodeTypeExists($hasDefaultTypeNode->getNodeName(), HasDefaultTypeNode::NEW_DEFAULT_TYPE));
160+
$this->assertEquals(count(EncoderNode::getNodeTypes()), 2);
161+
}
162+
153163
public function testStaticGetNodeTypeByObject() {
154164
$this->addBuildingNode();
155165
$houseNode = $this->addBuildingHouseNode();

tests/PE/Tests/Samples.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
use PE\Nodes\Specials\AddAfterDecodeParentNode;
2626
use PE\Nodes\Specials\ClassLoaderNode;
2727
use PE\Nodes\Specials\EncoderNodeVariableApplyToSetterNode;
28+
use PE\Nodes\Specials\HasDefaultTypeNode;
29+
use PE\Nodes\Specials\HasDefaultTypeTypeNode;
2830
use PE\Nodes\Specials\NonArrayGetterMethodOnPurposeNode;
2931
use PE\Nodes\Specials\RequiredConstructorVariablesNode;
3032
use PE\Nodes\Specials\SingleChildNode;
@@ -43,6 +45,8 @@
4345
use PE\Samples\General\Thing;
4446
use PE\Samples\General\Things;
4547
use PE\Samples\Specials\EncoderNodeVariableApplyToSetter;
48+
use PE\Samples\Specials\HasDefaultType;
49+
use PE\Samples\Specials\HasDefaultTypeType;
4650
use PE\Samples\Specials\NonArrayGetterMethodOnPurpose;
4751
use PE\Samples\Specials\AccessorMethodActionTypeNode;
4852
use PE\Samples\Specials\SingleChild;
@@ -200,6 +204,20 @@ public function addNonArrayGetterMethodNode() {
200204
}
201205

202206

207+
public function getHasDefaultType() {
208+
return new HasDefaultType();
209+
}
210+
public function addHasDefaultTypeNode() {
211+
return EncoderNode::addNode(new HasDefaultTypeNode());
212+
}
213+
public function getHasDefaultTypeType() {
214+
return new HasDefaultTypeType();
215+
}
216+
public function addHasDefaultTypeTypeNode() {
217+
return EncoderNode::addNodeType(new HasDefaultTypeTypeNode());
218+
}
219+
220+
203221
public function getNonArrayGetterMethodOnPurpose() {
204222
return new NonArrayGetterMethodOnPurpose();
205223
}

0 commit comments

Comments
 (0)