osrm-backend/tests/common/dot_writer.rs

92 lines
3.7 KiB
Rust
Raw Normal View History

2024-06-06 07:56:37 -04:00
use colored::Colorize;
use cucumber::{cli, event, parser, Event};
2024-06-05 08:58:41 -04:00
use std::io::{self, Write};
2024-06-06 07:56:37 -04:00
#[derive(Debug, Default)]
pub struct DotWriter {
scenarios_started: usize,
scenarios_failed: usize,
scenarios_finished: usize,
features_started: usize,
features_finished: usize,
step_started: usize,
step_failed: usize,
step_passed: usize,
step_skipped: usize,
// TODO: add timestamp to report timing
}
2024-06-05 08:58:41 -04:00
2024-06-05 08:59:19 -04:00
impl<W: 'static> cucumber::Writer<W> for DotWriter {
2024-06-05 08:58:41 -04:00
type Cli = cli::Empty; // we provide no CLI options
async fn handle_event(&mut self, ev: parser::Result<Event<event::Cucumber<W>>>, _: &Self::Cli) {
2024-06-06 07:56:37 -04:00
let green_dot = ".".green();
let cyan_dash = "-".cyan();
let red_cross = "X".red();
2024-06-05 08:58:41 -04:00
match ev {
Ok(Event { value, .. }) => match value {
event::Cucumber::Feature(_feature, ev) => match ev {
event::Feature::Started => {
2024-06-06 07:56:37 -04:00
self.features_started += 1;
print!("{green_dot}")
2024-06-05 08:58:41 -04:00
}
event::Feature::Scenario(_scenario, ev) => match ev.event {
event::Scenario::Started => {
2024-06-06 07:56:37 -04:00
self.scenarios_started += 1;
print!("{green_dot}")
2024-06-05 08:58:41 -04:00
}
event::Scenario::Step(_step, ev) => match ev {
event::Step::Started => {
2024-06-06 07:56:37 -04:00
self.step_started += 1;
print!("{green_dot}")
}
event::Step::Passed(..) => {
self.step_passed += 1;
print!("{green_dot}")
}
event::Step::Skipped => {
self.step_skipped += 1;
print!("{cyan_dash}")
2024-06-05 08:58:41 -04:00
}
event::Step::Failed(_, _, _, _err) => {
2024-06-06 07:56:37 -04:00
self.step_failed += 1;
print!("{red_cross}")
2024-06-05 08:58:41 -04:00
}
},
2024-06-06 07:56:37 -04:00
event::Scenario::Hook(_, _) => {}
event::Scenario::Background(_, _) => {}
event::Scenario::Log(_) => {}
event::Scenario::Finished => {
self.scenarios_finished += 1;
}
2024-06-05 08:58:41 -04:00
},
2024-06-06 07:56:37 -04:00
event::Feature::Rule(_, _) => {}
event::Feature::Finished => {
self.features_finished += 1;
}
2024-06-05 08:58:41 -04:00
},
2024-06-06 07:56:37 -04:00
event::Cucumber::Finished => {
println!();
let f = format!("{} failed", self.scenarios_failed).red();
let p = format!("{} passed", self.scenarios_finished).green();
println!("{} scenarios ({f}, {p})", self.scenarios_started);
let f = format!("{} failed", self.step_failed).red();
let s = format!("{} skipped", self.step_skipped).cyan();
let p = format!("{} passed", self.step_passed).green();
println!("{} steps ({f}, {s}, {p})", self.step_started);
}
event::Cucumber::ParsingFinished {
features: _,
rules: _,
scenarios: _,
steps: _,
parser_errors: _,
} => {}
2024-06-05 08:58:41 -04:00
_ => {}
},
Err(e) => println!("Error: {e}"),
}
let _ = io::stdout().flush();
}
}