yaml-test-suite: print the YAML text on failure

This commit is contained in:
Denis Lisov 2022-01-19 03:03:53 +03:00 committed by Ethiraric
parent c7e371a24c
commit fb8ef31546

View file

@ -14,6 +14,7 @@ use yaml_rust::{
type Result<T, E=Box<dyn std::error::Error>> = std::result::Result<T, E>; type Result<T, E=Box<dyn std::error::Error>> = std::result::Result<T, E>;
struct YamlTest { struct YamlTest {
yaml_visual: String,
yaml: String, yaml: String,
expected_events: String, expected_events: String,
expected_error: bool, expected_error: bool,
@ -53,13 +54,17 @@ fn run_yaml_test(test: &Test<YamlTest>) -> Outcome {
let desc = &test.data; let desc = &test.data;
let actual_events = parse_to_events(&desc.yaml); let actual_events = parse_to_events(&desc.yaml);
let events_diff = actual_events.map(|events| events_differ(events, &desc.expected_events)); let events_diff = actual_events.map(|events| events_differ(events, &desc.expected_events));
let error_text = match (events_diff, desc.expected_error) { let mut error_text = match (events_diff, desc.expected_error) {
(Ok(_), true) => Some("no error when expected".into()), (Ok(_), true) => Some("no error when expected".into()),
(Err(_), true) => None, (Err(_), true) => None,
(Err(e), false) => Some(format!("unexpected error {:?}", e)), (Err(e), false) => Some(format!("unexpected error {:?}", e)),
(Ok(Some(diff)), false) => Some(format!("events differ: {}", diff)), (Ok(Some(diff)), false) => Some(format!("events differ: {}", diff)),
(Ok(None), false) => None, (Ok(None), false) => None,
}; };
if let Some(text) = &mut error_text {
use std::fmt::Write;
let _ = write!(text, "\n### Input:\n{}\n### End", desc.yaml_visual);
}
match (error_text, desc.is_xfail) { match (error_text, desc.is_xfail) {
(None, false) => Outcome::Passed, (None, false) => Outcome::Passed,
(Some(text), false) => Outcome::Failed { msg: Some(text) }, (Some(text), false) => Outcome::Failed { msg: Some(text) },
@ -103,6 +108,7 @@ fn load_tests_from_file(entry: &DirEntry) -> Result<Vec<Test<YamlTest>>> {
is_ignored: false, is_ignored: false,
is_bench: false, is_bench: false,
data: YamlTest { data: YamlTest {
yaml_visual: current_test["yaml"].as_str().unwrap().to_string(),
yaml: visual_to_raw(current_test["yaml"].as_str().unwrap()), yaml: visual_to_raw(current_test["yaml"].as_str().unwrap()),
expected_events: visual_to_raw(current_test["tree"].as_str().unwrap()), expected_events: visual_to_raw(current_test["tree"].as_str().unwrap()),
expected_error: current_test["fail"].as_bool() == Some(true), expected_error: current_test["fail"].as_bool() == Some(true),