summaryrefslogtreecommitdiff
path: root/xdelta3/go/src/xdelta/run.go
diff options
context:
space:
mode:
Diffstat (limited to 'xdelta3/go/src/xdelta/run.go')
-rw-r--r--xdelta3/go/src/xdelta/run.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/xdelta3/go/src/xdelta/run.go b/xdelta3/go/src/xdelta/run.go
index f9b4185..3b07178 100644
--- a/xdelta3/go/src/xdelta/run.go
+++ b/xdelta3/go/src/xdelta/run.go
@@ -1,14 +1,34 @@
1package xdelta 1package xdelta
2 2
3import ( 3import (
4 "fmt"
5 "io"
4 "io/ioutil" 6 "io/ioutil"
5 "os" 7 "os"
8 "os/exec"
6) 9)
7 10
11type Program struct {
12 Path string
13}
14
15type Run struct {
16 Cmd exec.Cmd
17 Srcfile string
18 Stdin io.WriteCloser
19 Srcin io.WriteCloser
20 Stdout io.ReadCloser
21 Stderr io.ReadCloser
22}
23
8type Runner struct { 24type Runner struct {
9 Testdir string 25 Testdir string
10} 26}
11 27
28func (r *Run) Wait() error {
29 return r.Cmd.Wait()
30}
31
12func NewRunner() (*Runner, error) { 32func NewRunner() (*Runner, error) {
13 if dir, err := ioutil.TempDir(tmpDir, "xrt"); err != nil { 33 if dir, err := ioutil.TempDir(tmpDir, "xrt"); err != nil {
14 return nil, err 34 return nil, err
@@ -17,6 +37,35 @@ func NewRunner() (*Runner, error) {
17 } 37 }
18} 38}
19 39
40func (r *Runner) newTestGroup(name string) (*TestGroup) {
41 tg := &TestGroup{Runner: r}
42 tg.WaitGroup.Add(1)
43 g0 := &Goroutine{tg, name, false}
44 tg.running = append(tg.running, g0)
45 tg.main = g0
46 return tg
47}
48
20func (r *Runner) Cleanup() { 49func (r *Runner) Cleanup() {
21 os.RemoveAll(r.Testdir) 50 os.RemoveAll(r.Testdir)
22} 51}
52
53func (r *Runner) RunTest(name string, f func (t *TestGroup)) {
54 t := r.newTestGroup(name)
55 var rec interface{}
56 defer func() {
57 if r := recover(); r != nil {
58 fmt.Println("PANIC in ", name, ": ", r)
59 rec = r
60 } else {
61 // Goexit
62 }
63 }()
64 fmt.Println("Testing", name, "...")
65 f(t)
66 if t.errors == nil && rec == nil {
67 fmt.Println("Success:", name)
68 } else {
69 fmt.Println("FAILED:", name, t.errors, rec)
70 }
71}