Skip to content

Commit 264f758

Browse files
visitor-test: cleanup test for nodes with unknown kinds (#3034)
1 parent 0460fe9 commit 264f758

File tree

1 file changed

+43
-50
lines changed

1 file changed

+43
-50
lines changed

src/language/__tests__/visitor-test.js

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,49 @@ describe('Visitor', () => {
418418
]);
419419
});
420420

421+
it('visit nodes with unknown kinds but does not traverse deeper', () => {
422+
const customAST = parse('{ a }');
423+
// $FlowExpectedError[prop-missing]
424+
customAST.definitions[0].selectionSet.selections.push({
425+
kind: 'CustomField',
426+
name: { kind: 'Name', value: 'NamedNodeToBeSkipped' },
427+
selectionSet: {
428+
kind: 'SelectionSet',
429+
selections: [
430+
{
431+
kind: 'CustomField',
432+
name: { kind: 'Name', value: 'NamedNodeToBeSkipped' },
433+
},
434+
],
435+
},
436+
});
437+
438+
const visited = [];
439+
visit(customAST, {
440+
enter(node) {
441+
visited.push(['enter', node.kind, getValue(node)]);
442+
},
443+
leave(node) {
444+
visited.push(['leave', node.kind, getValue(node)]);
445+
},
446+
});
447+
448+
expect(visited).to.deep.equal([
449+
['enter', 'Document', undefined],
450+
['enter', 'OperationDefinition', undefined],
451+
['enter', 'SelectionSet', undefined],
452+
['enter', 'Field', undefined],
453+
['enter', 'Name', 'a'],
454+
['leave', 'Name', 'a'],
455+
['leave', 'Field', undefined],
456+
['enter', 'CustomField', undefined],
457+
['leave', 'CustomField', undefined],
458+
['leave', 'SelectionSet', undefined],
459+
['leave', 'OperationDefinition', undefined],
460+
['leave', 'Document', undefined],
461+
]);
462+
});
463+
421464
it('Legacy: visits variables defined in fragments', () => {
422465
const ast = parse('fragment a($v: Boolean = false) on t { f }', {
423466
noLocation: true,
@@ -845,56 +888,6 @@ describe('Visitor', () => {
845888
]);
846889
});
847890

848-
describe('Support for custom AST nodes', () => {
849-
const customAST = parse('{ a }');
850-
(customAST: any).definitions[0].selectionSet.selections.push({
851-
kind: 'CustomField',
852-
name: {
853-
kind: 'Name',
854-
value: 'b',
855-
},
856-
selectionSet: {
857-
kind: 'SelectionSet',
858-
selections: [
859-
{
860-
kind: 'CustomField',
861-
name: {
862-
kind: 'Name',
863-
value: 'c',
864-
},
865-
},
866-
],
867-
},
868-
});
869-
870-
it('does not traverse unknown node kinds', () => {
871-
const visited = [];
872-
visit(customAST, {
873-
enter(node) {
874-
visited.push(['enter', node.kind, getValue(node)]);
875-
},
876-
leave(node) {
877-
visited.push(['leave', node.kind, getValue(node)]);
878-
},
879-
});
880-
881-
expect(visited).to.deep.equal([
882-
['enter', 'Document', undefined],
883-
['enter', 'OperationDefinition', undefined],
884-
['enter', 'SelectionSet', undefined],
885-
['enter', 'Field', undefined],
886-
['enter', 'Name', 'a'],
887-
['leave', 'Name', 'a'],
888-
['leave', 'Field', undefined],
889-
['enter', 'CustomField', undefined],
890-
['leave', 'CustomField', undefined],
891-
['leave', 'SelectionSet', undefined],
892-
['leave', 'OperationDefinition', undefined],
893-
['leave', 'Document', undefined],
894-
]);
895-
});
896-
});
897-
898891
describe('visitInParallel', () => {
899892
// Note: nearly identical to the above test of the same test but
900893
// using visitInParallel.

0 commit comments

Comments
 (0)