goose: support provider cleanup functions
Documented and updated appropriate providers to reflect. Reviewed-by: Tuo Shan <shantuo@google.com>
This commit is contained in:
32
internal/goose/testdata/Cleanup/foo/foo.go
vendored
Normal file
32
internal/goose/testdata/Cleanup/foo/foo.go
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
bar, cleanup := injectBar()
|
||||
fmt.Println(*bar)
|
||||
cleanup()
|
||||
fmt.Println(*bar)
|
||||
}
|
||||
|
||||
type Foo int
|
||||
type Bar int
|
||||
|
||||
//goose:provide Foo
|
||||
func provideFoo() (*Foo, func()) {
|
||||
foo := new(Foo)
|
||||
*foo = 42
|
||||
return foo, func() { *foo = 0 }
|
||||
}
|
||||
|
||||
//goose:provide Bar
|
||||
func provideBar(foo *Foo) (*Bar, func()) {
|
||||
bar := new(Bar)
|
||||
*bar = 77
|
||||
return bar, func() {
|
||||
if *foo == 0 {
|
||||
panic("foo cleaned up before bar")
|
||||
}
|
||||
*bar = 0
|
||||
}
|
||||
}
|
||||
8
internal/goose/testdata/Cleanup/foo/goose.go
vendored
Normal file
8
internal/goose/testdata/Cleanup/foo/goose.go
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
//+build gooseinject
|
||||
|
||||
package main
|
||||
|
||||
//goose:use Foo
|
||||
//goose:use Bar
|
||||
|
||||
func injectBar() (*Bar, func())
|
||||
2
internal/goose/testdata/Cleanup/out.txt
vendored
Normal file
2
internal/goose/testdata/Cleanup/out.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
77
|
||||
0
|
||||
1
internal/goose/testdata/Cleanup/pkg
vendored
Normal file
1
internal/goose/testdata/Cleanup/pkg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
foo
|
||||
51
internal/goose/testdata/PartialCleanup/foo/foo.go
vendored
Normal file
51
internal/goose/testdata/PartialCleanup/foo/foo.go
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
cleanedFoo = false
|
||||
cleanedBar = false
|
||||
)
|
||||
|
||||
func main() {
|
||||
_, cleanup, err := injectBaz()
|
||||
if err == nil {
|
||||
fmt.Println("<nil>")
|
||||
} else {
|
||||
fmt.Println(strings.Contains(err.Error(), "bork!"))
|
||||
}
|
||||
fmt.Println(cleanedFoo, cleanedBar, cleanup == nil)
|
||||
}
|
||||
|
||||
type Foo int
|
||||
type Bar int
|
||||
type Baz int
|
||||
|
||||
//goose:provide Foo
|
||||
func provideFoo() (*Foo, func()) {
|
||||
foo := new(Foo)
|
||||
*foo = 42
|
||||
return foo, func() { *foo = 0; cleanedFoo = true }
|
||||
}
|
||||
|
||||
//goose:provide Bar
|
||||
func provideBar(foo *Foo) (*Bar, func(), error) {
|
||||
bar := new(Bar)
|
||||
*bar = 77
|
||||
return bar, func() {
|
||||
if *foo == 0 {
|
||||
panic("foo cleaned up before bar")
|
||||
}
|
||||
*bar = 0
|
||||
cleanedBar = true
|
||||
}, nil
|
||||
}
|
||||
|
||||
//goose:provide Baz
|
||||
func provideBaz(bar *Bar) (Baz, error) {
|
||||
return 0, errors.New("bork!")
|
||||
}
|
||||
9
internal/goose/testdata/PartialCleanup/foo/goose.go
vendored
Normal file
9
internal/goose/testdata/PartialCleanup/foo/goose.go
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
//+build gooseinject
|
||||
|
||||
package main
|
||||
|
||||
//goose:use Foo
|
||||
//goose:use Bar
|
||||
//goose:use Baz
|
||||
|
||||
func injectBaz() (Baz, func(), error)
|
||||
2
internal/goose/testdata/PartialCleanup/out.txt
vendored
Normal file
2
internal/goose/testdata/PartialCleanup/out.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
true
|
||||
true true true
|
||||
1
internal/goose/testdata/PartialCleanup/pkg
vendored
Normal file
1
internal/goose/testdata/PartialCleanup/pkg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
foo
|
||||
Reference in New Issue
Block a user