use jugar_probar::strict::{E2ETestChecklist, WasmStrictMode};
fn main() {
println!("╔══════════════════════════════════════════════════════════════╗");
println!("║ Compliance Checking Demo (PROBAR-SPEC-011) ║");
println!("╚══════════════════════════════════════════════════════════════╝\n");
demo_strict_modes();
demo_e2e_checklist();
demo_checklist_workflow();
demo_compliance_validation();
}
fn demo_strict_modes() {
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!(" 1. WASM Strict Mode Presets");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
let modes = [
("Production", WasmStrictMode::production()),
("Development", WasmStrictMode::development()),
("Minimal", WasmStrictMode::minimal()),
];
for (name, mode) in &modes {
println!(" {} Mode:", name);
println!(
" ├─ Require code execution: {}",
mode.require_code_execution
);
println!(
" ├─ Fail on console error: {}",
mode.fail_on_console_error
);
println!(
" ├─ Verify custom elements: {}",
mode.verify_custom_elements
);
println!(
" ├─ Test both threading modes: {}",
mode.test_both_threading_modes
);
println!(
" ├─ Max WASM size: {:?}",
mode.max_wasm_size
.map(|s| format!("{} bytes ({:.1} MB)", s, s as f64 / 1_048_576.0))
.unwrap_or_else(|| "unlimited".to_string())
);
println!(" └─ Require panic-free: {}", mode.require_panic_free);
println!();
}
let custom = WasmStrictMode {
require_code_execution: true,
fail_on_console_error: true,
verify_custom_elements: true,
test_both_threading_modes: false,
simulate_low_memory: false,
verify_coop_coep_headers: true,
validate_replay_hash: false,
max_console_warnings: 3,
require_cache_hits: false,
max_wasm_size: Some(2 * 1024 * 1024), require_panic_free: true,
};
println!(" Custom Mode (via struct):");
println!(
" ├─ Fail on console error: {}",
custom.fail_on_console_error
);
println!(
" ├─ Max console warnings: {}",
custom.max_console_warnings
);
println!(" ├─ Max WASM size: {:?}", custom.max_wasm_size);
println!(" └─ Require panic-free: {}", custom.require_panic_free);
println!();
}
fn demo_e2e_checklist() {
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!(" 2. E2E Test Checklist Structure");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
let checklist = E2ETestChecklist::new();
println!(" Checklist items (all start as false):");
println!(" ├─ WASM executed: {}", checklist.wasm_executed);
println!(
" ├─ Components registered: {}",
checklist.components_registered
);
println!(" ├─ Console checked: {}", checklist.console_checked);
println!(" ├─ Network verified: {}", checklist.network_verified);
println!(
" └─ Error paths tested: {}",
checklist.error_paths_tested
);
println!();
println!(" Validation result: {:?}", checklist.validate());
println!();
}
fn demo_checklist_workflow() {
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!(" 3. Checklist Workflow Demo");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
let mut checklist = E2ETestChecklist::new().with_strict_mode(WasmStrictMode::production());
println!(" Step 1: Create checklist with production strict mode");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Step 2: Test WASM execution");
checklist.mark_wasm_executed();
println!(" ✓ WASM executed");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Step 3: Verify component registration");
checklist.mark_components_registered();
println!(" ✓ Components registered");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Step 4: Check console for errors");
checklist.mark_console_checked();
println!(" ✓ Console checked");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Step 5: Verify network calls");
checklist.mark_network_verified();
println!(" ✓ Network verified");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Step 6: Test error handling paths");
checklist.mark_error_paths_tested();
println!(" ✓ Error paths tested");
println!(" Validation: {:?}\n", checklist.validate());
println!(" Final checklist state:");
println!(" ├─ WASM executed: {}", checklist.wasm_executed);
println!(
" ├─ Components registered: {}",
checklist.components_registered
);
println!(" ├─ Console checked: {}", checklist.console_checked);
println!(" ├─ Network verified: {}", checklist.network_verified);
println!(
" └─ Error paths tested: {}",
checklist.error_paths_tested
);
println!();
}
fn demo_compliance_validation() {
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!(" 4. Compliance Validation Scenarios");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
let incomplete = E2ETestChecklist::new()
.with_wasm_executed()
.with_console_checked();
println!(" Scenario 1: Incomplete Checklist");
println!(" Only WASM execution and console checked");
match incomplete.validate() {
Ok(()) => println!(" Result: PASSED"),
Err(e) => {
println!(" Result: FAILED");
println!(" Error: {}", e);
}
}
println!();
let complete = E2ETestChecklist::new()
.with_wasm_executed()
.with_components_registered()
.with_console_checked()
.with_network_verified()
.with_error_paths_tested();
println!(" Scenario 2: Complete Checklist");
println!(" All items verified");
match complete.validate() {
Ok(()) => println!(" Result: PASSED ✓"),
Err(e) => println!(" Result: FAILED - {}", e),
}
println!();
let test_cases = [
("Production mode (strict)", WasmStrictMode::production()),
("Development mode (lenient)", WasmStrictMode::development()),
("Minimal mode (relaxed)", WasmStrictMode::minimal()),
];
println!(" Scenario 3: Mode Comparison");
println!(" (Using partial checklist - only WASM + console)\n");
for (name, mode) in test_cases {
let checklist = E2ETestChecklist::new()
.with_strict_mode(mode)
.with_wasm_executed()
.with_console_checked();
print!(" {}: ", name);
match checklist.validate() {
Ok(()) => println!("PASSED ✓"),
Err(_) => println!("FAILED"),
}
}
println!();
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!(" Demo complete!");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
}