cargo_results/
lib.rs

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);