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

     1  
     2  # Testcase inspired by issue #58770, intended to verify that we're
     3  # doing the right thing when running "go test -coverpkg=./... ./..."
     4  # on a collection of packages where some have init functions and some
     5  # do not, some have tests and some do not.
     6  
     7  [short] skip
     8  
     9  # Verify correct statements percentages. We have a total of 10
    10  # statements in the packages matched by "./..."; package "a" (for
    11  # example) has two statements so we expect 20.0% stmts covered. Go
    12  # 1.19 would print 50% here (due to force importing of all ./...
    13  # packages); prior to the fix for #58770 Go 1.20 would show 100%
    14  # coverage. For packages "x" and "f" (which have no tests), check for
    15  # 0% stmts covered (as opposed to "no test files").
    16  
    17  go test -count=1 -coverprofile=cov.dat -coverpkg=./... ./...
    18  stdout '^\s*\?\s+M/n\s+\[no test files\]'
    19  stdout '^\s*M/x\s+coverage: 0.0% of statements'
    20  stdout '^\s*M/f\s+coverage: 0.0% of statements'
    21  stdout '^ok\s+M/a\s+\S+\s+coverage: 30.0% of statements in ./...'
    22  stdout '^ok\s+M/b\s+\S+\s+coverage: 20.0% of statements in ./...'
    23  stdout '^ok\s+M/main\s+\S+\s+coverage: 80.0% of statements in ./...'
    24  
    25  # Check for selected elements in the collected coverprofile as well.
    26  
    27  go tool cover -func=cov.dat
    28  stdout '^M/x/x.go:3:\s+XFunc\s+0.0%'
    29  stdout '^M/b/b.go:7:\s+BFunc\s+100.0%'
    30  stdout '^total:\s+\(statements\)\s+80.0%'
    31  
    32  -- go.mod --
    33  module M
    34  
    35  go 1.21
    36  -- a/a.go --
    37  package a
    38  
    39  import "M/f"
    40  
    41  func init() {
    42  	println("package 'a' init: launch the missiles!")
    43  }
    44  
    45  func AFunc() int {
    46  	return f.Id()
    47  }
    48  -- a/a_test.go --
    49  package a
    50  
    51  import "testing"
    52  
    53  func TestA(t *testing.T) {
    54  	if AFunc() != 42 {
    55  		t.Fatalf("bad!")
    56  	}
    57  }
    58  -- b/b.go --
    59  package b
    60  
    61  func init() {
    62  	println("package 'b' init: release the kraken")
    63  }
    64  
    65  func BFunc() int {
    66  	return -42
    67  }
    68  -- b/b_test.go --
    69  package b
    70  
    71  import "testing"
    72  
    73  func TestB(t *testing.T) {
    74  	if BFunc() != -42 {
    75  		t.Fatalf("bad!")
    76  	}
    77  }
    78  -- f/f.go --
    79  package f
    80  
    81  func Id() int {
    82       return 42
    83  }
    84  -- main/main.go --
    85  package main
    86  
    87  import (
    88  	"M/a"
    89  	"M/b"
    90  )
    91  
    92  func MFunc() string {
    93  	return "42"
    94  }
    95  
    96  func M2Func() int {
    97  	return a.AFunc() + b.BFunc()
    98  }
    99  
   100  func init() {
   101  	println("package 'main' init")
   102  }
   103  
   104  func main() {
   105  	println(a.AFunc() + b.BFunc())
   106  }
   107  -- main/main_test.go --
   108  package main
   109  
   110  import "testing"
   111  
   112  func TestMain(t *testing.T) {
   113  	if MFunc() != "42" {
   114  		t.Fatalf("bad!")
   115  	}
   116  	if M2Func() != 0 {
   117  		t.Fatalf("also bad!")
   118  	}
   119  }
   120  -- n/n.go --
   121  package n
   122  
   123  type N int
   124  -- x/x.go --
   125  package x
   126  
   127  func XFunc() int {
   128  	return 2 * 2
   129  }
   130  

View as plain text