@@ -102,44 +102,13 @@ type console_test_state =
102
102
fn run_tests_console( opts: test_opts,
103
103
tests: [ test_desc] ) -> bool {
104
104
105
- let log_out = alt opts. logfile {
106
- some( path) {
107
- alt io:: file_writer( path, [ io:: create, io:: truncate] ) {
108
- result:: ok( w) { some( w) }
109
- result:: err( s) {
110
- fail( #fmt( "can't open output file: %s" , s) )
111
- }
112
- }
113
- }
114
- none { none }
115
- } ;
116
-
117
- let st =
118
- @{ out: io:: stdout ( ) ,
119
- log_out: log_out,
120
- use_color: use_color ( ) ,
121
- mut total: 0 u,
122
- mut passed: 0 u,
123
- mut failed: 0 u,
124
- mut ignored: 0 u,
125
- mut failures: [ ] } ;
126
-
127
- let p = comm:: port :: < testevent > ( ) ;
128
- let reporter = comm:: chan ( p) ;
129
-
130
- task:: spawn { ||
131
- run_tests ( opts, tests, reporter) ;
132
- } ;
133
-
134
- while true {
135
- alt comm:: recv ( p) {
105
+ fn callback( event: testevent, st: console_test_state) {
106
+ alt event {
136
107
te_filtered( filtered_tests) {
137
108
st. total = vec:: len( filtered_tests) ;
138
109
st. out. write_line( #fmt[ "\n running %u tests" , st. total] ) ;
139
110
}
140
- te_wait ( test) {
141
- st. out . write_str ( #fmt[ "test %s ... " , test. name ] ) ;
142
- }
111
+ te_wait( test) { st. out. write_str( #fmt[ "test %s ... " , test. name] ) ; }
143
112
te_result( test, result) {
144
113
alt st. log_out {
145
114
some( f) {
@@ -166,12 +135,33 @@ fn run_tests_console(opts: test_opts,
166
135
}
167
136
}
168
137
}
169
- te_done {
170
- break ;
171
- }
172
138
}
173
139
}
174
140
141
+ let log_out = alt opts. logfile {
142
+ some ( path) {
143
+ alt io:: file_writer ( path, [ io:: create, io:: truncate] ) {
144
+ result:: ok ( w) { some ( w) }
145
+ result:: err ( s) {
146
+ fail ( #fmt ( "can't open output file: %s" , s) )
147
+ }
148
+ }
149
+ }
150
+ none { none }
151
+ } ;
152
+
153
+ let st =
154
+ @{ out: io:: stdout ( ) ,
155
+ log_out: log_out,
156
+ use_color: use_color ( ) ,
157
+ mut total: 0 u,
158
+ mut passed: 0 u,
159
+ mut failed: 0 u,
160
+ mut ignored: 0 u,
161
+ mut failures: [ ] } ;
162
+
163
+ run_tests ( opts, tests, bind callback ( _, st) ) ;
164
+
175
165
assert ( st. passed + st. failed + st. ignored == st. total ) ;
176
166
let success = st. failed == 0 u;
177
167
@@ -181,6 +171,7 @@ fn run_tests_console(opts: test_opts,
181
171
182
172
st. out . write_str ( #fmt[ "\n result: " ] ) ;
183
173
if success {
174
+ // There's no parallelism at this point so it's safe to use color
184
175
write_ok ( st. out , true ) ;
185
176
} else { write_failed ( st. out , true ) ; }
186
177
st. out . write_str ( #fmt[ ". %u passed; %u failed; %u ignored\n \n " , st. passed ,
@@ -273,16 +264,15 @@ enum testevent {
273
264
te_filtered( [ test_desc ] ) ,
274
265
te_wait( test_desc ) ,
275
266
te_result( test_desc , test_result ) ,
276
- te_done,
277
267
}
278
268
279
269
type monitor_msg = ( test_desc , test_result ) ;
280
270
281
271
fn run_tests ( opts : test_opts , tests : [ test_desc ] ,
282
- reporter : comm :: chan < testevent > ) {
272
+ callback : fn @ ( testevent ) ) {
283
273
284
274
let mut filtered_tests = filter_tests ( opts, tests) ;
285
- comm :: send ( reporter , te_filtered ( filtered_tests) ) ;
275
+ callback ( te_filtered ( filtered_tests) ) ;
286
276
287
277
// It's tempting to just spawn all the tests at once, but since we have
288
278
// many tests that run in other processes we would be making a big mess.
@@ -304,7 +294,7 @@ fn run_tests(opts: test_opts, tests: [test_desc],
304
294
// We are doing one test at a time so we can print the name
305
295
// of the test before we run it. Useful for debugging tests
306
296
// that hang forever.
307
- comm :: send ( reporter , te_wait ( test) ) ;
297
+ callback ( te_wait ( test) ) ;
308
298
}
309
299
run_test ( test, ch) ;
310
300
wait_idx += 1 u;
@@ -313,13 +303,12 @@ fn run_tests(opts: test_opts, tests: [test_desc],
313
303
314
304
let ( test, result) = comm:: recv ( p) ;
315
305
if concurrency != 1 u {
316
- comm :: send ( reporter , te_wait ( test) ) ;
306
+ callback ( te_wait ( test) ) ;
317
307
}
318
- comm :: send ( reporter , te_result ( test, result) ) ;
308
+ callback ( te_result ( test, result) ) ;
319
309
wait_idx -= 1 u;
320
310
done_idx += 1 u;
321
311
}
322
- comm:: send ( reporter, te_done) ;
323
312
}
324
313
325
314
// Windows tends to dislike being overloaded with threads.
0 commit comments