diff --git a/src/cmd/go/testdata/script/test_crlf_example.txt b/src/cmd/go/testdata/script/test_crlf_example.txt new file mode 100644 index 0000000000000..9c2a70aa39b13 --- /dev/null +++ b/src/cmd/go/testdata/script/test_crlf_example.txt @@ -0,0 +1,39 @@ +# Tests that crlf in the output of examples are handled. +# Verifies golang.org/issue/51269 +go test x_test.go + +-- x_test.go -- +package x + +import ( + "io" + "fmt" + "os" + "runtime" +) + +func Example_lf() { + fmt.Print("foo", "\n", "bar") + // Output: + // foo + // bar +} + +func Example_println() { + fmt.Println("foo") + fmt.Println("bar") + // Output: + // foo + // bar +} + +func Example_crlf() { + if runtime.GOOS == "windows" { + io.WriteString(os.Stdout, "foo\r\nbar\r\n") + } else { + io.WriteString(os.Stdout, "foo\nbar\n") + } + // Output: + // foo + // bar +} diff --git a/src/testing/example.go b/src/testing/example.go index b14477a406973..c343ae2aa2f39 100644 --- a/src/testing/example.go +++ b/src/testing/example.go @@ -6,6 +6,7 @@ package testing import ( "fmt" + "runtime" "slices" "strings" "time" @@ -66,6 +67,10 @@ func (eg *InternalExample) processRunResult(stdout string, timeSpent time.Durati var fail string got := strings.TrimSpace(stdout) want := strings.TrimSpace(eg.Output) + if runtime.GOOS == "windows" { + got = strings.ReplaceAll(got, "\r\n", "\n") + want = strings.ReplaceAll(want, "\r\n", "\n") + } if eg.Unordered { if sortLines(got) != sortLines(want) && recovered == nil { fail = fmt.Sprintf("got:\n%s\nwant (unordered):\n%s\n", stdout, eg.Output)