| # Test that the test cache is invalidated when -coverpkg dependencies change, |
| # even when -coverprofile is not specified. This exercises the else-if branch |
| # in tryCacheWithID that checks covMeta without a cover profile file. |
| |
| [short] skip |
| [GODEBUG:gocacheverify=1] skip |
| |
| # Start with a clean GOCACHE. |
| env GOCACHE=$WORK/cache |
| |
| cd proj |
| |
| # Run tests with -cover and -coverpkg but without -coverprofile. |
| go test -cover -coverpkg=proj/... ./... |
| stdout 'coverage:' |
| |
| # Run again — should be served from cache. |
| go test -cover -coverpkg=proj/... ./... |
| stdout '\(cached\)' |
| stdout 'coverage:' |
| |
| # Modify a covered package that is not directly under test. |
| cp ../sub_modified.go sub/sub.go |
| |
| # Run again — the cache must be invalidated because a covered package changed. |
| go test -cover -coverpkg=proj/... ./... |
| ! stdout '\(cached\)' |
| stdout 'coverage:' |
| |
| -- proj/go.mod -- |
| module proj |
| |
| go 1.21 |
| |
| -- proj/main.go -- |
| package proj |
| |
| import "proj/sub" |
| |
| func Add(a, b int) int { |
| return sub.Sub(a, -b) |
| } |
| |
| -- proj/main_test.go -- |
| package proj |
| |
| import "testing" |
| |
| func TestAdd(t *testing.T) { |
| if Add(1, 2) != 3 { |
| t.Fatal("expected 3") |
| } |
| } |
| |
| -- proj/sub/sub.go -- |
| package sub |
| |
| func Sub(a, b int) int { |
| return a - b |
| } |
| |
| -- proj/sub/sub_test.go -- |
| package sub |
| |
| import "testing" |
| |
| func TestSub(t *testing.T) { |
| if Sub(3, 1) != 2 { |
| t.Fatal("expected 2") |
| } |
| } |
| |
| -- sub_modified.go -- |
| package sub |
| |
| // Added a comment to change the source. |
| |
| func Sub(a, b int) int { |
| return a - b |
| } |