1 macro_rules
! searcher
{
2 ($name
:ident
, $re
:expr
, $haystack
:expr
) => (
3 searcher
!($name
, $re
, $haystack
, vec vec
![]);
5 ($name
:ident
, $re
:expr
, $haystack
:expr
, $
($steps
:expr
,)*) => (
6 searcher
!($name
, $re
, $haystack
, vec vec
![$
($steps
),*]);
8 ($name
:ident
, $re
:expr
, $haystack
:expr
, $
($steps
:expr
),*) => (
9 searcher
!($name
, $re
, $haystack
, vec vec
![$
($steps
),*]);
11 ($name
:ident
, $re
:expr
, $haystack
:expr
, vec $expect_steps
:expr
) => (
13 #[allow(unused_imports)]
16 use std
::str::pattern
::{Pattern, Searcher}
;
17 use std
::str::pattern
::SearchStep
::{Match, Reject, Done}
;
19 let mut se
= re
.into_searcher($haystack
);
20 let mut got_steps
= vec
![];
24 step
=> { got_steps.push(step); }
27 assert_eq
!(got_steps
, $expect_steps
);
33 searcher
!(searcher_empty_regex_empty_haystack
, r
"", "", Match(0, 0));
44 searcher
!(searcher_empty_haystack
, r
"\d", "");
45 searcher
!(searcher_one_match
, r
"\d", "5", Match(0, 1));
46 searcher
!(searcher_no_match
, r
"\d", "a", Reject(0, 1));
48 searcher_two_adjacent_matches
,
55 searcher_two_non_adjacent_matches
,
62 searcher
!(searcher_reject_first
, r
"\d", "a6", Reject(0, 1), Match(1, 2));
64 searcher_one_zero_length_matches
,
74 searcher_many_zero_length_matches
,
84 Reject(4, 5), // a1bbb
85 Match(5, 6), // a1bbba