1
1
package qa_test
2
2
3
- // go test .
4
-
5
3
import (
6
4
"bytes"
7
5
"io"
8
- "os"
9
6
"path"
10
7
"qa/cmd"
11
8
"qa/cmd/run"
12
9
"qa/tapjio"
13
10
"testing"
11
+
12
+ "github.com/stretchr/testify/require"
14
13
)
15
14
15
+ type transcript struct {
16
+ Stderr string
17
+ Events []interface {}
18
+ SuiteEvents []tapjio.SuiteEvent
19
+ TestEvents []tapjio.TestEvent
20
+ TestStartedEvents []tapjio.TestStartedEvent
21
+ TraceEvents []tapjio.TraceEvent
22
+ FinalEvents []tapjio.FinalEvent
23
+ }
24
+
16
25
// TODO which ruby version must qa want to run?
17
- func runQa (t * testing.T , dir string ) (events [] interface {}, stderr string , err error ) {
18
- events = make ([]interface {}, 0 )
26
+ func runQa (t * testing.T , dir string ) (tscript transcript , err error ) {
27
+ tscript . Events = make ([]interface {}, 0 )
19
28
20
29
var stderrBuf bytes.Buffer
21
30
@@ -26,7 +35,7 @@ func runQa(t *testing.T, dir string) (events []interface{}, stderr string, err e
26
35
errCh := make (chan error , 1 )
27
36
go func () {
28
37
errCh <- run .Main (
29
- & cmd.Env {Stdout : wr , Stderr : os . Stderr , Dir : dir },
38
+ & cmd.Env {Stdout : wr , Stderr : & stderrBuf , Dir : dir },
30
39
[]string {
31
40
"-format=tapj" ,
32
41
"rspec" ,
@@ -40,23 +49,28 @@ func runQa(t *testing.T, dir string) (events []interface{}, stderr string, err e
40
49
err = tapjio .Decode (rd ,
41
50
& tapjio.DecodingCallbacks {
42
51
OnSuite : func (event tapjio.SuiteEvent ) error {
43
- events = append (events , event )
52
+ tscript .Events = append (tscript .Events , event )
53
+ tscript .SuiteEvents = append (tscript .SuiteEvents , event )
44
54
return nil
45
55
},
46
56
OnTestBegin : func (event tapjio.TestStartedEvent ) error {
47
- events = append (events , event )
57
+ tscript .Events = append (tscript .Events , event )
58
+ tscript .TestStartedEvents = append (tscript .TestStartedEvents , event )
48
59
return nil
49
60
},
50
61
OnTest : func (event tapjio.TestEvent ) error {
51
- events = append (events , event )
62
+ tscript .Events = append (tscript .Events , event )
63
+ tscript .TestEvents = append (tscript .TestEvents , event )
52
64
return nil
53
65
},
54
66
OnTrace : func (event tapjio.TraceEvent ) error {
55
- events = append (events , event )
67
+ tscript .Events = append (tscript .Events , event )
68
+ tscript .TraceEvents = append (tscript .TraceEvents , event )
56
69
return nil
57
70
},
58
71
OnFinal : func (event tapjio.FinalEvent ) error {
59
- events = append (events , event )
72
+ tscript .Events = append (tscript .Events , event )
73
+ tscript .FinalEvents = append (tscript .FinalEvents , event )
60
74
return nil
61
75
},
62
76
})
@@ -65,46 +79,66 @@ func runQa(t *testing.T, dir string) (events []interface{}, stderr string, err e
65
79
err = <- errCh
66
80
}
67
81
68
- stderr = stderrBuf .String ()
82
+ tscript . Stderr = stderrBuf .String ()
69
83
return
70
84
}
71
85
86
+ func findTestEvent (events []tapjio.TestEvent , label string ) tapjio.TestEvent {
87
+ for _ , event := range events {
88
+ if event .Label == label {
89
+ return event
90
+ }
91
+ }
92
+
93
+ return tapjio.TestEvent {}
94
+ }
95
+
72
96
func TestRuby (t * testing.T ) {
73
97
baseDir := "fixtures/ruby"
74
- var events []interface {}
75
98
var err error
76
- var stderr string
99
+ var tscript transcript
77
100
78
- events , stderr , err = runQa (t , path .Join (baseDir , "simple" ))
101
+ tscript , err = runQa (t , path .Join (baseDir , "simple" ))
79
102
if err != nil {
80
- t .Fatal ("qa failed here." , err , stderr )
103
+ t .Fatal ("qa failed here." , err , tscript . Stderr )
81
104
}
82
105
83
- if len (events ) == 0 {
84
- t .Fatal ("No events for tests in" , baseDir , stderr )
106
+ if len (tscript .Events ) == 0 {
107
+ t .Fatal ("No events for tests in" , baseDir , tscript .Stderr )
108
+ }
109
+
110
+ testEventLabelsExpectingStandardFds := []string {
111
+ "test_library_minitest" ,
112
+ "test_library_test_unit" ,
113
+ "my library rspec" ,
114
+ }
115
+ for _ , label := range testEventLabelsExpectingStandardFds {
116
+ testEvent := findTestEvent (tscript .TestEvents , label )
117
+ require .Contains (t , testEvent .Stdout , "Created MyLibrary [out]" )
118
+ require .Contains (t , testEvent .Stderr , "Created MyLibrary [err]" )
85
119
}
86
120
87
- finalEvent := events [len (events )- 1 ]
121
+ finalEvent := tscript . Events [len (tscript . Events )- 1 ]
88
122
if fe , ok := finalEvent .(tapjio.FinalEvent ); ok {
89
123
expect := tapjio.ResultTally {Total : 6 , Pass : 6 }
90
124
91
125
if expect != * fe .Counts {
92
- t .Fatal ("wrong count in final event." , expect , "vs" , * fe .Counts , events , stderr )
126
+ t .Fatal ("wrong count in final event." , expect , "vs" , * fe .Counts , tscript . Events , tscript . Stderr )
93
127
}
94
128
} else {
95
- t .Fatal ("last event wasn't a final event." , events , stderr )
129
+ t .Fatal ("last event wasn't a final event." , tscript . Events , tscript . Stderr )
96
130
}
97
131
98
- events , stderr , err = runQa (t , path .Join (baseDir , "all-outcomes" ))
132
+ tscript , err = runQa (t , path .Join (baseDir , "all-outcomes" ))
99
133
if err == nil {
100
- t .Fatal ("qa should have failed." , stderr )
134
+ t .Fatal ("qa should have failed." , tscript . Stderr )
101
135
}
102
136
103
- if len (events ) == 0 {
104
- t .Fatal ("No events for tests in" , baseDir , stderr )
137
+ if len (tscript . Events ) == 0 {
138
+ t .Fatal ("No events for tests in" , baseDir , tscript . Stderr )
105
139
}
106
140
107
- finalEvent = events [len (events )- 1 ]
141
+ finalEvent = tscript . Events [len (tscript . Events )- 1 ]
108
142
if fe , ok := finalEvent .(tapjio.FinalEvent ); ok {
109
143
expect := tapjio.ResultTally {
110
144
Total : 16 ,
@@ -115,9 +149,9 @@ func TestRuby(t *testing.T) {
115
149
}
116
150
117
151
if expect != * fe .Counts {
118
- t .Fatal ("wrong count in final event." , expect , "vs" , * fe .Counts , events , stderr )
152
+ t .Fatal ("wrong count in final event." , expect , "vs" , * fe .Counts , tscript . Events , tscript . Stderr )
119
153
}
120
154
} else {
121
- t .Fatal ("last event wasn't a final event." , events , stderr )
155
+ t .Fatal ("last event wasn't a final event." , tscript . Events , tscript . Stderr )
122
156
}
123
157
}
0 commit comments