mirror of
https://github.com/golang/go
synced 2024-09-29 05:24:32 -06:00
cmd/cover: add newline to fix -covermode=atomic build error
Fix a minor buglet in atomic mode fixup that would generate non-compilable code for a package containing only the "package X" clause with no trailing newline following the "X". Fixes #58370. Change-Id: I0d9bc4f2b687c6bd913595418f6db7dbe50cc5df Reviewed-on: https://go-review.googlesource.com/c/go/+/466115 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
cdc65b83fe
commit
da93766043
@ -656,7 +656,7 @@ func (p *Package) annotateFile(name string, fd io.Writer, last bool) {
|
||||
// Emit a reference to the atomic package to avoid
|
||||
// import and not used error when there's no code in a file.
|
||||
if *mode == "atomic" {
|
||||
fmt.Fprintf(fd, "var _ = %sLoadUint32\n", atomicPackagePrefix())
|
||||
fmt.Fprintf(fd, "\nvar _ = %sLoadUint32\n", atomicPackagePrefix())
|
||||
}
|
||||
|
||||
// Last file? Emit meta-data and converage config.
|
||||
|
@ -126,6 +126,9 @@ func TestCoverWithToolExec(t *testing.T) {
|
||||
t.Run("FuncWithDuplicateLines", func(t *testing.T) {
|
||||
testFuncWithDuplicateLines(t, toolexecArg)
|
||||
})
|
||||
t.Run("MissingTrailingNewlineIssue58370", func(t *testing.T) {
|
||||
testMissingTrailingNewlineIssue58370(t, toolexecArg)
|
||||
})
|
||||
}
|
||||
|
||||
// Execute this command sequence:
|
||||
@ -574,3 +577,42 @@ func runExpectingError(c *exec.Cmd, t *testing.T) string {
|
||||
}
|
||||
return string(out)
|
||||
}
|
||||
|
||||
// Test instrumentation of package that ends before an expected
|
||||
// trailing newline following package clause. Issue #58370.
|
||||
func testMissingTrailingNewlineIssue58370(t *testing.T, toolexecArg string) {
|
||||
testenv.MustHaveGoBuild(t)
|
||||
dir := tempDir(t)
|
||||
|
||||
t.Parallel()
|
||||
|
||||
noeolDir := filepath.Join(dir, "issue58370")
|
||||
noeolGo := filepath.Join(noeolDir, "noeol.go")
|
||||
noeolTestGo := filepath.Join(noeolDir, "noeol_test.go")
|
||||
|
||||
if err := os.Mkdir(noeolDir, 0777); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := os.WriteFile(filepath.Join(noeolDir, "go.mod"), []byte("module noeol\n"), 0666); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
const noeolContents = `package noeol`
|
||||
if err := os.WriteFile(noeolGo, []byte(noeolContents), 0444); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
const noeolTestContents = `
|
||||
package noeol
|
||||
import "testing"
|
||||
func TestCoverage(t *testing.T) { }
|
||||
`
|
||||
if err := os.WriteFile(noeolTestGo, []byte(noeolTestContents), 0444); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// go test -covermode atomic
|
||||
cmd := testenv.Command(t, testenv.GoToolPath(t), "test", toolexecArg, "-covermode", "atomic")
|
||||
cmd.Env = append(cmd.Environ(), "CMDCOVER_TOOLEXEC=true")
|
||||
cmd.Dir = noeolDir
|
||||
run(cmd, t)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user