Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit e39d5d8

Browse files
committed
Consolidate protocols *always*
The reason protcol consolidation was disabled for test env was because some protocol implementations were defined in tests. These are now defined under lib/ so and now we can use consolidation. Tests now run in 0.1-0.2 seconds on my MBP.
1 parent 74a2977 commit e39d5d8

File tree

4 files changed

+78
-80
lines changed

4 files changed

+78
-80
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
defmodule GraphQL.TestSupport.VisitorImplementations do
3+
4+
alias GraphQL.Lang.AST.Visitor
5+
alias GraphQL.Lang.AST.PostprocessingVisitor
6+
7+
8+
defmodule TracingVisitor do
9+
defstruct name: nil
10+
end
11+
12+
defimpl Visitor, for: TracingVisitor do
13+
def enter(visitor, node, accumulator) do
14+
{:continue, %{accumulator | calls: ["#{visitor.name} entering #{node[:kind]}"] ++ accumulator[:calls]}}
15+
end
16+
17+
def leave(visitor, node, accumulator) do
18+
%{accumulator | calls: ["#{visitor.name} leaving #{node[:kind]}"] ++ accumulator[:calls]}
19+
end
20+
end
21+
22+
defmodule CallReverser do
23+
defstruct name: "call reverser"
24+
end
25+
26+
defimpl PostprocessingVisitor, for: CallReverser do
27+
def finish(_visitor, accumulator) do
28+
Enum.reverse(accumulator[:calls])
29+
end
30+
end
31+
32+
defmodule BalancedCallsVisitor do
33+
defstruct name: "balanced calls visitor"
34+
end
35+
36+
defimpl Visitor, for: BalancedCallsVisitor do
37+
def enter(_visitor, _node, accumulator) do
38+
{:continue, %{accumulator | count: accumulator[:count] + 1}}
39+
end
40+
41+
def leave(_visitor, _node, accumulator) do
42+
%{accumulator | count: accumulator[:count] - 1}
43+
end
44+
end
45+
46+
defimpl PostprocessingVisitor, for: BalancedCallsVisitor do
47+
def finish(_visitor, accumulator), do: accumulator[:count]
48+
end
49+
end
50+

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule GraphQL.Mixfile do
1717
homepage_url: @repo_url,
1818
build_embedded: Mix.env == :prod,
1919
start_permanent: Mix.env == :prod,
20-
consolidate_protocols: Mix.env == :prod,
20+
consolidate_protocols: true,
2121
name: "GraphQL",
2222
docs: [main: "GraphQL", logo: "logo.png", extras: ["README.md"]]]
2323
end

test/graphql/lang/ast/composite_visitor_test.exs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,9 @@ defmodule GraphQL.Lang.AST.CompositeVisitorTest do
44

55
alias GraphQL.Lang.Parser
66
alias GraphQL.Lang.AST.Reducer
7-
alias GraphQL.Lang.AST.Visitor
87
alias GraphQL.Lang.AST.CompositeVisitor
9-
alias GraphQL.Lang.AST.PostprocessingVisitor
108

11-
defmodule TracingVisitor do
12-
defstruct name: nil
13-
end
14-
15-
defimpl Visitor, for: TracingVisitor do
16-
def enter(visitor, node, accumulator) do
17-
{:continue, %{accumulator | calls: ["#{visitor.name} entering #{node[:kind]}"] ++ accumulator[:calls]}}
18-
end
19-
20-
def leave(visitor, node, accumulator) do
21-
%{accumulator | calls: ["#{visitor.name} leaving #{node[:kind]}"] ++ accumulator[:calls]}
22-
end
23-
end
24-
25-
defmodule CallReverser do
26-
defstruct name: "call reverser"
27-
end
28-
29-
defimpl PostprocessingVisitor, for: CallReverser do
30-
def finish(_visitor, accumulator) do
31-
Enum.reverse(accumulator[:calls])
32-
end
33-
end
9+
alias GraphQL.TestSupport.VisitorImplementations.{CallReverser, TracingVisitor}
3410

3511
test "Composed Visitors are called in the correct order" do
3612
v0 = %CallReverser{}

test/graphql/lang/ast/reducer_test.exs

