diff options
Diffstat (limited to 'xdelta3/go/src/xdelta/run.go')
-rw-r--r-- | xdelta3/go/src/xdelta/run.go | 49 |
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 @@ | |||
1 | package xdelta | 1 | package xdelta |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | ||
5 | "io" | ||
4 | "io/ioutil" | 6 | "io/ioutil" |
5 | "os" | 7 | "os" |
8 | "os/exec" | ||
6 | ) | 9 | ) |
7 | 10 | ||
11 | type Program struct { | ||
12 | Path string | ||
13 | } | ||
14 | |||
15 | type 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 | |||
8 | type Runner struct { | 24 | type Runner struct { |
9 | Testdir string | 25 | Testdir string |
10 | } | 26 | } |
11 | 27 | ||
28 | func (r *Run) Wait() error { | ||
29 | return r.Cmd.Wait() | ||
30 | } | ||
31 | |||
12 | func NewRunner() (*Runner, error) { | 32 | func 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 | ||
40 | func (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 | |||
20 | func (r *Runner) Cleanup() { | 49 | func (r *Runner) Cleanup() { |
21 | os.RemoveAll(r.Testdir) | 50 | os.RemoveAll(r.Testdir) |
22 | } | 51 | } |
52 | |||
53 | func (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 | } | ||