-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdi_container_test.go
142 lines (131 loc) · 2.85 KB
/
di_container_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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package di_injector
import (
"github.com/stretchr/testify/assert"
"testing"
)
/*
Tests if the injection executes without error in a normal scenario.
*/
func TestDiContainer_InjectWithDependencies(t *testing.T) {
assert := assert.New(t)
str := "sample string"
c := NewDiContainer()
a := A{Dependency0:str}
r := RunnerImpl{}
err := c.AddToDependencies(str)
if err != nil {
t.Fail()
return
}
err = c.AddToDependencies(&r)
if err != nil {
t.Fail()
return
}
err = c.InjectWithDependencies(&a)
if err != nil {
t.Fail()
return
}
assert.Equal(a.Dependency0, str)
assert.Equal(a.Dependency1, str)
assert.Equal(a.Dependency2, &r)
}
/*
Tests that the panic is cached
*/
func TestDiContainer_InjectWithDependencies_Panic(t *testing.T) {
assert := assert.New(t)
str := "sample string"
c := NewDiContainer()
a := A{Dependency0:str}
err := c.InjectWithDependencies(a)
assert.Equal(err.Error(), "Fatal Error at Injection")
}
/*
Tests the error result when no injections occurred
*/
func TestDiContainer_InjectWithDependencies_NoInjections(t *testing.T) {
assert := assert.New(t)
str := "sample string"
c := NewDiContainer()
a := A{Dependency0:str}
err := c.InjectWithDependencies(&a)
assert.Nil(err)
}
/*
Checks that any of the fields to be injected couldn't be interface{}. This kind of fields implement every dependency so
this is not allowed
*/
func TestNewDiContainer_NoInterface(t *testing.T) {
assert := assert.New(t)
c := NewDiContainer()
b := B{Dependency0:""}
err := c.InjectWithDependencies(&b)
assert.Equal(err.Error(), "Cannot inject into interface{}")
}
/*
Tests recursive injection
*/
func TestDiContainer_InjectWithDependencies_recursion(t *testing.T) {
assert := assert.New(t)
str := "sample string"
c := NewDiContainer()
a := A{Dependency0:str}
r := C{}
err := c.AddToDependencies(str)
if err != nil {
t.Fail()
return
}
err = c.AddToDependencies(&r)
if err != nil {
t.Fail()
return
}
err = c.InjectWithDependencies(&a)
if err != nil {
t.Fail()
return
}
assert.Equal(a.Dependency0, str)
assert.Equal(a.Dependency1, str)
assert.Equal(a.Dependency2, &r)
assert.Equal(a.Dependency2.Run(), str)
}
/*
Tests recursive injection
*/
func TestDiContainer_InjectWithDependencies_recursionError(t *testing.T) {
assert := assert.New(t)
str := "sample string"
c := NewDiContainer()
a := A{Dependency0:str}
r := D{}
err := c.AddToDependencies(str)
if err != nil {
t.Fail()
return
}
err = c.AddToDependencies(&r)
if err != nil {
t.Fail()
return
}
err = c.InjectWithDependencies(&a)
assert.Nil(err)
}
/*
Checks replace capability
*/
func TestNewDiContainer_InjectWithDependencies_replace(t *testing.T) {
assert := assert.New(t)
c := NewDiContainer()
err := c.AddToDependencies("string1", "string2")
if err != nil {
t.Fail()
}
obj := C{}
c.InjectWithDependencies(&obj)
assert.Equal(obj.Dependency0, "string2")
}