@@ -5,6 +5,7 @@ use std::time::{Duration, Instant};
5
5
use anyhow:: { anyhow, Context , Error , Result } ;
6
6
use console:: style;
7
7
use futures_util:: { stream, StreamExt , TryFutureExt } ;
8
+ use tracing:: { info_span, Instrument } ;
8
9
9
10
use crate :: {
10
11
discover_tests_with_selections, parse_test_cases, ParsedTestCase , PlannerTestRunner , TestCase ,
@@ -59,37 +60,53 @@ where
59
60
let test_stream = stream:: iter ( tests) . map ( |( path, testname) | {
60
61
let runner_fn = & runner_fn;
61
62
let testname_x = testname. clone ( ) ;
63
+ let testname_y = testname. clone ( ) ;
62
64
async {
63
65
let mut runner = runner_fn ( ) . await ?;
64
66
let start = Instant :: now ( ) ;
65
- tokio:: spawn ( async move {
66
- let testcases = tokio:: fs:: read ( & path) . await ?;
67
- let testcases: Vec < TestCase > = serde_yaml:: from_slice ( & testcases) ?;
68
- let testcases = parse_test_cases (
69
- {
70
- let mut path = path. clone ( ) ;
71
- path. pop ( ) ;
72
- path
73
- } ,
74
- testcases,
75
- ) ?;
76
- let mut generated_result = String :: new ( ) ;
77
- for testcase in testcases {
78
- let runner_result = runner. run ( & testcase) . await ;
79
- if !testcase. no_capture {
80
- generate_result ( & testcase, & runner_result, & mut generated_result) ?;
67
+ tokio:: spawn (
68
+ async move {
69
+ if options. serial {
70
+ println ! ( "{} {}" , style( "[RUN]" ) . yellow( ) . bold( ) , & testname_y) ;
81
71
}
82
- }
83
- let path = {
84
- let mut path = path;
85
- path. set_extension ( RESULT_SUFFIX ) ;
86
- path
87
- } ;
88
- tokio:: fs:: write ( & path, generated_result) . await ?;
72
+ let testcases = tokio:: fs:: read ( & path) . await ?;
73
+ let testcases: Vec < TestCase > = serde_yaml:: from_slice ( & testcases) ?;
74
+ let testcases = parse_test_cases (
75
+ {
76
+ let mut path = path. clone ( ) ;
77
+ path. pop ( ) ;
78
+ path
79
+ } ,
80
+ testcases,
81
+ ) ?;
82
+ let mut generated_result = String :: new ( ) ;
83
+ for ( idx, testcase) in testcases. into_iter ( ) . enumerate ( ) {
84
+ let runner_result = runner
85
+ . run ( & testcase)
86
+ . instrument ( if let Some ( ref id) = testcase. id {
87
+ info_span ! ( "testcase" , id = id)
88
+ } else {
89
+ info_span ! ( "testcase" , idx = idx)
90
+ } )
91
+ . await ;
92
+ if !testcase. no_capture {
93
+ generate_result ( & testcase, & runner_result, & mut generated_result) ?;
94
+ }
95
+ }
96
+ let path = {
97
+ let mut path = path;
98
+ path. set_extension ( RESULT_SUFFIX ) ;
99
+ path
100
+ } ;
101
+ tokio:: fs:: write ( & path, generated_result) . await ?;
89
102
90
- Ok :: < _ , Error > ( ( ) )
91
- } )
92
- . await ??;
103
+ Ok :: < _ , Error > ( ( ) )
104
+ }
105
+ . instrument ( info_span ! ( "file" , testname = testname. as_str( ) ) ) ,
106
+ )
107
+ . await
108
+ . with_context ( || format ! ( "when joining tokio task for testname={testname}" ) ) ?
109
+ . with_context ( || format ! ( "when processing testname={testname}" ) ) ?;
93
110
let time = start. elapsed ( ) ;
94
111
Ok :: < _ , Error > ( TestResult { testname, time } )
95
112
}
0 commit comments