Lines changed: 26 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,13 @@ defmodule GraphQL.Lang.AST.ReducerTest do
44

55
alias GraphQL.Lang.Parser
66
alias GraphQL.Lang.AST.Reducer
7-
alias GraphQL.Lang.AST.Visitor
8-
alias GraphQL.Lang.AST.PostprocessingVisitor
7+
alias GraphQL.Lang.AST.CompositeVisitor
98

10-
defmodule TracingVisitor do
11-
defstruct name: "logging visitor"
12-
end
13-
14-
defimpl Visitor, for: TracingVisitor do
15-
def enter(_visitor, node, accumulator) do
16-
{:continue, Map.merge(accumulator, %{calls: ["Entering: #{node[:kind]}"] ++ accumulator[:calls]})}
17-
end
18-
19-
def leave(_visitor, node, accumulator) do
20-
Map.merge(accumulator, %{calls: ["Leaving: #{node[:kind]}"] ++ accumulator[:calls]})
21-
end
22-
end
23-
24-
defimpl PostprocessingVisitor, for: TracingVisitor do
25-
def finish(_visitor, accumulator) do
26-
Enum.reverse accumulator[:calls]
27-
end
28-
end
29-
30-
defmodule BalancedCallsVisitor do
31-
defstruct name: "balanced calls visitor"
32-
end
33-
34-
defimpl Visitor, for: BalancedCallsVisitor do
35-
def enter(_visitor, _node, accumulator) do
36-
{:continue, %{accumulator | count: accumulator[:count] + 1}}
37-
end
38-
39-
def leave(_visitor, _node, accumulator) do
40-
%{accumulator | count: accumulator[:count] - 1}
41-
end
42-
end
43-
44-
defimpl PostprocessingVisitor, for: BalancedCallsVisitor do
45-
def finish(_visitor, accumulator), do: accumulator[:count]
46-
end
9+
alias GraphQL.TestSupport.VisitorImplementations.{
10+
CallReverser,
11+
TracingVisitor,
12+
BalancedCallsVisitor
13+
}
4714

4815
test "Enter and leave calls should be balanced" do
4916
{:ok, ast} = Parser.parse "type Person {name: String}"
@@ -53,22 +20,27 @@ defmodule GraphQL.Lang.AST.ReducerTest do
5320

5421
test "All nodes are visited" do
5522
{:ok, ast} = Parser.parse "type Person {name: String}"
56-
log = Reducer.reduce(ast, %TracingVisitor{}, %{calls: []})
23+
24+
v0 = %CallReverser{}
25+
v1 = %TracingVisitor{name: "Tracing Visitor"}
26+
composite_visitor = CompositeVisitor.compose([v0, v1])
27+
28+
log = Reducer.reduce(ast, composite_visitor, %{calls: []})
5729
assert log == [
58-
"Entering: Document",
59-
"Entering: ObjectTypeDefinition",
60-
"Entering: Name",
61-
"Leaving: Name",
62-
"Entering: FieldDefinition",
63-
"Entering: Name",
64-
"Leaving: Name",
65-
"Entering: NamedType",
66-
"Entering: Name",
67-
"Leaving: Name",
68-
"Leaving: NamedType",
69-
"Leaving: FieldDefinition",
70-
"Leaving: ObjectTypeDefinition",
71-
"Leaving: Document"
30+
"Tracing Visitor entering Document",
31+
"Tracing Visitor entering ObjectTypeDefinition",
32+
"Tracing Visitor entering Name",
33+
"Tracing Visitor leaving Name",
34+
"Tracing Visitor entering FieldDefinition",
35+
"Tracing Visitor entering Name",
36+
"Tracing Visitor leaving Name",
37+
"Tracing Visitor entering NamedType",
38+
"Tracing Visitor entering Name",
39+
"Tracing Visitor leaving Name",
40+
"Tracing Visitor leaving NamedType",
41+
"Tracing Visitor leaving FieldDefinition",
42+
"Tracing Visitor leaving ObjectTypeDefinition",
43+
"Tracing Visitor leaving Document"
7244
]
7345
end
7446
end

0 commit comments

Comments
 (0)