From: Rob Pike Date: Thu, 14 Jun 2018 01:09:28 +0000 (+1000) Subject: cmd/cover: remove use of diff in cover_test.go X-Git-Tag: go1.11beta1~89 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5fdacfa89f871888d6f8fde726b8f95f11e674d6;p=gostls13.git cmd/cover: remove use of diff in cover_test.go It's non-portable, and the test isn't hard to write without diff. It still produces helpful output in case of trouble: --- FAIL: TestCoverHTML (0.75s) cover_test.go:325: line 4 differs: got: case <-ch: want: case <-ch: This makes the test operating-system independent. Change-Id: Iff35f00cb76ba89bc1b93db01c6f994e74341f4a Reviewed-on: https://go-review.googlesource.com/118795 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/cover/cover_test.go b/src/cmd/cover/cover_test.go index ec80f94e59..23a609996b 100644 --- a/src/cmd/cover/cover_test.go +++ b/src/cmd/cover/cover_test.go @@ -18,7 +18,6 @@ import ( "os/exec" "path/filepath" "regexp" - "runtime" "strings" "testing" ) @@ -267,9 +266,6 @@ func TestCoverFunc(t *testing.T) { // Check that cover produces correct HTML. // Issue #25767. func TestCoverHTML(t *testing.T) { - if _, err := exec.LookPath("diff"); err != nil { - t.Skipf("skip test on %s: diff command is required", runtime.GOOS) - } testenv.MustHaveGoBuild(t) if !*debug { defer os.Remove(testcover) @@ -307,16 +303,30 @@ func TestCoverHTML(t *testing.T) { in = false } } - if err := ioutil.WriteFile(htmlHTML, out.Bytes(), 0644); err != nil { - t.Fatal(err) + golden, err := ioutil.ReadFile(htmlGolden) + if err != nil { + t.Fatalf("reading golden file: %v", err) } - diff := "diff" - if runtime.GOOS == "plan9" { - diff = "/bin/ape/diff" + // Ignore white space differences. + // Break into lines, then compare by breaking into words. + goldenLines := strings.Split(string(golden), "\n") + outLines := strings.Split(out.String(), "\n") + // Compare at the line level, stopping at first different line so + // we don't generate tons of output if there's an inserted or deleted line. + for i, goldenLine := range goldenLines { + if i > len(outLines) { + t.Fatalf("output shorter than golden; stops before line %d: %s\n", i+1, goldenLine) + } + // Convert all white space to simple spaces, for easy comparison. + goldenLine = strings.Join(strings.Fields(goldenLine), " ") + outLine := strings.Join(strings.Fields(outLines[i]), " ") + if outLine != goldenLine { + t.Fatalf("line %d differs: got:\n\t%s\nwant:\n\t%s", i+1, outLine, goldenLine) + } + } + if len(goldenLines) != len(outLines) { + t.Fatalf("output longer than golden; first extra output line %d: %q\n", len(goldenLines), outLines[len(goldenLines)]) } - // diff -uw testdata/html/html.html testdata/html/html.golden - cmd = exec.Command(diff, "-u", "-w", htmlHTML, htmlGolden) - run(cmd, t) } func run(c *exec.Cmd, t *testing.T) {