Text file src/cmd/go/testdata/script/cover_coverpkg_partial.txt

     1  
     2  # Testcase related to #58770 and #24570. This is intended to ensure
     3  # that coverage collection works in situations where we're testing a
     4  # collection of packages and supplying a -coverpkg pattern that
     5  # matches some but not all of the collection. In addition, some of the
     6  # packages have Go code but no tests, and other packages have tests
     7  # but no Go code. Package breakdown:
     8  #
     9  # Package         Code?           Tests?          Stmts           Imports
    10  # a               yes             yes             2               f
    11  # b               yes             yes             1               a, d
    12  # c               yes             yes             3               ---
    13  # d               yes             no              1               ---
    14  # e               no              yes             0               a, b
    15  # f               yes             no              3               ---
    16  #
    17  
    18  [short] skip
    19  
    20  # Test all packages with -coverpkg=./...
    21  go test -coverprofile=cov.p -coverpkg=./... ./...
    22  stdout '^ok\s+M/a\s+\S+\s+coverage: 50.0% of statements in ./...'
    23  stdout '^ok\s+M/b\s+\S+\s+coverage: 60.0% of statements in ./...'
    24  stdout '^ok\s+M/c\s+\S+\s+coverage: 30.0% of statements in ./...'
    25  stdout '^\s*M/d\s+coverage: 0.0% of statements'
    26  stdout '^\s*M/f\s+coverage: 0.0% of statements'
    27  
    28  # Test just the test-only package ./e but with -coverpkg=./...
    29  # Total number of statements should be 7 (e.g. a/b/d/f but not c)
    30  # and covered percent should be 6/7 (we hit everything in the
    31  # coverpkg pattern except the func in "d").
    32  go test -coverprofile=bar.p -coverpkg=./... ./e
    33  stdout '^ok\s+M/e\s+\S+\s+coverage: 85.7% of statements in ./...'
    34  
    35  # Test b and f with -coverpkg set to a/d/f. Total of 6 statements
    36  # in a/d/f, again we hit everything except DFunc.
    37  go test -coverprofile=baz.p -coverpkg=./a,./d,./f ./b ./f
    38  stdout '^ok\s+M/b\s+\S+\s+coverage: 83.3% of statements in ./a, ./d, ./f'
    39  stdout '^\s*M/f\s+coverage: 0.0% of statements'
    40  
    41  # This sub-test inspired by issue 65653: if package P is is matched
    42  # via the package pattern supplied as the argument to "go test -cover"
    43  # but P is not part of "-coverpkg", then we don't want coverage for P
    44  # (including the specific case where P has no test files).
    45  go test -coverpkg=./a ./...
    46  stdout '^ok\s+M/a\s+\S+\s+coverage: 100.0% of statements in ./a'
    47  stdout '^\s*\?\s+M/f\s+\[no test files\]'
    48  
    49  -- a/a.go --
    50  package a
    51  
    52  import "M/f"
    53  
    54  var G int
    55  
    56  func AFunc() int {
    57  	G = 1
    58  	return f.Id()
    59  }
    60  -- a/a_test.go --
    61  package a
    62  
    63  import "testing"
    64  
    65  func TestA(t *testing.T) {
    66  	if AFunc() != 42 {
    67  		t.Fatalf("bad!")
    68  	}
    69  }
    70  -- b/b.go --
    71  package b
    72  
    73  import (
    74  	"M/a"
    75  	"M/d"
    76  )
    77  
    78  func BFunc() int {
    79  	return -d.FortyTwo + a.AFunc()
    80  }
    81  -- b/b_test.go --
    82  package b
    83  
    84  import "testing"
    85  
    86  func TestB(t *testing.T) {
    87  	if BFunc() == 1010101 {
    88  		t.Fatalf("bad!")
    89  	}
    90  }
    91  -- c/c.go --
    92  package c
    93  
    94  var G int
    95  
    96  func CFunc(x, y int) int {
    97  	G += x
    98  	G -= y
    99  	return x + y
   100  }
   101  -- c/c_test.go --
   102  package c
   103  
   104  import "testing"
   105  
   106  func TestC(t *testing.T) {
   107  	if CFunc(10, 10) == 1010101 {
   108  		t.Fatalf("bad!")
   109  	}
   110  }
   111  -- d/d.go --
   112  package d
   113  
   114  const FortyTwo = 42
   115  
   116  func DFunc() int {
   117    return FortyTwo
   118  }
   119  
   120  -- e/e_test.go --
   121  package e
   122  
   123  import (
   124  	"M/a"
   125  	"M/b"
   126  	"testing"
   127  )
   128  
   129  func TestBlah(t *testing.T) {
   130  	if b.BFunc() == 1010101 {
   131  		t.Fatalf("bad")
   132  	}
   133  	a.AFunc()
   134  }
   135  -- f/f.go --
   136  package f
   137  
   138  var F int
   139  
   140  func Id() int {
   141  	F += 9
   142  	F *= 2
   143  	return 42
   144  }
   145  -- go.mod --
   146  module M
   147  
   148  go 1.21
   149  

View as plain text