| |
| # Testcase for #63356. In this bug we're doing a "go test -coverprofile" |
| # run for a collection of packages, mostly independent (hence tests can |
| # be done in parallel) and in the original bug, temp coverage profile |
| # files were not being properly qualified and were colliding, resulting |
| # in a corrupted final profile. Actual content of the packages doesn't |
| # especially matter as long as we have a mix of packages with tests and |
| # multiple packages without tests. |
| |
| [short] skip |
| |
| # Kick off test. |
| go test -p=10 -vet=off -count=1 -coverprofile=cov.p ./... |
| |
| # Make sure resulting profile is digestible. |
| go tool cover -func=cov.p |
| |
| # No extraneous extra files please. |
| ! exists _cover_.out |
| |
| -- a/a.go -- |
| package a |
| |
| func init() { |
| println("package 'a' init: launch the missiles!") |
| } |
| |
| func AFunc() int { |
| return 42 |
| } |
| -- a/a_test.go -- |
| package a |
| |
| import "testing" |
| |
| func TestA(t *testing.T) { |
| if AFunc() != 42 { |
| t.Fatalf("bad!") |
| } |
| } |
| -- aa/aa.go -- |
| package aa |
| |
| import "M/it" |
| |
| func AA(y int) int { |
| c := it.Conc{} |
| x := it.Callee(&c) |
| println(x, y) |
| return 0 |
| } |
| -- aa/aa_test.go -- |
| package aa |
| |
| import "testing" |
| |
| func TestMumble(t *testing.T) { |
| AA(3) |
| } |
| -- b/b.go -- |
| package b |
| |
| func init() { |
| println("package 'b' init: release the kraken") |
| } |
| |
| func BFunc() int { |
| return -42 |
| } |
| -- b/b_test.go -- |
| package b |
| |
| import "testing" |
| |
| func TestB(t *testing.T) { |
| if BFunc() != -42 { |
| t.Fatalf("bad!") |
| } |
| } |
| -- deadstuff/deadstuff.go -- |
| package deadstuff |
| |
| func downStreamOfPanic(x int) { |
| panic("bad") |
| if x < 10 { |
| println("foo") |
| } |
| } |
| -- deadstuff/deadstuff_test.go -- |
| package deadstuff |
| |
| import "testing" |
| |
| func TestMumble(t *testing.T) { |
| defer func() { |
| if x := recover(); x != nil { |
| println("recovered") |
| } |
| }() |
| downStreamOfPanic(10) |
| } |
| -- go.mod -- |
| module M |
| |
| go 1.21 |
| -- it/it.go -- |
| package it |
| |
| type Ctr interface { |
| Count() int |
| } |
| |
| type Conc struct { |
| X int |
| } |
| |
| func (c *Conc) Count() int { |
| return c.X |
| } |
| |
| func DoCall(c *Conc) { |
| c2 := Callee(c) |
| println(c2.Count()) |
| } |
| |
| func Callee(ii Ctr) Ctr { |
| q := ii.Count() |
| return &Conc{X: q} |
| } |
| -- main/main.go -- |
| package main |
| |
| import ( |
| "M/a" |
| "M/b" |
| ) |
| |
| func MFunc() string { |
| return "42" |
| } |
| |
| func M2Func() int { |
| return a.AFunc() + b.BFunc() |
| } |
| |
| func init() { |
| println("package 'main' init") |
| } |
| |
| func main() { |
| println(a.AFunc() + b.BFunc()) |
| } |
| -- main/main_test.go -- |
| package main |
| |
| import "testing" |
| |
| func TestMain(t *testing.T) { |
| if MFunc() != "42" { |
| t.Fatalf("bad!") |
| } |
| if M2Func() != 0 { |
| t.Fatalf("also bad!") |
| } |
| } |
| -- n/n.go -- |
| package n |
| |
| type N int |
| -- onlytest/mumble_test.go -- |
| package onlytest |
| |
| import "testing" |
| |
| func TestFoo(t *testing.T) { |
| t.Logf("Whee\n") |
| } |
| -- x/x.go -- |
| package x |
| |
| func XFunc() int { |
| return 2 * 2 |
| } |
| -- xinternal/i.go -- |
| package i |
| |
| func I() int { return 32 } |
| -- xinternal/q/q.go -- |
| package q |
| |
| func Q() int { |
| return 42 |
| } |