mockers 0.2.0

Mocking library
Documentation
/*fn check_arg(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box<MacResult + 'static> {
    fn find_seq_it_ident(tts: &[TokenTree]) -> Option<Ident> {
        for tt in tts {
            let res = find_it_ident(tt);
            if res.is_some() {
                return res;
            }
        }
        None
    }
    fn find_it_ident(tt: &TokenTree) -> Option<Ident> {
        match tt {
            &TokenTree::Token(_, Token::Ident(ident, _)) if ident.name.as_str() == "it" => Some(ident),
            &TokenTree::Token(..) => None,
            &TokenTree::Delimited(_, ref delimited) => find_seq_it_ident(&delimited.tts[..]),
            &TokenTree::Sequence(_, ref seq) => find_seq_it_ident(&seq.tts[..]),
        }
    }

    for tt in args {
        if let Some(it) = find_it_ident(tt) {
            let mut parser = cx.new_parser_from_tts(args);
            let expr = match parser.parse_expr() {
                Ok(expr) => expr,
                Err(mut err) => {
                    err.emit();
                    return DummyResult::any(sp)
                }
            };

            let pattern_str = syntax::print::pprust::tts_to_string(args);
            let res = quote_expr!(cx, {
                let pattern_str = $pattern_str;
                let descr = "".to_owned(); //format!("check!({})", pattern_str);
                ::mockers::FnMatchArg::new(descr, move |$it| {
                    if $expr {
                        Ok(())
                    } else {
                        Err(format!("{:?} didn't pass check: {}", $it, pattern_str))
                    }
                })
            }).unwrap();
            return MacEager::expr(P(res))
        }
    }

    cx.span_err(sp, "Expression doesn't contain references to `it`");
    DummyResult::any(sp)
}*/