use jugar_probar::{calculator_coverage, game_coverage, gui_coverage, UxCoverageBuilder};
use showcase_calculator::prelude::*;
#[test]
fn test_simplest_gui_coverage() {
let mut gui = gui_coverage! {
buttons: ["btn-0", "btn-1", "btn-equals", "btn-clear"],
screens: ["calculator"]
};
let mut driver = WasmDriver::new();
driver.type_input("1");
gui.click("btn-1");
driver.type_input("0");
gui.click("btn-0");
driver.click_equals();
gui.click("btn-equals");
gui.visit("calculator");
println!("{}", gui.summary()); assert!(gui.meets(75.0), "Expected at least 75% GUI coverage");
}
#[test]
fn test_calculator_preset_coverage() {
let mut gui = calculator_coverage();
let mut driver = WasmDriver::new();
for digit in 0..=9 {
driver.type_input(&digit.to_string());
gui.click(&format!("btn-{}", digit));
}
gui.click("btn-plus");
gui.click("btn-minus");
gui.click("btn-times");
gui.click("btn-divide");
gui.click("btn-equals");
gui.click("btn-clear");
gui.click("btn-decimal");
gui.click("btn-power");
gui.click("btn-open-paren");
gui.click("btn-close-paren");
gui.visit("calculator");
gui.visit("history");
println!("{}", gui.summary());
assert!(gui.is_complete(), "Calculator GUI should be fully covered");
}
#[test]
fn test_game_coverage_pattern() {
let mut gui = game_coverage(
&["start_game", "pause", "restart", "quit"],
&["title", "playing", "paused", "game_over"],
);
gui.visit("title");
gui.click("start_game");
gui.visit("playing");
gui.click("pause");
gui.visit("paused");
gui.visit("game_over");
gui.click("restart");
gui.click("quit");
println!("{}", gui.summary());
assert!(gui.is_complete());
}
#[test]
fn test_wasm_driver_gui_coverage() {
let mut gui = UxCoverageBuilder::new()
.button("btn-7")
.button("btn-times")
.button("btn-6")
.button("btn-equals")
.button("btn-clear")
.screen("calculator")
.build();
let mut driver = WasmDriver::new();
driver.type_input("7 * 6");
gui.click("btn-7");
gui.click("btn-times");
gui.click("btn-6");
driver.click_equals();
gui.click("btn-equals");
assert_eq!(driver.get_result(), "42");
gui.visit("calculator");
driver.click_clear();
gui.click("btn-clear");
println!("\n{}", gui.summary());
assert!(gui.is_complete(), "All GUI elements should be covered");
}
#[test]
fn test_partial_coverage_tracking() {
let mut gui = gui_coverage! {
buttons: ["btn-0", "btn-1", "btn-2", "btn-3", "btn-4",
"btn-5", "btn-6", "btn-7", "btn-8", "btn-9"],
screens: ["calculator", "history", "settings"]
};
gui.click("btn-1");
gui.click("btn-2");
gui.click("btn-3");
gui.visit("calculator");
let percent = gui.percent();
println!("Current GUI coverage: {:.1}%", percent);
println!("{}", gui.summary());
assert!(
gui.meets(25.0),
"Should have at least 25% coverage: {}",
gui.summary()
);
}
#[test]
fn test_full_spec_with_gui_coverage() {
use showcase_calculator::driver::verify_basic_arithmetic;
let mut gui = calculator_coverage();
let mut driver = WasmDriver::new();
verify_basic_arithmetic(&mut driver);
gui.click("btn-plus");
gui.click("btn-minus");
gui.click("btn-times");
gui.click("btn-divide");
gui.click("btn-equals");
gui.visit("calculator");
println!("\nFunctional tests: PASS");
println!("GUI Coverage: {}", gui.summary());
}