
# Testcase related to #58770 and #24570. This is intended to ensure
# that coverage collection works in situations where we're testing a
# collection of packages and supplying a -coverpkg pattern that
# matches some but not all of the collection. In addition, some of the
# packages have Go code but no tests, and other packages have tests
# but no Go code. Package breakdown:
#
# Package         Code?           Tests?          Stmts           Imports
# a               yes             yes             2               f
# b               yes             yes             1               a, d
# c               yes             yes             3               ---
# d               yes             no              1               ---
# e               no              yes             0               a, b
# f               yes             no              3               ---
#

[short] skip
[!GOEXPERIMENT:coverageredesign] skip

# Test all packages with -coverpkg=./...
go test -coverprofile=cov.p -coverpkg=./... ./...
stdout '^ok\s+M/a\s+\S+\s+coverage: 50.0% of statements in ./...'
stdout '^ok\s+M/b\s+\S+\s+coverage: 60.0% of statements in ./...'
stdout '^ok\s+M/c\s+\S+\s+coverage: 30.0% of statements in ./...'
stdout '^\s*M/d\s+coverage: 0.0% of statements'
stdout '^\s*M/f\s+coverage: 0.0% of statements'

# Test just the test-only package ./e but with -coverpkg=./...
# Total number of statements should be 7 (e.g. a/b/d/f but not c)
# and covered percent should be 6/7 (we hit everything in the
# coverpkg pattern except the func in "d").
go test -coverprofile=bar.p -coverpkg=./... ./e
stdout '^ok\s+M/e\s+\S+\s+coverage: 85.7% of statements in ./...'

# Test b and f with -coverpkg set to a/d/f. Total of 6 statements
# in a/d/f, again we hit everything except DFunc.
go test -coverprofile=baz.p -coverpkg=./a,./d,./f ./b ./f
stdout '^ok\s+M/b\s+\S+\s+coverage: 83.3% of statements in ./a, ./d, ./f'
stdout '^\s*M/f\s+coverage: 0.0% of statements'

# This sub-test inspired by issue 65653: if package P is is matched
# via the package pattern supplied as the argument to "go test -cover"
# but P is not part of "-coverpkg", then we don't want coverage for P
# (including the specific case where P has no test files).
go test -coverpkg=./a ./...
stdout '^ok\s+M/a\s+\S+\s+coverage: 100.0% of statements in ./a'
stdout '^\s*\?\s+M/f\s+\[no test files\]'

-- a/a.go --
package a

import "M/f"

var G int

func AFunc() int {
	G = 1
	return f.Id()
}
-- a/a_test.go --
package a

import "testing"

func TestA(t *testing.T) {
	if AFunc() != 42 {
		t.Fatalf("bad!")
	}
}
-- b/b.go --
package b

import (
	"M/a"
	"M/d"
)

func BFunc() int {
	return -d.FortyTwo + a.AFunc()
}
-- b/b_test.go --
package b

import "testing"

func TestB(t *testing.T) {
	if BFunc() == 1010101 {
		t.Fatalf("bad!")
	}
}
-- c/c.go --
package c

var G int

func CFunc(x, y int) int {
	G += x
	G -= y
	return x + y
}
-- c/c_test.go --
package c

import "testing"

func TestC(t *testing.T) {
	if CFunc(10, 10) == 1010101 {
		t.Fatalf("bad!")
	}
}
-- d/d.go --
package d

const FortyTwo = 42

func DFunc() int {
  return FortyTwo
}

-- e/e_test.go --
package e

import (
	"M/a"
	"M/b"
	"testing"
)

func TestBlah(t *testing.T) {
	if b.BFunc() == 1010101 {
		t.Fatalf("bad")
	}
	a.AFunc()
}
-- f/f.go --
package f

var F int

func Id() int {
	F += 9
	F *= 2
	return 42
}
-- go.mod --
module M

go 1.21
