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

[short] skip
env GOCACHE=$WORK/cache

# Tests which verify the behavior and command line output when
# running a fuzz target as a unit test.

# Tests without -run.

! go test
stdout FAIL
stdout 'error here'

! go test -v
stdout FAIL
stdout 'error here'
stdout '=== RUN   FuzzFoo/thisfails'
stdout '--- FAIL: FuzzFoo/thisfails'
stdout '=== RUN   FuzzFoo/thispasses'
stdout '--- PASS: FuzzFoo/thispasses'

# Tests where -run matches all seed corpora.

! go test -run FuzzFoo/this
stdout FAIL
stdout 'error here'
! stdout 'no tests to run'

! go test -run /this
stdout FAIL
stdout 'error here'
! stdout 'no tests to run'

! go test -v -run FuzzFoo/this
stdout FAIL
stdout 'error here'
stdout '=== RUN   FuzzFoo/thisfails'
stdout '--- FAIL: FuzzFoo/thisfails'
stdout '=== RUN   FuzzFoo/thispasses'
stdout '--- PASS: FuzzFoo/thispasses'
! stdout 'no tests to run'

! go test -v -run /this
stdout FAIL
stdout 'error here'
stdout '=== RUN   FuzzFoo/thisfails'
stdout '--- FAIL: FuzzFoo/thisfails'
stdout '=== RUN   FuzzFoo/thispasses'
stdout '--- PASS: FuzzFoo/thispasses'
! stdout 'no tests to run'

# Tests where -run only matches one seed corpus which passes.

go test -run FuzzFoo/thispasses
stdout ok
! stdout 'no tests to run'

go test -run /thispasses
stdout ok
! stdout 'no tests to run'

# Same tests in verbose mode
go test -v -run FuzzFoo/thispasses
stdout '=== RUN   FuzzFoo/thispasses'
stdout '--- PASS: FuzzFoo/thispasses'
! stdout '=== RUN   FuzzFoo/thisfails'
! stdout 'no tests to run'

go test -v -run /thispasses
stdout '=== RUN   FuzzFoo/thispasses'
stdout '--- PASS: FuzzFoo/thispasses'
! stdout '=== RUN   FuzzFoo/thisfails'
! stdout 'no tests to run'

# Tests where -run only matches one seed corpus which fails.

! go test -run FuzzFoo/thisfails
stdout FAIL
stdout 'error here'
! stdout 'no tests to run'

! go test -run /thisfails
stdout FAIL
stdout 'error here'
! stdout 'no tests to run'

! go test -v -run FuzzFoo/thisfails
stdout 'error here'
stdout '=== RUN   FuzzFoo/thisfails'
stdout '--- FAIL: FuzzFoo/thisfails'
! stdout '=== RUN   FuzzFoo/thispasses'
! stdout 'no tests to run'

! go test -v -run /thisfails
stdout 'error here'
stdout '=== RUN   FuzzFoo/thisfails'
stdout '--- FAIL: FuzzFoo/thisfails'
! stdout '=== RUN   FuzzFoo/thispasses'
! stdout 'no tests to run'

# Tests where -run doesn't match any seed corpora.

go test -run FuzzFoo/nomatch
stdout ok

go test -run /nomatch
stdout ok

go test -v -run FuzzFoo/nomatch
stdout '=== RUN   FuzzFoo'
stdout '--- PASS: FuzzFoo'
stdout ok
! stdout 'no tests to run'

go test -v -run /nomatch
stdout '=== RUN   FuzzFoo'
stdout '--- PASS: FuzzFoo'
stdout ok
! stdout 'no tests to run'

-- go.mod --
module example.com/x

go 1.16
-- x_test.go --
package x

import "testing"

func FuzzFoo(f *testing.F) {
    f.Add("this is fine")
    f.Fuzz(func(t *testing.T, s string) {
        if s == "fails" {
            t.Error("error here")
        }
    })
}
-- testdata/fuzz/FuzzFoo/thisfails --
go test fuzz v1
string("fails")
-- testdata/fuzz/FuzzFoo/thispasses --
go test fuzz v1
string("passes")