@@ -542,6 +542,7 @@ struct ConsoleTestState<T> {
542542 passed : usize ,
543543 failed : usize ,
544544 ignored : usize ,
545+ filtered_out : usize ,
545546 measured : usize ,
546547 metrics : MetricMap ,
547548 failures : Vec < ( TestDesc , Vec < u8 > ) > ,
@@ -570,6 +571,7 @@ impl<T: Write> ConsoleTestState<T> {
570571 passed : 0 ,
571572 failed : 0 ,
572573 ignored : 0 ,
574+ filtered_out : 0 ,
573575 measured : 0 ,
574576 metrics : MetricMap :: new ( ) ,
575577 failures : Vec :: new ( ) ,
@@ -775,11 +777,12 @@ impl<T: Write> ConsoleTestState<T> {
775777 } else {
776778 self . write_pretty ( "FAILED" , term:: color:: RED ) ?;
777779 }
778- let s = format ! ( ". {} passed; {} failed; {} ignored; {} measured\n \n " ,
780+ let s = format ! ( ". {} passed; {} failed; {} ignored; {} measured; {} filtered out \n \n " ,
779781 self . passed,
780782 self . failed,
781783 self . ignored,
782- self . measured) ;
784+ self . measured,
785+ self . filtered_out) ;
783786 self . write_plain ( & s) ?;
784787 return Ok ( success) ;
785788 }
@@ -875,6 +878,7 @@ pub fn run_tests_console(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> io::Resu
875878 fn callback < T : Write > ( event : & TestEvent , st : & mut ConsoleTestState < T > ) -> io:: Result < ( ) > {
876879 match ( * event) . clone ( ) {
877880 TeFiltered ( ref filtered_tests) => st. write_run_start ( filtered_tests. len ( ) ) ,
881+ TeFilteredOut ( filtered_out) => Ok ( st. filtered_out = filtered_out) ,
878882 TeWait ( ref test, padding) => st. write_test_start ( test, padding) ,
879883 TeTimeout ( ref test) => st. write_timeout ( test) ,
880884 TeResult ( test, result, stdout) => {
@@ -957,6 +961,7 @@ fn should_sort_failures_before_printing_them() {
957961 passed : 0 ,
958962 failed : 0 ,
959963 ignored : 0 ,
964+ filtered_out : 0 ,
960965 measured : 0 ,
961966 max_name_len : 10 ,
962967 metrics : MetricMap :: new ( ) ,
@@ -1017,6 +1022,7 @@ pub enum TestEvent {
10171022 TeWait ( TestDesc , NamePadding ) ,
10181023 TeResult ( TestDesc , TestResult , Vec < u8 > ) ,
10191024 TeTimeout ( TestDesc ) ,
1025+ TeFilteredOut ( usize ) ,
10201026}
10211027
10221028pub type MonitorMsg = ( TestDesc , TestResult , Vec < u8 > ) ;
@@ -1028,11 +1034,16 @@ pub fn run_tests<F>(opts: &TestOpts, tests: Vec<TestDescAndFn>, mut callback: F)
10281034 use std:: collections:: HashMap ;
10291035 use std:: sync:: mpsc:: RecvTimeoutError ;
10301036
1037+ let tests_len = tests. len ( ) ;
1038+
10311039 let mut filtered_tests = filter_tests ( opts, tests) ;
10321040 if !opts. bench_benchmarks {
10331041 filtered_tests = convert_benchmarks_to_tests ( filtered_tests) ;
10341042 }
10351043
1044+ let filtered_out = tests_len - filtered_tests. len ( ) ;
1045+ callback ( TeFilteredOut ( filtered_out) ) ?;
1046+
10361047 let filtered_descs = filtered_tests. iter ( )
10371048 . map ( |t| t. desc . clone ( ) )
10381049 . collect ( ) ;
0 commit comments