-
Notifications
You must be signed in to change notification settings - Fork 14
/
circular_test.go
74 lines (61 loc) · 1.13 KB
/
circular_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
package dingo
import (
"testing"
"github.com/stretchr/testify/assert"
)
type (
circA struct {
A *circA `inject:""`
B *circB `inject:""`
}
circB struct {
A *circA `inject:""`
B *circB `inject:""`
}
circCProvider func() circCInterface
circCInterface interface{}
circC struct {
C circCProvider `inject:""`
}
circAProvider func() *circA
circD struct {
A circAProvider `inject:""`
}
)
func TestDingoCircula(t *testing.T) {
EnableCircularTracing()
defer func() {
traceCircular = nil
}()
injector, err := NewInjector()
assert.NoError(t, err)
assert.Panics(t, func() {
i, err := injector.GetInstance(new(circA))
assert.NoError(t, err)
_, ok := i.(*circA)
if !ok {
t.Fail()
}
})
injector.Bind(new(circCInterface)).To(circC{})
i, err := injector.GetInstance(new(circC))
assert.NoError(t, err)
c, ok := i.(*circC)
if !ok {
t.Fail()
}
assert.NotNil(t, c.C())
var d *circD
assert.NotPanics(t, func() {
var ok bool
i, err := injector.GetInstance(new(circD))
assert.NoError(t, err)
d, ok = i.(*circD)
if !ok {
t.Fail()
}
})
assert.Panics(t, func() {
d.A()
})
}