-
Notifications
You must be signed in to change notification settings - Fork 0
/
injector_test.go
71 lines (54 loc) · 1.2 KB
/
injector_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
package dieb_test
import (
"github.com/joernlenoch/go-dieb"
"github.com/stretchr/testify/assert"
"log"
"testing"
)
type (
Notifier interface {
Hello(string) string
}
SomeService struct {
Notifier
}
SomeOtherService struct {
Previous Notifier `inject:""`
}
SomeController struct {
Notifier Notifier `dieb:""`
DirectService *SomeService `dieb:""`
}
)
func (s *SomeOtherService) Init(injector dieb.Injector, someSvc Notifier, service *SomeService) error {
log.Print(someSvc.Hello("Indirect Dependancy"))
log.Print(service.Hello("Direct Dependancy"))
return nil
}
func (s SomeService) Hello(n string) string {
return "Hello " + n
}
func (s SomeOtherService) Hello(n string) string {
return s.Previous.Hello(n + " elloH")
}
func TestName(t *testing.T) {
inj := dieb.NewInjector()
defer inj.Shutdown()
err := inj.Provide(
&SomeService{},
&SomeOtherService{},
)
if ok := assert.NoError(t, err); !ok {
t.Fatal()
return
}
var ctrl SomeController
if err := inj.Prepare(&ctrl); err != nil {
t.Fatal(err)
}
if ctrl.Notifier.Hello("World") != "Hello World elloH" {
t.FailNow()
}
t.Log(ctrl.Notifier.Hello("Indirect"))
t.Log(ctrl.DirectService.Hello("Direct"))
}