Expand description
Checks if any number of files match some specification. Designed for testing file generation.
Let’s say we have this specification:
ⓘ
# file: output/index.html
..
<body>
..
# file: output/style.css
..
body {
..
}
..
Specker can check if there is a file named output/index.html
containing
<body>
in some line, as well as file output/style.css
containing body {
and }
lines. Symbol ..
matches any number of
lines.
If there is a match error, specker can print a nice message like:
ⓘ
1 | <bddy>
| ^^^^^^
| Expected "<body>", found "<bddy>"
It also has iterators to run many such specification tests in bulk.
Example code that iterates the “spec” dir, collects all “txt” specifications and checks them:
ⓘ
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);
}
}
}
}
Structs§
- At
- Item
- Specification item, that describes how a file should be matched against.
- Item
Iter - Specification item iterator.
- Item
Values ByKey Iter - Iterator over the specification items that contain a specific key.
- Options
- Specification parser options.
- Param
- Specification item parameter.
- Spec
- Parsed specification.
- Spec
Path - Parsed specification at a path.
- Spec
Walk Iter - Iterator over parsed specification files.
Enums§
- Error
- Specification iteration or parsing error.
- LexError
- Spec lexer error.
- Match
- Specification token.
- Parse
Error - Spec parser error.
- Template
Match Error - Error returned for failed template match.
- Template
Write Error - Error returned for failed template write.
Functions§
- display_
error - Display nice error that combines line and column info with file contents.
- display_
error_ for_ file - Display nice error that combines line and column info with file contents but error itself does not have file path info.
- display_
error_ for_ read - Display nice error that combines line and column info with file source contents.
- walk_
spec_ dir - Walks spec directory and returns the iterator over all parsed
SpecPath
objects.
Type Aliases§
- Result
- Specification iteration or parsing result.