10 个版本
使用旧的 Rust 2015
0.3.5 | 2018年4月8日 |
---|---|
0.3.4 | 2018年3月27日 |
0.3.1 | 2017年2月16日 |
0.2.0 | 2017年2月16日 |
0.1.2 | 2017年2月12日 |
#262 in 测试
76KB
2K SLoC
Specker
检查任意数量的文件是否与某些规范匹配。适用于测试文件生成。
假设我们有以下规范
## file: output/index.html
..
<body>
..
## file: output/style.css
..
body {
..
}
..
Specker 可以检查是否存在名为 output/index.html
的文件,其中包含 <body>
的某些行,以及文件 output/style.css
包含 body {
和 }
行。符号 ..
匹配任意数量的行。
如果存在匹配错误,Specker 可以打印出如下的友好信息
1 | <bddy>
| ^^^^^^
| Expected "<body>", found "<bddy>"
它还提供了迭代器,可以批量运行许多此类规范测试。
以下是一个示例代码,它会迭代 "spec" 目录,收集所有 "txt" 规范并检查它们
extern crate specker;
use std::fs;
use std::env;
use std::path::PathBuf;
use std::collections::HashMap;
#[test]
fn check_specifications() {
let src_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
for maybe_spec in specker::walk_spec_dir(&spec_dir, "txt", specker::Options {
skip_lines: "..",
marker: "##",
var_start: "${",
var_end: "}",
}) {
let spec_path = maybe_spec.unwrap_or_else(|e| {
// print nicely formatted error
panic!("\n{}", specker::display_error(&e));
});
// go over spec items and check if file contents match
for (item, input_file_name) in spec_path.spec.iter()
.filter_map(
|item| item.get_param("file")
.map(|param_value| (item, param_value))
)
{
let path = spec_dir.join(input_file_name);
let mut file = fs::File::open(&path)
.expect(&format!("failed to open file {:?}", &path));
if let Err(e) = item.match_contents(&mut file, &HashMap::new()) {
// print nicely formatted error
println!("{}", specker::display_error_for_file(&path, &e));
// print one-liner error
panic!("{}", e);
}
}
}
}
许可证
许可协议为以下之一
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选择。
贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义,您提交给作品中的任何有意贡献,均应按照上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~0.1–7MB
~40K SLoC