55//!
66//! * TESTBRIDGE_TEST_ONLY: string passed from --test_filter
77//!
8- //! We interpret it as a colon-separated list of glob patterns, with
9- //! implicit `*` around each pattern to act as a "contains" match. If
8+ //! We interpret it as a colon-separated list of glob patterns. If
109//! any pattern in the list succeeds, the filter passes.
1110use crate :: internal:: glob:: { is_glob_pattern, Pattern } ;
1211use std:: sync:: OnceLock ;
@@ -37,10 +36,10 @@ impl TestFilter for AcceptAll {
3736 }
3837}
3938
40- struct Contains ( String ) ;
41- impl TestFilter for Contains {
39+ struct Equals ( String ) ;
40+ impl TestFilter for Equals {
4241 fn filter ( & self , test_name : & str ) -> bool {
43- test_name. contains ( & self . 0 )
42+ test_name == self . 0
4443 }
4544}
4645
@@ -52,13 +51,13 @@ impl TestFilter for Matches {
5251}
5352
5453struct Collection {
55- contains : Box < [ Contains ] > ,
54+ equals : Box < [ Equals ] > ,
5655 matches : Box < [ Matches ] > ,
5756}
5857
5958impl TestFilter for Collection {
6059 fn filter ( & self , test_name : & str ) -> bool {
61- self . contains . iter ( ) . any ( |f| f. filter ( test_name) )
60+ self . equals . iter ( ) . any ( |f| f. filter ( test_name) )
6261 || self . matches . iter ( ) . any ( |f| f. filter ( test_name) )
6362 }
6463}
@@ -67,11 +66,8 @@ fn get_test_filter(testbridge_test_only: &str) -> Collection {
6766 let ( with_globs, literals) : ( Vec < _ > , Vec < _ > ) =
6867 testbridge_test_only. split ( ':' ) . partition ( |s| is_glob_pattern ( s) ) ;
6968 Collection {
70- contains : literals. into_iter ( ) . map ( |s| Contains ( s. to_string ( ) ) ) . collect ( ) ,
71- matches : with_globs
72- . into_iter ( )
73- . map ( |s| Matches ( Pattern :: new ( format ! ( "*{}*" , s) ) ) )
74- . collect ( ) ,
69+ equals : literals. into_iter ( ) . map ( |s| Equals ( s. to_string ( ) ) ) . collect ( ) ,
70+ matches : with_globs. into_iter ( ) . map ( |s| Matches ( Pattern :: new ( s. to_string ( ) ) ) ) . collect ( ) ,
7571 }
7672}
7773
@@ -90,17 +86,17 @@ mod tests {
9086 }
9187
9288 #[ test]
93- fn empty_filter_accepts_all ( ) -> Result < ( ) > {
89+ fn empty_filter_accepts_only_empty ( ) -> Result < ( ) > {
9490 let filter = get_test_filter ( "" ) ;
9591
9692 verify_that ! ( filter. filter( "" ) , is_true( ) ) ?;
97- verify_that ! ( filter. filter( "abcdefg" ) , is_true ( ) ) ?;
93+ verify_that ! ( filter. filter( "abcdefg" ) , is_false ( ) ) ?;
9894 Ok ( ( ) )
9995 }
10096
10197 #[ test]
10298 fn simple_literal_filter ( ) -> Result < ( ) > {
103- let filter = get_test_filter ( "magic" ) ;
99+ let filter = get_test_filter ( "* magic* " ) ;
104100
105101 verify_that ! ( filter. filter( "this_is_magic" ) , is_true( ) ) ?;
106102 verify_that ! ( filter. filter( "" ) , is_false( ) ) ?;
@@ -119,7 +115,6 @@ mod tests {
119115 verify_that ! ( filter. filter( "a b" ) , is_true( ) ) ?;
120116 verify_that ! ( filter. filter( "b" ) , is_false( ) ) ?;
121117 verify_that ! ( filter. filter( "b a" ) , is_false( ) ) ?;
122- verify_that ! ( filter. filter( "The letter a comes before b and then c" ) , is_true( ) ) ?;
123118 Ok ( ( ) )
124119 }
125120
@@ -143,11 +138,22 @@ mod tests {
143138
144139 verify_that ! ( filter. filter( "" ) , is_false( ) ) ?;
145140 verify_that ! ( filter. filter( "a" ) , is_true( ) ) ?;
146- verify_that ! ( filter. filter( "ab" ) , is_true ( ) ) ?;
147- verify_that ! ( filter. filter( "a b" ) , is_true ( ) ) ?;
141+ verify_that ! ( filter. filter( "ab" ) , is_false ( ) ) ?;
142+ verify_that ! ( filter. filter( "a b" ) , is_false ( ) ) ?;
148143 verify_that ! ( filter. filter( "b" ) , is_true( ) ) ?;
149- verify_that ! ( filter. filter( "b a" ) , is_true ( ) ) ?;
144+ verify_that ! ( filter. filter( "b a" ) , is_false ( ) ) ?;
150145 verify_that ! ( filter. filter( "c" ) , is_false( ) ) ?;
151146 Ok ( ( ) )
152147 }
148+
149+ #[ test]
150+ fn collection_with_globs ( ) -> Result < ( ) > {
151+ let filter = get_test_filter ( "*test1*:*test2*" ) ;
152+
153+ verify_that ! ( filter. filter( "" ) , is_false( ) ) ?;
154+ verify_that ! ( filter. filter( "this is test1" ) , is_true( ) ) ?;
155+ verify_that ! ( filter. filter( "and test2 is it" ) , is_true( ) ) ?;
156+ verify_that ! ( filter. filter( "but test3 is not" ) , is_false( ) ) ?;
157+ Ok ( ( ) )
158+ }
153159}
0 commit comments