-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgocon_test.go
85 lines (64 loc) · 1.93 KB
/
gocon_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
package gocon_test
import (
"context"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/s6n-labs/gocon"
)
type Greeter struct {
message string
disposed bool
}
func (g *Greeter) Greet() string {
return g.message
}
func (g *Greeter) Dispose() {
g.disposed = true
}
type AnotherGreeter struct {
name string
}
func (g *AnotherGreeter) Greet() string {
return fmt.Sprintf("Hello, %s!", g.name)
}
type GreeterLike interface {
Greet() string
}
func TestKeyOf(t *testing.T) {
t.Parallel()
assert.Equal(t, "github.com/s6n-labs/gocon_test.Greeter", gocon.KeyOf[Greeter]())
assert.Equal(t, "*github.com/s6n-labs/gocon_test.Greeter", gocon.KeyOf[*Greeter]())
}
func Test_SimpleGetSet(t *testing.T) {
container := gocon.NewContainer(nil)
ctx := gocon.WithContainer(context.Background(), container)
greeter := &Greeter{message: "Hello, world!"}
err := gocon.Set(ctx, gocon.Value(greeter))
require.NoError(t, err)
def, err := gocon.FromContext(ctx).Get(gocon.KeyOf[*Greeter]())
require.NoError(t, err)
assert.Len(t, def.Tags, 0)
actual, err := gocon.Get[*Greeter](ctx)
require.NoError(t, err)
assert.Equal(t, "Hello, world!", actual.message)
}
func Test_TaggedGetSet(t *testing.T) {
container := gocon.NewContainer(nil)
ctx := gocon.WithContainer(context.Background(), container)
greeter1 := &Greeter{message: "Hello, world!"}
greeter2 := &AnotherGreeter{name: "John"}
require.NoError(t, gocon.Set(ctx, gocon.Value(greeter1).WithTags("greeter")))
require.NoError(t, gocon.Set(ctx, gocon.Value(greeter2).WithTags("greeter")))
defs, err := gocon.FromContext(ctx).GetTagged("greeter")
require.NoError(t, err)
assert.Len(t, defs, 2)
greeters, err := gocon.GetTagged[GreeterLike](ctx, "greeter")
require.NoError(t, err)
assert.Len(t, greeters, 2)
for _, g := range greeters {
message := g.Greet()
assert.True(t, message == "Hello, world!" || message == "Hello, John!")
}
}