89 lines
1.4 KiB
Go
89 lines
1.4 KiB
Go
|
package framework
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// {{{ contract
|
||
|
|
||
|
const DummyProviderName = "container:test"
|
||
|
|
||
|
type IDummyService interface {
|
||
|
GetDummy() DummyStruct
|
||
|
}
|
||
|
|
||
|
type DummyStruct struct {
|
||
|
Name string
|
||
|
}
|
||
|
|
||
|
// }}}
|
||
|
// {{{ provider
|
||
|
type DummyServiceProvider struct{}
|
||
|
|
||
|
func (p *DummyServiceProvider) Name() string {
|
||
|
return DummyProviderName
|
||
|
}
|
||
|
|
||
|
func (p *DummyServiceProvider) Register(c Container) NewInstance {
|
||
|
return NewDummyService
|
||
|
}
|
||
|
|
||
|
func (p *DummyServiceProvider) Init(c Container) error {
|
||
|
log.Println("init")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (p *DummyServiceProvider) InstantiateLater() bool {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func (p *DummyServiceProvider) Params(c Container) []interface{} {
|
||
|
return []interface{}{c}
|
||
|
}
|
||
|
|
||
|
// }}}
|
||
|
// {{{ service
|
||
|
|
||
|
type DummyService struct {
|
||
|
IDummyService
|
||
|
|
||
|
// parameters
|
||
|
c Container
|
||
|
}
|
||
|
|
||
|
func (d *DummyService) GetDummy() DummyStruct {
|
||
|
return DummyStruct{
|
||
|
Name: "Dummy!",
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewDummyService(params ...interface{}) (interface{}, error) {
|
||
|
c := params[0].(Container)
|
||
|
|
||
|
log.Println("new dummy service")
|
||
|
|
||
|
return &DummyService{c: c}, nil
|
||
|
}
|
||
|
|
||
|
// }}}
|
||
|
|
||
|
func TestBind(t *testing.T) {
|
||
|
container := NewGoWebContainer()
|
||
|
provider := &DummyServiceProvider{}
|
||
|
|
||
|
container.Bind(provider)
|
||
|
|
||
|
dummyService := container.JustGet(DummyProviderName).(IDummyService)
|
||
|
|
||
|
want := DummyStruct{
|
||
|
Name: "Dummy!",
|
||
|
}
|
||
|
got := dummyService.GetDummy()
|
||
|
|
||
|
if !reflect.DeepEqual(want, got) {
|
||
|
t.Errorf("want %v, got %v ", want, got)
|
||
|
}
|
||
|
}
|