| [short] skip |
| |
| # Workaround for issue 64014 -- for the portion of this test that |
| # verifies that caching works correctly, the cache should theoretically |
| # always behave reliably/deterministically, however if other tests are |
| # concurrently accessing the cache while this test is running, it can |
| # lead to cache lookup failures, which manifest as test failures here. |
| # To avoid such flakes, use a separate isolated GOCACHE for this test. |
| env GOCACHE=$WORK/cache |
| |
| # Initial run with simple coverage. |
| go test -cover ./pkg1 ./pkg2 ./pkg3 ./pkg4 |
| [!GOEXPERIMENT:coverageredesign] stdout 'pkg1 \[no test files\]' |
| [GOEXPERIMENT:coverageredesign] stdout 'pkg1 coverage: 0.0% of statements' |
| stdout 'pkg2 \S+ coverage: 0.0% of statements \[no tests to run\]' |
| stdout 'pkg3 \S+ coverage: 100.0% of statements' |
| stdout 'pkg4 \S+ coverage: \[no statements\]' |
| |
| # Second run to make sure that caching works properly. |
| go test -x -cover ./pkg1 ./pkg2 ./pkg3 ./pkg4 |
| [!GOEXPERIMENT:coverageredesign] stdout 'pkg1 \[no test files\]' |
| [GOEXPERIMENT:coverageredesign] stdout 'pkg1 coverage: 0.0% of statements' |
| stdout 'pkg2 \S+ coverage: 0.0% of statements \[no tests to run\]' |
| stdout 'pkg3 \S+ coverage: 100.0% of statements' |
| stdout 'pkg4 \S+ coverage: \[no statements\]' |
| [GOEXPERIMENT:coverageredesign] ! stderr 'link(\.exe"?)? -' |
| ! stderr 'compile(\.exe"?)? -' |
| ! stderr 'cover(\.exe"?)? -' |
| [GOEXPERIMENT:coverageredesign] stderr 'covdata(\.exe"?)? percent' |
| |
| # Now add in -coverprofile. |
| go test -cover -coverprofile=cov.dat ./pkg1 ./pkg2 ./pkg3 ./pkg4 |
| [!GOEXPERIMENT:coverageredesign] stdout 'pkg1 \[no test files\]' |
| [GOEXPERIMENT:coverageredesign] stdout 'pkg1 coverage: 0.0% of statements' |
| stdout 'pkg2 \S+ coverage: 0.0% of statements \[no tests to run\]' |
| stdout 'pkg3 \S+ coverage: 100.0% of statements' |
| stdout 'pkg4 \S+ coverage: \[no statements\]' |
| |
| # Validate |
| go tool cover -func=cov.dat |
| [GOEXPERIMENT:coverageredesign] stdout 'pkg1/a.go:5:\s+F\s+0.0%' |
| |
| -- go.mod -- |
| module m |
| |
| go 1.16 |
| -- pkg1/a.go -- |
| package pkg1 |
| |
| import "fmt" |
| |
| func F() { |
| fmt.Println("pkg1") |
| } |
| -- pkg2/a.go -- |
| package pkg2 |
| |
| import "fmt" |
| |
| func F() { |
| fmt.Println("pkg2") |
| } |
| -- pkg2/a_test.go -- |
| package pkg2 |
| -- pkg3/a.go -- |
| package pkg3 |
| |
| import "fmt" |
| |
| func F() { |
| fmt.Println("pkg3") |
| } |
| -- pkg3/a_test.go -- |
| package pkg3 |
| |
| import "testing" |
| |
| func TestF(t *testing.T) { |
| F() |
| } |
| -- pkg4/a.go -- |
| package pkg4 |
| |
| type T struct { |
| X bool |
| } |
| -- pkg4/a_test.go -- |
| package pkg4 |
| |
| import ( |
| "testing" |
| ) |
| |
| func TestT(t *testing.T) { |
| _ = T{} |
| } |