1mod header;
2mod utility_parsers;
3mod suite;
4
5#[macro_use]
6extern crate nom;
7
8use std::str;
9
10use header::cargo_header;
11pub use suite::{Suite, Test};
12use suite::suites_parser;
13
14named!(
15 compile_error<Vec<Suite > >,
16 do_parse!(
17 vector: many_till!(
18 do_parse!(
19 ws!(tag!("error")) >>
20 opt_res!(
21 do_parse!(
22 char!('[') >>
23 take_until_and_consume!("]") >>
24 ()
25 )
26 ) >>
27 ws!(char!(':')) >>
28 error: map_res!(
29 take_until!("\nerror"),
30 str::from_utf8
31 ) >>
32 (Suite {
33 name: "unknown".to_string(),
34 state: "fail".to_string(),
35 total: 1,
36 passed: 0,
37 failed: 1,
38 ignored: 0,
39 measured: 0,
40 tests: vec![
41 Test {
42 name: "compile failed".to_string(),
43 status: "fail".to_string(),
44 error: Some(error.into())
45 }
46 ]
47 })
48 ),
49 tag!("\nerror: aborting due to previous error")
50 ) >>
51 take_till!(|c| c == 0x0) >>
52 (vector.0)
53 )
54);
55
56named!(
57 pub cargo_test_result_parser<Vec<Suite > >,
58 do_parse!(
59 cargo_header >>
60 suites: alt!(suites_parser | compile_error) >>
61 (suites)
62 )
63);