@@ -141,7 +141,7 @@ public function traversalEntersAndLeavesGrandChildrenBeforeLeavingChildren(): vo
141
141
#[Test]
142
142
public function nodeIsRemovedFromDomIfVisitorReturnsRemoveNode (): void
143
143
{
144
- $ nodeRemovingVisitor = new class extends CollectingDomNodeVisitor {
144
+ $ nodeRemovingVisitor = new class () extends CollectingDomNodeVisitor {
145
145
public function enterNode (\DOMNode $ node ): \DOMNode |int
146
146
{
147
147
parent ::enterNode ($ node );
@@ -150,7 +150,6 @@ public function enterNode(\DOMNode $node): \DOMNode|int
150
150
}
151
151
return $ node ;
152
152
}
153
-
154
153
};
155
154
$ document = new \DOMDocument ();
156
155
$ document ->loadXML (<<<XML
@@ -169,22 +168,25 @@ public function enterNode(\DOMNode $node): \DOMNode|int
169
168
'afterTraversal:#document ' ,
170
169
], $ nodeRemovingVisitor ->calls );
171
170
172
- self ::assertXmlStringEqualsXmlString ('<Root></Root> ' , $ document ->saveXML ());
171
+ self ::assertXmlStringEqualsXmlString ('<Root></Root> ' , $ document ->saveXML () ?: '' );
173
172
}
174
173
175
174
#[Test]
176
175
public function nodeIsReplacedIfVisitorReturnsNewDomNode (): void
177
176
{
178
- $ nodeRemovingVisitor = new class extends CollectingDomNodeVisitor {
177
+ $ nodeRemovingVisitor = new class () extends CollectingDomNodeVisitor {
179
178
public function enterNode (\DOMNode $ node ): \DOMNode |int
180
179
{
181
180
parent ::enterNode ($ node );
182
181
if ($ node ->nodeName === 'Child ' ) {
182
+ if ($ node ->ownerDocument === null ) {
183
+ throw new \RuntimeException ('Node does not have an ownerDocument, cannot create element ' );
184
+ }
185
+
183
186
return $ node ->ownerDocument ->createElement ('NewChild ' );
184
187
}
185
188
return $ node ;
186
189
}
187
-
188
190
};
189
191
$ document = new \DOMDocument ();
190
192
$ document ->loadXML (<<<XML
@@ -203,14 +205,17 @@ public function enterNode(\DOMNode $node): \DOMNode|int
203
205
'afterTraversal:#document ' ,
204
206
], $ nodeRemovingVisitor ->calls );
205
207
206
- self ::assertXmlStringEqualsXmlString ('<Root><NewChild></NewChild></Root> ' , $ document ->saveXML ());
208
+ self ::assertXmlStringEqualsXmlString ('<Root><NewChild></NewChild></Root> ' , $ document ->saveXML () ?: '' );
207
209
}
208
210
209
- private function getCollectingDomNodeVisitor (): DomNodeVisitor
211
+ private function getCollectingDomNodeVisitor (): CollectingDomNodeVisitor
210
212
{
211
213
return new CollectingDomNodeVisitor ();
212
214
}
213
215
216
+ /**
217
+ * @param list<string> $recorder
218
+ */
214
219
private function getCallRecordingDomNodeVisitor (string $ visitorName , array &$ recorder ): DomNodeVisitor
215
220
{
216
221
return new class ($ visitorName , $ recorder ) implements DomNodeVisitor {
@@ -219,7 +224,7 @@ private function getCallRecordingDomNodeVisitor(string $visitorName, array &$rec
219
224
*/
220
225
public function __construct (
221
226
private readonly string $ visitorName ,
222
- private array &$ calls
227
+ public array &$ calls // only public to please PHPStan
223
228
) {
224
229
}
225
230
@@ -245,4 +250,4 @@ public function afterTraversal(\DOMNode $rootNode): void
245
250
}
246
251
};
247
252
}
248
- }
253
+ }
0 commit comments