playground: add integration test for https://golang.org/cl/105235 Add a test case that checks fake timestamps generated by the patched runtime.write. Updates golang/go#24615 Updates golang/go#24659 Change-Id: I210cfd4500e7f72567539dd9b3e23da4f907a3e2 Reviewed-on: https://go-review.googlesource.com/106475 Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/sandbox.go b/sandbox.go index 04b7f7f..97d9b23 100644 --- a/sandbox.go +++ b/sandbox.go
@@ -25,6 +25,7 @@ "os" "os/exec" "path/filepath" + "reflect" "runtime" "strings" "text/template" @@ -344,6 +345,12 @@ if err != nil { stdlog.Fatal(err) } + if t.wantEvents != nil { + if !reflect.DeepEqual(resp.Events, t.wantEvents) { + stdlog.Fatalf("resp.Events = %q, want %q", resp.Events, t.wantEvents) + } + continue + } if t.errors != "" { if resp.Errors != t.errors { stdlog.Fatalf("resp.Errors = %q, want %q", resp.Errors, t.errors) @@ -369,6 +376,7 @@ var tests = []struct { prog, want, errors string + wantEvents []Event }{ {prog: ` package main @@ -631,4 +639,32 @@ fmt.Fprintln(os.Stdout, "A") } `, want: "A\nB\nA\nA\n"}, + + // Integration test for runtime.write fake timestamps. + {prog: ` +package main + +import ( + "fmt" + "os" + "time" +) + +func main() { + fmt.Fprintln(os.Stdout, "A") + fmt.Fprintln(os.Stderr, "B") + fmt.Fprintln(os.Stdout, "A") + fmt.Fprintln(os.Stdout, "A") + time.Sleep(time.Second) + fmt.Fprintln(os.Stderr, "B") + time.Sleep(time.Second) + fmt.Fprintln(os.Stdout, "A") +} +`, wantEvents: []Event{ + {"A\n", "stdout", 0}, + {"B\n", "stderr", time.Nanosecond}, + {"A\nA\n", "stdout", time.Nanosecond}, + {"B\n", "stderr", time.Second - 2*time.Nanosecond}, + {"A\n", "stdout", time.Second}, + }}, }