mirror of
https://github.com/golang/go
synced 2024-11-05 19:46:11 -07:00
df13fa7beb
I got tired of spurious 'git' diffs while a 'go test' was running, so I fixed the test that produced the diffs. (We need to do that anyway in order to run them in the module cache, plus it's just good hygiene not to have tests interfering with each other's sources.) Tested using: $ chmod -R ugo-w . && go test ./...; chmod -R u+w . Updates golang/go#28387 Change-Id: Ie17e31aecf0e3cb022df5503d7c443000366a5c6 Reviewed-on: https://go-review.googlesource.com/c/tools/+/192577 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
108 lines
2.6 KiB
Go
108 lines
2.6 KiB
Go
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// No testdata on Android.
|
|
|
|
// +build !android
|
|
|
|
package main_test
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"golang.org/x/tools/internal/testenv"
|
|
)
|
|
|
|
const (
|
|
// Data directory, also the package directory for the test.
|
|
testdata = "testdata"
|
|
)
|
|
|
|
var debug = false // Keeps the rewritten files around if set.
|
|
|
|
// Run this shell script, but do it in Go so it can be run by "go test".
|
|
//
|
|
// replace the word LINE with the line number < testdata/test.go > testdata/test_line.go
|
|
// go build -o ./testcover
|
|
// ./testcover -mode=count -var=CoverTest -o ./testdata/test_cover.go testdata/test_line.go
|
|
// go run ./testdata/main.go ./testdata/test.go
|
|
//
|
|
func TestCover(t *testing.T) {
|
|
testenv.NeedsTool(t, "go")
|
|
|
|
tmpdir, err := ioutil.TempDir("", "TestCover")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() {
|
|
if debug {
|
|
fmt.Printf("test files left in %s\n", tmpdir)
|
|
} else {
|
|
os.RemoveAll(tmpdir)
|
|
}
|
|
}()
|
|
|
|
testcover := filepath.Join(tmpdir, "testcover.exe")
|
|
testMain := filepath.Join(tmpdir, "main.go")
|
|
testTest := filepath.Join(tmpdir, "test.go")
|
|
coverInput := filepath.Join(tmpdir, "test_line.go")
|
|
coverOutput := filepath.Join(tmpdir, "test_cover.go")
|
|
|
|
for _, f := range []string{testMain, testTest} {
|
|
data, err := ioutil.ReadFile(filepath.Join(testdata, filepath.Base(f)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ioutil.WriteFile(f, data, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
// Read in the test file (testTest) and write it, with LINEs specified, to coverInput.
|
|
file, err := ioutil.ReadFile(testTest)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
lines := bytes.Split(file, []byte("\n"))
|
|
for i, line := range lines {
|
|
lines[i] = bytes.Replace(line, []byte("LINE"), []byte(fmt.Sprint(i+1)), -1)
|
|
}
|
|
err = ioutil.WriteFile(coverInput, bytes.Join(lines, []byte("\n")), 0666)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// go build -o testcover
|
|
cmd := exec.Command("go", "build", "-o", testcover)
|
|
run(cmd, t)
|
|
|
|
// ./testcover -mode=count -var=coverTest -o ./testdata/test_cover.go testdata/test_line.go
|
|
cmd = exec.Command(testcover, "-mode=count", "-var=coverTest", "-o", coverOutput, coverInput)
|
|
run(cmd, t)
|
|
|
|
// defer removal of ./testdata/test_cover.go
|
|
if !debug {
|
|
defer os.Remove(coverOutput)
|
|
}
|
|
|
|
// go run ./testdata/main.go ./testdata/test.go
|
|
cmd = exec.Command("go", "run", testMain, coverOutput)
|
|
run(cmd, t)
|
|
}
|
|
|
|
func run(c *exec.Cmd, t *testing.T) {
|
|
c.Stdout = os.Stdout
|
|
c.Stderr = os.Stderr
|
|
err := c.Run()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|