///|
fn sample_scenario() -> String {
"name: Deployment risk matrix\n" +
"strength: 2\n" +
"max-candidates: 1000\n" +
"minimize: true\n" +
"param os: linux, windows, macos\n" +
"param browser: chrome, firefox, safari\n" +
"param auth: password, oidc\n" +
"param region: cn, eu, us\n" +
"constraint safari requires macos: browser == safari => os == macos\n" +
"exclude: os=windows, browser=safari\n" +
"include: os=linux, browser=chrome, auth=oidc, region=cn\n" +
"risk browser=safari: 4: browser-specific rendering risk\n" +
"risk os=macos, browser=safari: 9: Safari path must stay visible\n"
}
///|
fn main {
let spec = match @caseweave.ScenarioSpec::parse(sample_scenario()) {
Ok(value) => value
Err(_) => panic()
}
let run = match spec.run() {
Ok(value) => value
Err(_) => panic()
}
let gate = run.evaluate_gate(spec, gate=@caseweave.ScenarioGate::strict())
let repair = match
spec.plan_repair([
@caseweave.TestCase::new(["linux", "chrome", "oidc", "cn"]),
]) {
Ok(value) => value
Err(_) => panic()
}
let repair_gate = repair.evaluate_repair_gate(
gate=@caseweave.RepairGate::budget(20),
)
println("CaseWeave scenario-driven deployment matrix")
println(spec.summary())
println(run.suite.summary())
println(run.coverage.summary())
println(gate.summary())
println(repair.summary())
println(repair_gate.summary())
println("")
println("Top risk-ranked cases")
println(run.risk_markdown(top=5))
println("Coverage repair steps")
println(repair.steps_markdown(top=5))
println("Generated matrix")
println(run.cases_markdown())
}