Source file
src/testing/run_example_js.go
Documentation: testing
1
2
3
4
5
6
7
8 package testing
9
10 import (
11 "fmt"
12 "io"
13 "os"
14 "strings"
15 "time"
16 )
17
18
19
20 func runExample(eg InternalExample) (ok bool) {
21 if *chatty {
22 fmt.Printf("=== RUN %s\n", eg.Name)
23 }
24
25
26
27 stdout := os.Stdout
28 f := createTempFile(eg.Name)
29 os.Stdout = f
30 finished := false
31 start := time.Now()
32
33
34 defer func() {
35 timeSpent := time.Since(start)
36
37
38 os.Stdout = stdout
39 var buf strings.Builder
40 _, seekErr := f.Seek(0, os.SEEK_SET)
41 _, readErr := io.Copy(&buf, f)
42 out := buf.String()
43 f.Close()
44 os.Remove(f.Name())
45 if seekErr != nil {
46 fmt.Fprintf(os.Stderr, "testing: seek temp file: %v\n", seekErr)
47 os.Exit(1)
48 }
49 if readErr != nil {
50 fmt.Fprintf(os.Stderr, "testing: read temp file: %v\n", readErr)
51 os.Exit(1)
52 }
53
54 err := recover()
55 ok = eg.processRunResult(out, timeSpent, finished, err)
56 }()
57
58
59 eg.F()
60 finished = true
61 return
62 }
63
64 func createTempFile(exampleName string) *os.File {
65 for i := 0; ; i++ {
66 name := fmt.Sprintf("%s/go-example-stdout-%s-%d.txt", os.TempDir(), exampleName, i)
67 f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
68 if err != nil {
69 if os.IsExist(err) {
70 continue
71 }
72 fmt.Fprintf(os.Stderr, "testing: open temp file: %v\n", err)
73 os.Exit(1)
74 }
75 return f
76 }
77 }
78
View as plain text