24 个版本 (12 个稳定版)

使用旧的 Rust 2015

3.2.2 2018年4月10日
3.2.0 2018年3月29日
3.1.0 2017年7月29日
3.0.1-beta2017年3月25日
0.5.0 2015年7月26日

#257 in 测试


3 个 Crates 使用 2 个直接使用

MIT/Apache

87KB
2K SLoC

lcov-parser

LCOV 报告解析器。

Build Status Build Status crates.io version License

基本用法

创建一个 LCOVParser 对象,然后解析数据。

extern crate lcov_parser;

use lcov_parser:: { LCOVParser, LCOVRecord };

fn main() {
    let content = concat!(
        "TN:test_name\n",
        "SF:/path/to/source.rs\n",
        "DA:1,2\n",
        "DA:2,1\n",
        "DA:3,5\n",
        "end_of_record\n"
    );
    let mut parser = LCOVParser::new(content.as_bytes());

    loop {
        match parser.next().expect("parse the report") {
            None => { break; },
            Some(record) => match record {
                LCOVRecord::TestName(name) => println!("Test: {}", name.unwrap()),
                LCOVRecord::SourceFile(file_name) => println!("File: {}", file_name),
                LCOVRecord::Data(data) => println!("Line: {}, Executed: {}", data.line, data.count),
                LCOVRecord::EndOfRecord => println!("Finish"),
                _ => { continue; }
            }
        }
    }
}

解析文件

也可以用于解析报告文件。

let mut parser = LCOVParser::from_file("../../../fixture/report.lcov").unwrap();

loop {
    match parser.next().expect("parse the report") {
        None => { break; },
        Some(record) => match record {
            LCOVRecord::SourceFile(file_name) => println!("File: {}", file_name),
            LCOVRecord::EndOfRecord => println!("Finish"),
            _ => { continue; }
        }
    }
}

解析所有

您可以使用 parse 方法解析所有内容。

let records = {
    let mut parser = LCOVParser::from_file("../../../fixture/report.lcov").unwrap();
    parser.parse().expect("parse the report")
};

for record in records.iter() {
    match record {
        &LCOVRecord::SourceFile(ref file_name) => println!("File: {}", file_name),
        &LCOVRecord::EndOfRecord => println!("Finish"),
        _ => { continue; }
    }
}

合并报告

您可以使用 merge_files 合并报告。
您可以通过指定文件名来保存合并后的报告。

extern crate lcov_parser;

use lcov_parser:: { merge_files };

fn main() {
    let trace_files = [
        "../../../tests/fixtures/fixture1.info",
        "../../../tests/fixtures/fixture2.info"
    ];
    let _ = match merge_files(&trace_files) {
        Ok(report) => report.save_as("/tmp/merged_report.info"),
        Err(err) => panic!(err)
    };
}

许可协议

以下任一许可协议下许可:

依赖

~770KB
~17K SLoC