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},
+ }},
}