-
Notifications
You must be signed in to change notification settings - Fork 77
/
generator_test.go
118 lines (87 loc) · 2.29 KB
/
generator_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package pgs
import (
"bytes"
"os"
"testing"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/proto"
descriptor "google.golang.org/protobuf/types/descriptorpb"
plugin_go "google.golang.org/protobuf/types/pluginpb"
)
func TestInit(t *testing.T) {
t.Parallel()
b := &bytes.Buffer{}
bb := &bytes.Buffer{}
g := Init(ProtocInput(b), ProtocOutput(bb), func(g *Generator) { /* noop */ })
assert.NotNil(t, g)
assert.Equal(t, g.in, b)
assert.Equal(t, g.out, bb)
g = Init()
assert.Equal(t, os.Stdin, g.in)
assert.Equal(t, os.Stdout, g.out)
_, ok := g.workflow.(*onceWorkflow)
assert.True(t, ok)
}
func TestGenerator_RegisterModule(t *testing.T) {
t.Parallel()
d := InitMockDebugger()
g := &Generator{Debugger: d}
assert.Empty(t, g.mods)
g.RegisterModule(&mockModule{name: "foo"})
assert.False(t, d.Failed())
assert.Len(t, g.mods, 1)
assert.Panics(t, func() { g.RegisterModule(nil) })
assert.True(t, d.Failed())
}
func TestGenerator_RegisterPostProcessor(t *testing.T) {
t.Parallel()
d := InitMockDebugger()
p := newPersister()
g := &Generator{Debugger: d, persister: p}
pp := &mockPP{}
assert.Empty(t, p.procs)
g.RegisterPostProcessor(pp)
assert.False(t, d.Failed())
assert.Len(t, p.procs, 1)
g.RegisterPostProcessor(nil)
assert.True(t, d.Failed())
}
func TestGenerator_AST(t *testing.T) {
t.Parallel()
g := Init()
wf := &dummyWorkflow{AST: new(graph)}
g.workflow = wf
assert.Equal(t, wf.AST, g.AST())
assert.True(t, wf.initted)
}
func TestGenerator_Render(t *testing.T) {
// cannot be parallel
req := &plugin_go.CodeGeneratorRequest{
FileToGenerate: []string{"foo"},
ProtoFile: []*descriptor.FileDescriptorProto{
{
Name: proto.String("foo"),
Syntax: proto.String("proto2"),
Package: proto.String("bar"),
},
},
}
b, err := proto.Marshal(req)
assert.NoError(t, err)
buf := &bytes.Buffer{}
g := Init(ProtocInput(bytes.NewReader(b)), ProtocOutput(buf))
assert.NotPanics(t, g.Render)
var res plugin_go.CodeGeneratorResponse
assert.NoError(t, proto.Unmarshal(buf.Bytes(), &res))
}
func TestGenerator_PushPop(t *testing.T) {
t.Parallel()
g := Init()
g.push("foo")
pd, ok := g.Debugger.(prefixedDebugger)
assert.True(t, ok)
assert.Equal(t, "[foo]", pd.prefix)
g.pop()
_, ok = g.Debugger.(rootDebugger)
assert.True(t, ok)
}