Skip to content

Commit

Permalink
Added Container.Names to list container keys
Browse files Browse the repository at this point in the history
  • Loading branch information
fgm committed Sep 17, 2022
1 parent f7ac6f4 commit 9ce91f3
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 4 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
module code.osinet.fr/fgm/izidic

go 1.19

require github.com/google/go-cmp v0.5.9
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
20 changes: 20 additions & 0 deletions izidic.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package izidic
import (
"errors"
"fmt"
"sort"
"sync"
)

Expand All @@ -37,6 +38,25 @@ func (dic *Container) Freeze() {
dic.frozen = true
}

// Names returns the names of all the parameters and instances defined on the container.
func (dic *Container) Names() map[string][]string {
dump := map[string][]string{
"params": make([]string, 0, len(dic.parameters)),
"services": make([]string, 0, len(dic.serviceDefs)),
}
dic.RLock()
defer dic.RUnlock()
for k := range dic.parameters {
dump["params"] = append(dump["params"], k)
}
sort.Strings(dump["params"])
for k := range dic.serviceDefs {
dump["services"] = append(dump["services"], k)
}
sort.Strings(dump["services"])
return dump
}

// Register registers a service with the container.
func (dic *Container) Register(name string, fn Service) {
if dic.frozen {
Expand Down
33 changes: 29 additions & 4 deletions izidic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,25 @@ package izidic
import (
"fmt"
"testing"

"github.com/google/go-cmp/cmp"
)

func TestContainer_Service(t *testing.T) {
const expected = "s1s2"
s1 := func(c *Container) (any, error) {
var (
s1 = func(c *Container) (any, error) {
return "s1", nil
}
s2 := func(c *Container) (any, error) {
s2 = func(c *Container) (any, error) {
s1, err := c.Service("s1")
if err != nil {
return nil, fmt.Errorf("could not get service s1: %w", err)
}
return s1.(string) + "s2", nil
}
)

func TestContainer_Service(t *testing.T) {
const expected = "s1s2"
dic := New()
dic.Register("s1", s1)
dic.Register("s2", s2)
Expand All @@ -33,3 +37,24 @@ func TestContainer_Service(t *testing.T) {
t.Fatalf("got %q but expected %q", actual, expected)
}
}

func TestContainer_All(t *testing.T) {
var (
vpt *string
vt string
)
dic := New()
dic.Store("p1", vt)
dic.Store("p2", vpt)
dic.Register("s1", s1)
dic.Register("s2", s2)

actual := dic.Names()
expected := map[string][]string{
"params": {"p1", "p2"},
"services": {"s1", "s2"},
}
if !cmp.Equal(actual, expected) {
t.Logf("unequal results: %v", cmp.Diff(actual, expected))
}
}

0 comments on commit 9ce91f3

Please sign in to comment.