2025-12-17 17:28:29 +01:00

54 lines
1.6 KiB
Rust

use cucumber::World;
use cucumber_ext::TestingFrameworkWorld;
use tracing_subscriber::{EnvFilter, fmt};
const FEATURES_PATH: &str = "examples/cucumber/features";
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Mode {
Host,
Compose,
}
fn set_default_env(key: &str, value: &str) {
if std::env::var_os(key).is_none() {
// SAFETY: Used as an early-run default. Prefer setting env vars in the
// shell for multi-threaded runs.
unsafe {
std::env::set_var(key, value);
}
}
}
fn is_compose(
feature: &cucumber::gherkin::Feature,
scenario: &cucumber::gherkin::Scenario,
) -> bool {
scenario.tags.iter().any(|tag| tag == "compose")
|| feature.tags.iter().any(|tag| tag == "compose")
}
pub fn init_logging_defaults() {
set_default_env("POL_PROOF_DEV_MODE", "true");
set_default_env("NOMOS_TESTS_KEEP_LOGS", "1");
set_default_env("NOMOS_LOG_DIR", ".tmp/cucumber-logs");
set_default_env("NOMOS_LOG_LEVEL", "info");
set_default_env("RUST_LOG", "info");
}
pub fn init_tracing() {
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let _ = fmt().with_env_filter(filter).with_target(true).try_init();
}
pub async fn run(mode: Mode) {
TestingFrameworkWorld::cucumber()
.with_default_cli()
.max_concurrent_scenarios(Some(1))
.filter_run(FEATURES_PATH, move |feature, _, scenario| match mode {
Mode::Host => !is_compose(feature, scenario),
Mode::Compose => is_compose(feature, scenario),
})
.await;
}