package units import "testing" func TestRegistryResolve(t *testing.T) { reg := NewRegistry() if err := reg.Register(StaticFactory{UnitSystem: "us", Converter: USConverter{}}); err != nil { t.Fatalf("register us: %v", err) } if err := reg.Register(StaticFactory{UnitSystem: "metric", Converter: MetricConverter{}}); err != nil { t.Fatalf("register metric: %v", err) } converter, err := reg.Resolve("US") if err != nil { t.Fatalf("resolve us: %v", err) } if converter.System() != "us" { t.Fatalf("expected us converter, got %q", converter.System()) } converter, err = reg.Resolve(" metric ") if err != nil { t.Fatalf("resolve metric: %v", err) } if converter.System() != "metric" { t.Fatalf("expected metric converter, got %q", converter.System()) } } func TestRegistryRejectsInvalidRegistration(t *testing.T) { reg := NewRegistry() if err := reg.Register(nil); err == nil { t.Fatalf("expected error for nil factory") } if err := reg.Register(StaticFactory{UnitSystem: "", Converter: USConverter{}}); err == nil { t.Fatalf("expected error for empty unit system") } if err := reg.Register(StaticFactory{UnitSystem: "us", Converter: nil}); err == nil { t.Fatalf("expected error for nil converter") } if err := reg.Register(StaticFactory{UnitSystem: "us", Converter: USConverter{}}); err != nil { t.Fatalf("register us: %v", err) } if err := reg.Register(StaticFactory{UnitSystem: "US", Converter: USConverter{}}); err == nil { t.Fatalf("expected duplicate registration error") } } func TestRegistryResolveUnknown(t *testing.T) { reg := NewRegistry() if err := reg.Register(StaticFactory{UnitSystem: "us", Converter: USConverter{}}); err != nil { t.Fatalf("register us: %v", err) } if _, err := reg.Resolve("metric"); err == nil { t.Fatalf("expected unsupported unit system error") } }