Skip to content

Commit d223c15

Browse files
committed
more tests
1 parent 818abd3 commit d223c15

File tree

5 files changed

+86
-9
lines changed

5 files changed

+86
-9
lines changed

src/main/java/graphql/analysis/QueryTraversal.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public TraversalControl visitInlineFragment(InlineFragment inlineFragment, Trave
135135

136136
// inline fragments are allowed not have type conditions, if so the parent type counts
137137
QueryTraversalContext parentEnv = context
138-
.parentContext()
138+
.getParentContext()
139139
.getVar(QueryTraversalContext.class);
140140

141141
GraphQLCompositeType fragmentCondition;
@@ -163,7 +163,7 @@ public TraversalControl visitFragmentSpread(FragmentSpread fragmentSpread, Trave
163163
return TraversalControl.ABORT;
164164

165165
QueryTraversalContext parentEnv = context
166-
.parentContext()
166+
.getParentContext()
167167
.getVar(QueryTraversalContext.class);
168168

169169
GraphQLCompositeType typeCondition = (GraphQLCompositeType) schema.getType(fragmentDefinition.getTypeCondition().getName());
@@ -176,7 +176,7 @@ public TraversalControl visitFragmentSpread(FragmentSpread fragmentSpread, Trave
176176
@Override
177177
public TraversalControl visitField(Field field, TraverserContext<Node> context) {
178178
QueryTraversalContext parentEnv = context
179-
.parentContext()
179+
.getParentContext()
180180
.getVar(QueryTraversalContext.class);
181181

182182
GraphQLFieldDefinition fieldDefinition = Introspection.getFieldDef(schema, parentEnv.getType(), field.getName());

src/main/java/graphql/util/SimpleTraverserContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public T thisNode() {
2121

2222

2323
@Override
24-
public TraverserContext<T> parentContext() {
24+
public TraverserContext<T> getParentContext() {
2525
return null;
2626
}
2727

src/main/java/graphql/util/TraverserContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public interface TraverserContext<T> {
2121
/**
2222
* Returns parent context.
2323
* Effectively organizes Context objects in a linked list so
24-
* by following {@link #parentContext() } links one could obtain
24+
* by following {@link #getParentContext() } links one could obtain
2525
* the current path as well as the variables {@link #getVar(java.lang.Class) }
2626
* stored in every parent context.
2727
*
@@ -30,7 +30,7 @@ public interface TraverserContext<T> {
3030
*
3131
* @return context associated with the node parent
3232
*/
33-
TraverserContext<T> parentContext();
33+
TraverserContext<T> getParentContext();
3434

3535
Object getParentResult();
3636

src/main/java/graphql/util/TraverserState.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import java.util.Collection;
77
import java.util.Deque;
88
import java.util.Iterator;
9+
import java.util.LinkedHashMap;
910
import java.util.LinkedHashSet;
1011
import java.util.List;
1112
import java.util.ListIterator;
1213
import java.util.Map;
1314
import java.util.Set;
14-
import java.util.concurrent.ConcurrentHashMap;
1515
import java.util.function.Function;
1616

1717
import static graphql.Assert.assertNotNull;
@@ -90,7 +90,7 @@ public void addVisited(T visited) {
9090
}
9191

9292
public TraverserContext<T> newContext(T o, TraverserContext<T> parent) {
93-
return newContext(o, parent, new ConcurrentHashMap<>());
93+
return newContext(o, parent, new LinkedHashMap<>());
9494
}
9595

9696
public TraverserContext<T> newContext(T curNode, TraverserContext<T> parent, Map<Class<?>, Object> vars) {
@@ -105,7 +105,7 @@ public T thisNode() {
105105
}
106106

107107
@Override
108-
public TraverserContext<T> parentContext() {
108+
public TraverserContext<T> getParentContext() {
109109
return parent;
110110
}
111111

src/test/groovy/graphql/util/TraverserTest.groovy

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class TraverserTest extends Specification {
2929
enter: { TraverserContext context ->
3030
preOrderNodes << context.thisNode().number
3131
println "enter:$preOrderNodes"
32+
context.setResult(context.thisNode())
3233
TraversalControl.CONTINUE
3334
},
3435
leave: { TraverserContext context ->
@@ -44,6 +45,7 @@ class TraverserTest extends Specification {
4445
then:
4546
!result.encounteredCycle
4647
result.fullTraversal
48+
result.result.number == 5
4749
preOrderNodes == [0, 1, 3, 2, 4, 5]
4850
postOrderNodes == [3, 1, 4, 5, 2, 0]
4951
}
@@ -56,6 +58,7 @@ class TraverserTest extends Specification {
5658
def visitor = [
5759
enter: { TraverserContext context ->
5860
enterData << context.thisNode().number
61+
context.setResult(context.thisNode())
5962
println "enter:$enterData"
6063
TraversalControl.CONTINUE
6164
},
@@ -71,6 +74,7 @@ class TraverserTest extends Specification {
7174
then:
7275
!result.encounteredCycle
7376
result.fullTraversal
77+
result.result.number == 5
7478
enterData == [0, 1, 2, 3, 4, 5]
7579
leaveData == [0, 1, 2, 3, 4, 5]
7680
}
@@ -256,5 +260,78 @@ class TraverserTest extends Specification {
256260
0 * visitor.backRef(_)
257261
}
258262

263+
264+
def "test context variables"() {
265+
given:
266+
def visitor = [
267+
enter: { TraverserContext context ->
268+
assert context.getParentContext().getVar(Object.class) == "var1"
269+
assert context.getParentContext().getVar(String.class) == "var2"
270+
context.setVar(Object.class, "var1")
271+
context.setVar(String.class, "var2")
272+
273+
TraversalControl.CONTINUE
274+
},
275+
leave: { TraverserContext context ->
276+
TraversalControl.CONTINUE
277+
}
278+
] as TraverserVisitor
279+
when:
280+
def result = Traverser.breadthFirst({ n -> n.children },)
281+
.rootVars([(Object.class): "var1", (String.class): "var2"])
282+
.traverse(root, visitor)
283+
284+
285+
then:
286+
true
287+
}
288+
289+
def "test parent result chain"() {
290+
given:
291+
def visitor = [
292+
enter: { TraverserContext context ->
293+
List visited = context.getParentResult()
294+
visited = visited == null ? new ArrayList<>() : visited
295+
visited.add(context.thisNode().number)
296+
context.setVar(List.class, visited)
297+
context.setResult(visited)
298+
TraversalControl.CONTINUE
299+
},
300+
leave: { TraverserContext context ->
301+
TraversalControl.CONTINUE
302+
}
303+
] as TraverserVisitor
304+
when:
305+
def result = Traverser.breadthFirst({ n -> n.children },)
306+
.traverse(root, visitor)
307+
308+
309+
then:
310+
result.result == [0, 1, 2, 3, 4, 5]
311+
}
312+
313+
def "test initial data"() {
314+
def visitor = [
315+
enter: { TraverserContext context ->
316+
assert context.getInitialData() == "foo"
317+
TraversalControl.CONTINUE
318+
},
319+
leave: { TraverserContext context ->
320+
assert context.getInitialData() == "foo"
321+
TraversalControl.QUIT
322+
},
323+
324+
] as TraverserVisitor
325+
326+
when:
327+
Traverser.depthFirst({ n -> n.children }, "foo").traverse(root, visitor)
328+
329+
then:
330+
true
331+
332+
}
333+
259334
}
260335

336+
337+

0 commit comments

Comments
 (0)