From b869afc095ae425680c175d888c2a33df09cf171 Mon Sep 17 00:00:00 2001 From: Robert van Gent Date: Thu, 7 Feb 2019 14:36:06 -0800 Subject: [PATCH] wire/tests: Add a test that defines a ProviderSet with a binding but no (#121) corresponding concrete type. The current error message is poor and should be improved. --- .../foo/foo.go | 49 +++++++++++++++++++ .../foo/wire.go | 26 ++++++++++ .../ProviderSetBindingMissingConcreteType/pkg | 1 + .../want/wire_errs.txt | 1 + 4 files changed, 77 insertions(+) create mode 100644 internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/foo.go create mode 100644 internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/wire.go create mode 100644 internal/wire/testdata/ProviderSetBindingMissingConcreteType/pkg create mode 100644 internal/wire/testdata/ProviderSetBindingMissingConcreteType/want/wire_errs.txt diff --git a/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/foo.go b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/foo.go new file mode 100644 index 0000000..6d28bbb --- /dev/null +++ b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/foo.go @@ -0,0 +1,49 @@ +// Copyright 2019 The Wire Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "fmt" + + "github.com/google/wire" +) + +func main() { + fmt.Println(injectFoo()) +} + +type fooer interface { + Do() string +} + +type foo struct{} + +func (f *foo) Do() string { + return "did foo" +} + +func newFoo() *foo { + return &foo{} +} + +var ( + setA = wire.NewSet(newFoo) + // This set is invalid because it has a wire.Bind but no matching provider. + // From the user guide: + // Any set that includes an interface binding must also have a provider in + // the same set that provides the concrete type. + setB = wire.NewSet(wire.Bind(new(fooer), new(foo))) + setC = wire.NewSet(setA, setB) +) diff --git a/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/wire.go b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/wire.go new file mode 100644 index 0000000..8c819da --- /dev/null +++ b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/foo/wire.go @@ -0,0 +1,26 @@ +// Copyright 2019 The Wire Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//+build wireinject + +package main + +import ( + "github.com/google/wire" +) + +func injectFoo() *foo { + wire.Build(setC) + return nil +} diff --git a/internal/wire/testdata/ProviderSetBindingMissingConcreteType/pkg b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/pkg new file mode 100644 index 0000000..f7a5c8c --- /dev/null +++ b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/pkg @@ -0,0 +1 @@ +example.com/foo diff --git a/internal/wire/testdata/ProviderSetBindingMissingConcreteType/want/wire_errs.txt b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/want/wire_errs.txt new file mode 100644 index 0000000..76f1438 --- /dev/null +++ b/internal/wire/testdata/ProviderSetBindingMissingConcreteType/want/wire_errs.txt @@ -0,0 +1 @@ +example.com/foo/foo.go:x:y: no binding for *example.com/foo.foo \ No newline at end of file