@@ -113,8 +113,16 @@ mod dump_input_values {
113
113
114
114
TestResults :: new ( )
115
115
. fail ( "single_fail" )
116
- . fail ( "should_fail::case_1" )
117
- . fail ( "should_fail::case_2" )
116
+ . fail ( "cases_fail::case_1" )
117
+ . fail ( "cases_fail::case_2" )
118
+ . fail ( "matrix_fail::case_1_1_1" )
119
+ . fail ( "matrix_fail::case_1_1_2" )
120
+ . fail ( "matrix_fail::case_1_2_1" )
121
+ . fail ( "matrix_fail::case_1_2_2" )
122
+ . fail ( "matrix_fail::case_2_1_1" )
123
+ . fail ( "matrix_fail::case_2_1_2" )
124
+ . fail ( "matrix_fail::case_1_2_1" )
125
+ . fail ( "matrix_fail::case_2_2_2" )
118
126
. assert ( output) ;
119
127
120
128
assert_in ! ( out, "fu32 = 42" ) ;
@@ -128,6 +136,14 @@ mod dump_input_values {
128
136
assert_in ! ( out, "u = 24" ) ;
129
137
assert_in ! ( out, r#"s = "trs""# ) ;
130
138
assert_in ! ( out, r#"t = ("tt", -24)"# ) ;
139
+
140
+ assert_in ! ( out, "u = 1" ) ;
141
+ assert_in ! ( out, r#"s = "rst""# ) ;
142
+ assert_in ! ( out, r#"t = ("SS", -12)"# ) ;
143
+
144
+ assert_in ! ( out, "u = 2" ) ;
145
+ assert_in ! ( out, r#"s = "srt""# ) ;
146
+ assert_in ! ( out, r#"t = ("TT", -24)"# ) ;
131
147
}
132
148
133
149
#[ test]
@@ -147,21 +163,29 @@ mod dump_input_values {
147
163
15 | fn cases(s: S) {{}}
148
164
| ^ `S` cannot be formatted using `{{:?}}`" , name)
149
165
. unindent( ) ) ;
166
+
167
+ assert_in ! ( output. stderr. str ( ) . to_string( ) , format!( "
168
+ --> {}/src/lib.rs:21:11
169
+ |
170
+ 21 | fn matrix(s: S) {{}}
171
+ | ^ `S` cannot be formatted using `{{:?}}`" , name) . unindent( ) ) ;
150
172
}
151
173
152
174
#[ test]
153
175
fn can_exclude_some_inputs ( ) {
154
- let ( output, _) = run_test ( "dump_exclude_some_fixtures .rs" ) ;
176
+ let ( output, _) = run_test ( "dump_exclude_some_inputs .rs" ) ;
155
177
let out = output. stdout . str ( ) . to_string ( ) ;
156
178
157
179
TestResults :: new ( )
158
- . fail ( "single_fail" )
159
- . fail ( "should_fail::case_1" )
180
+ . fail ( "simple" )
181
+ . fail ( "cases::case_1" )
182
+ . fail ( "matrix::case_1_1_1" )
160
183
. assert ( output) ;
161
184
162
185
assert_in ! ( out, "fu32 = 42" ) ;
163
186
assert_in ! ( out, "d = D" ) ;
164
187
assert_in ! ( out, "fd = D" ) ;
188
+ assert_in ! ( out, "dd = D" ) ;
165
189
}
166
190
167
191
#[ test]
@@ -442,6 +466,59 @@ mod cases {
442
466
}
443
467
}
444
468
469
+ mod matrix {
470
+ use super :: * ;
471
+
472
+ fn res ( name : impl AsRef < Path > ) -> impl AsRef < Path > {
473
+ Path :: new ( "matrix" ) . join ( name. as_ref ( ) )
474
+ }
475
+
476
+ #[ test]
477
+ fn should_compile ( ) {
478
+ let output = prj ( res ( "simple.rs" ) )
479
+ . compile ( )
480
+ . unwrap ( ) ;
481
+
482
+ assert_eq ! ( Some ( 0 ) , output. status. code( ) , "Compile error due: {}" , output. stderr. str ( ) )
483
+ }
484
+
485
+ #[ test]
486
+ fn happy_path ( ) {
487
+ let ( output, _) = run_test ( res ( "simple.rs" ) ) ;
488
+
489
+ TestResults :: new ( )
490
+ . ok ( "strlen_test::case_1_1" )
491
+ . ok ( "strlen_test::case_1_2" )
492
+ . ok ( "strlen_test::case_2_1" )
493
+ . ok ( "strlen_test::case_2_2" )
494
+ . assert ( output) ;
495
+ }
496
+
497
+ #[ test]
498
+ fn should_apply_partial_fixture ( ) {
499
+ let ( output, _) = run_test ( res ( "partial.rs" ) ) ;
500
+
501
+ TestResults :: new ( )
502
+ . ok ( "default::case_1_1" )
503
+ . ok ( "default::case_1_2" )
504
+ . ok ( "default::case_2_1" )
505
+ . ok ( "partial_2::case_2_2" )
506
+ . ok ( "complete::case_2_2" )
507
+ . fail ( "default::case_2_2" )
508
+ . fail ( "partial_1::case_1_1" )
509
+ . fail ( "partial_1::case_1_2" )
510
+ . fail ( "partial_1::case_2_1" )
511
+ . fail ( "partial_1::case_2_2" )
512
+ . fail ( "partial_2::case_1_1" )
513
+ . fail ( "partial_2::case_1_2" )
514
+ . fail ( "partial_2::case_2_1" )
515
+ . fail ( "complete::case_1_1" )
516
+ . fail ( "complete::case_1_2" )
517
+ . fail ( "complete::case_2_1" )
518
+ . assert ( output) ;
519
+ }
520
+ }
521
+
445
522
mod should_show_correct_errors {
446
523
use std:: process:: Output ;
447
524
@@ -518,14 +595,25 @@ mod should_show_correct_errors {
518
595
}
519
596
520
597
#[ test]
521
- fn if_wrong_type_param ( ) {
598
+ fn if_wrong_type_case_param ( ) {
599
+ let ( output, name) = execute ( ) ;
600
+
601
+ assert_in ! ( output. stderr. str ( ) , format!( "
602
+ error[E0308]: mismatched types
603
+ --> {}/src/lib.rs:17:26
604
+ |
605
+ 17 | fn error_case_wrong_type(f: &str) {{}}" , name) . unindent( ) ) ;
606
+ }
607
+
608
+ #[ test]
609
+ fn if_wrong_type_matrix_param ( ) {
522
610
let ( output, name) = execute ( ) ;
523
611
524
612
assert_in ! ( output. stderr. str ( ) , format!( "
525
613
error[E0308]: mismatched types
526
- --> {}/src/lib.rs:17:27
614
+ --> {}/src/lib.rs:53:28
527
615
|
528
- 17 | fn error_param_wrong_type (f: &str) {{}}" , name) . unindent( ) ) ;
616
+ 53 | fn error_matrix_wrong_type (f: &str) {{}}" , name) . unindent( ) ) ;
529
617
}
530
618
531
619
#[ test]
@@ -540,6 +628,16 @@ mod should_show_correct_errors {
540
628
| ^
541
629
| |" ,
542
630
name) . unindent( ) ) ;
631
+
632
+ assert_in ! ( output. stderr. str ( ) , format!( "
633
+ error[E0308]: mismatched types
634
+ --> {}/src/lib.rs:55:45
635
+ |
636
+ 55 | #[rstest(condition => [vec![1,2,3].contains(2)] )]
637
+ | ^
638
+ | |" ,
639
+ name) . unindent( ) ) ;
640
+
543
641
}
544
642
545
643
#[ test]
@@ -580,34 +678,65 @@ mod should_show_correct_errors {
580
678
| ^" ,
581
679
name) . unindent( ) ) ;
582
680
}
583
- }
584
681
585
- mod matrix {
586
- use super :: * ;
682
+ #[ test]
683
+ fn if_list_argument_dont_match_function_signature ( ) {
684
+ let ( output, name) = execute ( ) ;
685
+
686
+ assert_in ! ( output. stderr. str ( ) , format!( "
687
+ error: Missed argument: 'not_exist_1' should be a test function argument.
688
+ --> {}/src/lib.rs:63:10
689
+ |
690
+ 63 | #[rstest(not_exist_1 => [42],
691
+ | ^^^^^^^^^^^" ,
692
+ name) . unindent( ) ) ;
693
+
694
+ assert_in ! ( output. stderr. str ( ) , format!( "
695
+ error: Missed argument: 'not_exist_2' should be a test function argument.
696
+ --> {}/src/lib.rs:64:10
697
+ |
698
+ 64 | not_exist_2 => [42])]
699
+ | ^^^^^^^^^^^" ,
700
+ name) . unindent( ) ) ;
587
701
588
- fn res ( name : impl AsRef < Path > ) -> impl AsRef < Path > {
589
- Path :: new ( "matrix" ) . join ( name. as_ref ( ) )
590
702
}
591
703
592
704
#[ test]
593
- fn should_compile ( ) {
594
- let output = prj ( res ( "simple.rs" ) )
595
- . compile ( )
596
- . unwrap ( ) ;
705
+ fn if_inject_a_fixture_that_is_already_a_value_list ( ) {
706
+ let ( output, name) = execute ( ) ;
597
707
598
- assert_eq ! ( Some ( 0 ) , output. status. code( ) , "Compile error due: {}" , output. stderr. str ( ) )
708
+ assert_in ! ( output. stderr. str ( ) , format!( "
709
+ error: Duplicate argument: 'f' is already defined.
710
+ --> {}/src/lib.rs:67:25
711
+ |
712
+ 67 | #[rstest(f => [41, 42], f(42))]
713
+ | ^" ,
714
+ name) . unindent( ) ) ;
599
715
}
600
716
601
717
#[ test]
602
- fn happy_path ( ) {
603
- let ( output, _ ) = run_test ( res ( "simple.rs" ) ) ;
718
+ fn if_define_value_list_that_is_already_an_injected_fixture ( ) {
719
+ let ( output, name ) = execute ( ) ;
604
720
605
- TestResults :: new ( )
606
- . ok ( "strlen_test::case_1_1" )
607
- . ok ( "strlen_test::case_1_2" )
608
- . ok ( "strlen_test::case_2_1" )
609
- . ok ( "strlen_test::case_2_2" )
610
- . assert ( output) ;
721
+ assert_in ! ( output. stderr. str ( ) , format!( "
722
+ error: Duplicate argument: 'f' is already defined.
723
+ --> {}/src/lib.rs:71:17
724
+ |
725
+ 71 | #[rstest(f(42), f => [41, 42])]
726
+ | ^" ,
727
+ name) . unindent( ) ) ;
611
728
}
612
729
730
+ #[ test]
731
+ fn if_a_value_contains_empty_list ( ) {
732
+ let ( output, name) = execute ( ) ;
733
+
734
+ assert_in ! ( output. stderr. str ( ) , format!( "
735
+ error: Values list should not be empty
736
+ --> {}/src/lib.rs:60:19
737
+ |
738
+ 60 | #[rstest(empty => [])]
739
+ | ^^" ,
740
+ name) . unindent( ) ) ;
741
+ }
613
742
}
0 commit comments