GraphQL\Tests\Language\VisitorTest::testAllowsEarlyExitFromLeavingDifferentPoints PHP Метод

testAllowsEarlyExitFromLeavingDifferentPoints() публичный Метод

    public function testAllowsEarlyExitFromLeavingDifferentPoints()
    {
        $visited = [];
        $ast = Parser::parse('{ a { y }, b { x } }');
        Visitor::visit($ast, Visitor::visitInParallel([['enter' => function ($node) use(&$visited) {
            $visited[] = ['break-a', 'enter', $node->kind, isset($node->value) ? $node->value : null];
        }, 'leave' => function ($node) use(&$visited) {
            $visited[] = ['break-a', 'leave', $node->kind, isset($node->value) ? $node->value : null];
            if ($node->kind === 'Field' && isset($node->name->value) && $node->name->value === 'a') {
                return Visitor::stop();
            }
        }], ['enter' => function ($node) use(&$visited) {
            $visited[] = ['break-b', 'enter', $node->kind, isset($node->value) ? $node->value : null];
        }, 'leave' => function ($node) use(&$visited) {
            $visited[] = ['break-b', 'leave', $node->kind, isset($node->value) ? $node->value : null];
            if ($node->kind === 'Field' && isset($node->name->value) && $node->name->value === 'b') {
                return Visitor::stop();
            }
        }]]));
        $this->assertEquals([['break-a', 'enter', 'Document', null], ['break-b', 'enter', 'Document', null], ['break-a', 'enter', 'OperationDefinition', null], ['break-b', 'enter', 'OperationDefinition', null], ['break-a', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'SelectionSet', null], ['break-a', 'enter', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-a', 'enter', 'Name', 'a'], ['break-b', 'enter', 'Name', 'a'], ['break-a', 'leave', 'Name', 'a'], ['break-b', 'leave', 'Name', 'a'], ['break-a', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'SelectionSet', null], ['break-a', 'enter', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-a', 'enter', 'Name', 'y'], ['break-b', 'enter', 'Name', 'y'], ['break-a', 'leave', 'Name', 'y'], ['break-b', 'leave', 'Name', 'y'], ['break-a', 'leave', 'Field', null], ['break-b', 'leave', 'Field', null], ['break-a', 'leave', 'SelectionSet', null], ['break-b', 'leave', 'SelectionSet', null], ['break-a', 'leave', 'Field', null], ['break-b', 'leave', 'Field', null], ['break-b', 'enter', 'Field', null], ['break-b', 'enter', 'Name', 'b'], ['break-b', 'leave', 'Name', 'b'], ['break-b', 'enter', 'SelectionSet', null], ['break-b', 'enter', 'Field', null], ['break-b', 'enter', 'Name', 'x'], ['break-b', 'leave', 'Name', 'x'], ['break-b', 'leave', 'Field', null], ['break-b', 'leave', 'SelectionSet', null], ['break-b', 'leave', 'Field', null]], $visited);
    }