# TODO(jayconrod): support shared memory on more platforms.
[!darwin] [!linux] [!windows] skip
[short] skip

# Cleanup should run after F.Skip.
go test -run=FuzzTargetSkip
stdout cleanup

# Cleanup should run after F.Fatal.
! go test -run=FuzzTargetFatal
stdout cleanup

# Cleanup should run after an unexpected runtime.Goexit.
! go test -run=FuzzTargetGoexit
stdout cleanup

# Cleanup should run after panic.
! go test -run=FuzzTargetPanic
stdout cleanup

# Cleanup should run in fuzz function on seed corpus.
go test -v -run=FuzzFunction
stdout '(?s)inner.*outer'

# TODO(jayconrod): test cleanup while fuzzing. For now, the worker process's
# stdout and stderr is connected to the coordinator's, but it should eventually
# be connected to os.DevNull, so we wouldn't see t.Log output.

-- go.mod --
module cleanup

go 1.15
-- cleanup_test.go --
package cleanup

import (
	"runtime"
	"testing"
)

func FuzzTargetSkip(f *testing.F) {
	f.Cleanup(func() { f.Log("cleanup") })
	f.Skip()
}

func FuzzTargetFatal(f *testing.F) {
	f.Cleanup(func() { f.Log("cleanup") })
	f.Fatal()
}

func FuzzTargetGoexit(f *testing.F) {
	f.Cleanup(func() { f.Log("cleanup") })
	runtime.Goexit()
}

func FuzzTargetPanic(f *testing.F) {
	f.Cleanup(func() { f.Log("cleanup") })
	panic("oh no")
}

func FuzzFunction(f *testing.F) {
	f.Add([]byte{0})
	f.Cleanup(func() { f.Log("outer") })
	f.Fuzz(func(t *testing.T, b []byte) {
		t.Cleanup(func() { t.Logf("inner") })
	})
}
