-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathdefinition_test.go
78 lines (63 loc) · 1.9 KB
/
definition_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
package di
import (
"reflect"
"testing"
"github.com/stretchr/testify/require"
)
func TestDefConstructors(t *testing.T) {
b, err := NewEnhancedBuilder()
require.Nil(t, err)
type C struct{ SField string }
type B struct{ CField C }
type A struct {
BField B
CField C
SField string
}
defC := NewDefFor(C{SField: "value"}).SetIs(C{})
err = b.Add(defC)
require.Nil(t, err)
defB := NewDef(func(ctn Container) (interface{}, error) {
return B{CField: ctn.Get(defC).(C)}, nil
}).SetIs(B{})
err = b.Add(defB)
require.Nil(t, err)
defA := NewDefForType(A{}).SetIs(A{})
err = b.Add(defA)
require.Nil(t, err)
defAPtr := NewDefForType(&A{}).SetIs(&A{})
err = b.Add(defAPtr)
require.Nil(t, err)
defErrS := NewDefForType("")
err = b.Add(defErrS)
require.Nil(t, err)
ctn, err := b.Build()
require.Nil(t, err)
a := ctn.Get(defA).(A)
require.Equal(t, "", a.SField)
require.Equal(t, "value", a.CField.SField)
require.Equal(t, "value", a.BField.CField.SField)
aPrt := ctn.Get(defAPtr).(*A)
require.Equal(t, "", aPrt.SField)
require.Equal(t, "value", aPrt.CField.SField)
require.Equal(t, "value", aPrt.BField.CField.SField)
_, err = ctn.SafeGet(defErrS)
require.NotNil(t, err, "NewDefForType only works for structs and pointers to structs")
}
func TestDefSetters(t *testing.T) {
def := NewDef(nil).
SetBuild(func(ctn Container) (interface{}, error) { return nil, nil }).
SetClose(func(obj interface{}) error { return nil }).
SetName("name").
SetScope(App).
SetUnshared(true).
SetIs("", Def{}, &Def{}).
SetTags(Tag{Name: "tag1"}, Tag{Name: "tag2"})
require.NotNil(t, def.Build)
require.NotNil(t, def.Close)
require.Equal(t, "name", def.Name)
require.Equal(t, App, def.Scope)
require.Equal(t, true, def.Unshared)
require.Equal(t, []reflect.Type{reflect.TypeOf(""), reflect.TypeOf(Def{}), reflect.TypeOf(&Def{})}, def.Is)
require.Equal(t, []Tag{{Name: "tag1"}, {Name: "tag2"}}, def.Tags)
}