public function testAllowsEditingRootNodeOnEnterAndLeave()
{
$ast = Parser::parse('{ a, b, c { a, b, c } }', ['noLocation' => true]);
$definitions = $ast->definitions;
$editedAst = Visitor::visit($ast, [NodeKind::DOCUMENT => ['enter' => function (DocumentNode $node) {
$tmp = clone $node;
$tmp->definitions = [];
$tmp->didEnter = true;
return $tmp;
}, 'leave' => function (DocumentNode $node) use($definitions) {
$tmp = clone $node;
$node->definitions = $definitions;
$node->didLeave = true;
}]]);
$this->assertNotEquals($ast, $editedAst);
$tmp = $ast->cloneDeep();
$tmp->didEnter = true;
$tmp->didLeave = true;
$this->assertEquals($tmp, $editedAst);
}