11use std:: {
22 borrow:: Cow ,
33 fs:: { self , DirEntry } ,
4+ process:: ExitCode ,
45} ;
56
6- use libtest_mimic:: { run_tests , Arguments , Outcome , Test } ;
7+ use libtest_mimic:: { run , Arguments , Failed , Trial } ;
78
89use saphyr:: { LoadableYamlNode , Mapping , Scalar , Yaml } ;
910use saphyr_parser:: {
@@ -19,18 +20,18 @@ struct YamlTest {
1920 expected_error : bool ,
2021}
2122
22- fn main ( ) -> Result < ( ) > {
23+ fn main ( ) -> Result < ExitCode > {
2324 if !std:: path:: Path :: new ( "tests/yaml-test-suite" ) . is_dir ( ) {
2425 eprintln ! ( "===================================================================" ) ;
2526 eprintln ! ( "/!\\ yaml-test-suite directory not found, Skipping tests /!\\ " ) ;
2627 eprintln ! ( "If you intend to contribute to the library, restore the test suite." ) ;
2728 eprintln ! ( "===================================================================" ) ;
28- return Ok ( ( ) ) ;
29+ return Ok ( ExitCode :: SUCCESS ) ;
2930 }
3031
3132 let mut arguments = Arguments :: from_args ( ) ;
32- if arguments. num_threads . is_none ( ) {
33- arguments. num_threads = Some ( 1 ) ;
33+ if arguments. test_threads . is_none ( ) {
34+ arguments. test_threads = Some ( 1 ) ;
3435 }
3536 let tests: Vec < Vec < _ > > = std:: fs:: read_dir ( "tests/yaml-test-suite/src" ) ?
3637 . map ( |entry| -> Result < _ > {
@@ -40,17 +41,17 @@ fn main() -> Result<()> {
4041 } )
4142 . collect :: < Result < _ > > ( ) ?;
4243 let mut tests: Vec < _ > = tests. into_iter ( ) . flatten ( ) . collect ( ) ;
43- tests. sort_by_key ( |t| t . name . clone ( ) ) ;
44+ tests. sort_by ( |a , b| a . name ( ) . cmp ( b . name ( ) ) ) ;
4445
45- run_tests ( & arguments, tests, run_yaml_test ) . exit ( ) ;
46+ Ok ( run ( & arguments, tests) . exit_code ( ) )
4647}
4748
48- fn run_yaml_test ( test : & Test < YamlTest > ) -> Outcome {
49- let desc = & test . data ;
50- let reporter = parse_to_events ( & desc . yaml ) ;
49+ # [ allow ( clippy :: needless_pass_by_value ) ]
50+ fn run_yaml_test ( data : YamlTest ) -> Result < ( ) , Failed > {
51+ let reporter = parse_to_events ( & data . yaml ) ;
5152 let actual_events = reporter. as_ref ( ) . map ( |reporter| & reporter. events ) ;
52- let events_diff = actual_events. map ( |events| events_differ ( events, & desc . expected_events ) ) ;
53- let error_text = match ( & events_diff, desc . expected_error ) {
53+ let events_diff = actual_events. map ( |events| events_differ ( events, & data . expected_events ) ) ;
54+ let error_text = match ( & events_diff, data . expected_error ) {
5455 ( Ok ( x) , true ) => Some ( format ! ( "no error when expected: {x:#?}" ) ) ,
5556 ( Err ( _) , true ) | ( Ok ( None ) , false ) => None ,
5657 ( Err ( e) , false ) => Some ( format ! ( "unexpected error {e:?}" ) ) ,
@@ -60,19 +61,19 @@ fn run_yaml_test(test: &Test<YamlTest>) -> Outcome {
6061 if let Some ( mut txt) = error_text {
6162 add_error_context (
6263 & mut txt,
63- desc ,
64+ & data ,
6465 events_diff. err ( ) . map ( saphyr:: ScanError :: marker) ,
6566 ) ;
66- Outcome :: Failed { msg : Some ( txt) }
67+ Err ( txt. into ( ) )
6768 } else if let Some ( ( mut msg, span) ) = reporter
6869 . as_ref ( )
6970 . ok ( )
7071 . and_then ( |reporter| reporter. span_failures . first ( ) . cloned ( ) )
7172 {
72- add_error_context ( & mut msg, desc , Some ( & span. start ) ) ;
73- Outcome :: Failed { msg : Some ( msg) }
73+ add_error_context ( & mut msg, & data , Some ( & span. start ) ) ;
74+ Err ( msg. into ( ) )
7475 } else {
75- Outcome :: Passed
76+ Ok ( ( ) )
7677 }
7778}
7879
@@ -100,7 +101,7 @@ fn add_error_context(text: &mut String, desc: &YamlTest, marker: Option<&Marker>
100101 }
101102}
102103
103- fn load_tests_from_file ( entry : & DirEntry ) -> Result < Vec < Test < YamlTest > > > {
104+ fn load_tests_from_file ( entry : & DirEntry ) -> Result < Vec < Trial > > {
104105 let file_name = entry. file_name ( ) . to_string_lossy ( ) . to_string ( ) ;
105106 let test_name = file_name
106107 . strip_suffix ( ".yaml" )
@@ -131,21 +132,17 @@ fn load_tests_from_file(entry: &DirEntry) -> Result<Vec<Test<YamlTest>>> {
131132 continue ;
132133 }
133134
134- result. push ( Test {
135- name,
136- kind : String :: new ( ) ,
137- is_ignored : false ,
138- is_bench : false ,
139- data : YamlTest {
135+ result. push ( Trial :: test ( name, move || {
136+ run_yaml_test ( YamlTest {
140137 yaml_visual : current_test[ "yaml" ] . as_str ( ) . unwrap ( ) . to_string ( ) ,
141138 yaml : visual_to_raw ( current_test[ "yaml" ] . as_str ( ) . unwrap ( ) ) ,
142139 expected_events : visual_to_raw ( current_test[ "tree" ] . as_str ( ) . unwrap ( ) ) ,
143140 expected_error : current_test
144141 . as_mapping_get ( "fail" )
145142 . map ( |x| x. as_bool ( ) . unwrap_or ( false ) )
146143 == Some ( true ) ,
147- } ,
148- } ) ;
144+ } )
145+ } ) ) ;
149146 }
150147 Ok ( result)
151148}
@@ -224,12 +221,12 @@ impl<'input> SpannedEventReceiver<'input> for EventReporter<'input> {
224221 Event :: DocumentEnd => "-DOC" . into ( ) ,
225222
226223 Event :: SequenceStart ( idx, tag) => {
227- format ! ( "+SEQ{}{}" , format_index( idx) , format_tag( & tag) )
224+ format ! ( "+SEQ{}{}" , format_index( idx) , format_tag( tag. as_ref ( ) ) )
228225 }
229226 Event :: SequenceEnd => "-SEQ" . into ( ) ,
230227
231228 Event :: MappingStart ( idx, tag) => {
232- format ! ( "+MAP{}{}" , format_index( idx) , format_tag( & tag) )
229+ format ! ( "+MAP{}{}" , format_index( idx) , format_tag( tag. as_ref ( ) ) )
233230 }
234231 Event :: MappingEnd => "-MAP" . into ( ) ,
235232
@@ -244,7 +241,7 @@ impl<'input> SpannedEventReceiver<'input> for EventReporter<'input> {
244241 format ! (
245242 "=VAL{}{} {kind}{}" ,
246243 format_index( idx) ,
247- format_tag( tag) ,
244+ format_tag( tag. as_ref ( ) ) ,
248245 escape_text( text)
249246 )
250247 }
@@ -277,8 +274,8 @@ fn escape_text(text: &str) -> String {
277274 text
278275}
279276
280- fn format_tag ( tag : & Option < Cow < ' _ , Tag > > ) -> String {
281- if let Some ( tag) = tag. as_ref ( ) . map ( Cow :: as_ref ) {
277+ fn format_tag ( tag : Option < & Cow < ' _ , Tag > > ) -> String {
278+ if let Some ( tag) = tag {
282279 format ! ( " <{}{}>" , tag. handle, tag. suffix)
283280 } else {
284281 String :: new ( )
0 commit comments