func (s *registrySuite) TestRegisterAndList(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) c.Assert(r.Register("name", 0, nilFactory), gc.IsNil) c.Check(r.List(), gc.DeepEquals, []registry.Description{ {Name: "name", Versions: []int{0}}, }) }
func (s *registrySuite) TestGetUnknown(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) f, err := r.Get("name", 0) c.Check(err, jc.Satisfies, errors.IsNotFound) c.Check(err, gc.ErrorMatches, `name\(0\) not found`) c.Check(f, gc.IsNil) }
func (s *registrySuite) TestGetUnknownVersion(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) c.Assert(r.Register("name", 0, nilFactory), gc.IsNil) f, err := r.Get("name", 1) c.Check(err, jc.Satisfies, errors.IsNotFound) c.Check(err, gc.ErrorMatches, `name\(1\) not found`) c.Check(f, gc.IsNil) }
func (s *registrySuite) TestGet(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) customFactory := func() (interface{}, error) { return 10, nil } c.Assert(r.Register("name", 0, customFactory), gc.IsNil) f, err := r.Get("name", 0) c.Assert(err, gc.IsNil) c.Assert(f, gc.NotNil) res, err := f.(Factory)() c.Assert(err, gc.IsNil) c.Check(res, gc.Equals, 10) }
func (s *registrySuite) TestRegisterAlreadyPresent(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) err := r.Register("name", 0, func() (interface{}, error) { return "orig", nil }) c.Assert(err, gc.IsNil) err = r.Register("name", 0, func() (interface{}, error) { return "broken", nil }) c.Check(err, gc.ErrorMatches, `object "name\(0\)" already registered`) f, err := r.Get("name", 0) c.Assert(err, gc.IsNil) val, err := f.(Factory)() c.Assert(err, gc.IsNil) c.Check(val, gc.Equals, "orig") }
func (s *registrySuite) TestRegisterWrongType(c *gc.C) { r := registry.NewTypedNameVersion(factoryType) err := r.Register("other", 0, "notAFactory") c.Check(err, gc.ErrorMatches, `object of type string cannot be converted to type .*registry_test.Factory`) }