#![allow(clippy::uninlined_format_args)]
use jugar_probar::{Locator, Selector};
fn main() {
println!("=== Probar Semantic Locators Demo (PMAT-001) ===\n");
demo_role_selectors();
demo_label_selectors();
demo_placeholder_selectors();
demo_alt_text_selectors();
demo_static_constructors();
println!("\n=== Semantic Locators Demo Complete ===");
}
fn demo_role_selectors() {
println!("--- Demo 1: Role Selectors (ARIA Roles) ---\n");
let button = Selector::role("button");
println!("Role selector: {:?}", button);
println!(" Query: {}", button.to_query());
println!(" Count Query: {}", button.to_count_query());
let submit_btn = Selector::role_with_name("button", "Submit");
println!("\nRole with name: {:?}", submit_btn);
println!(" Query: {}", submit_btn.to_query());
println!("\nCommon ARIA roles for game testing:");
println!(" - button: Interactive buttons");
println!(" - link: Clickable links");
println!(" - textbox: Input fields");
println!(" - checkbox: Toggle controls");
println!(" - slider: Range inputs");
println!(" - progressbar: Loading indicators");
println!(" - alert: Important messages");
println!(" - dialog: Modal windows");
println!(" - menu/menuitem: Game menus");
println!();
}
fn demo_label_selectors() {
println!("--- Demo 2: Label Selectors (Form Labels) ---\n");
let username = Selector::label("Username");
println!("Label selector: {:?}", username);
println!(" Query: {}", username.to_query());
println!(" Count Query: {}", username.to_count_query());
println!("\nLabel association methods:");
println!(" 1. <label for='id'>Text</label><input id='id'>");
println!(" 2. <label>Text<input></label> (nested)");
let email = Selector::label("Email");
let password = Selector::label("Password");
let remember = Selector::label("Remember me");
println!("\nCommon form labels:");
println!(" Email: {}", email.to_query());
println!(" Password: {}", password.to_query());
println!(" Remember: {}", remember.to_query());
println!();
}
fn demo_placeholder_selectors() {
println!("--- Demo 3: Placeholder Selectors ---\n");
let search = Selector::placeholder("Search...");
println!("Placeholder selector: {:?}", search);
println!(" Query: {}", search.to_query());
println!(" Count Query: {}", search.to_count_query());
let filter_items = Selector::placeholder("Filter items");
let enter_name = Selector::placeholder("Enter player name");
println!("\nGame UI placeholders:");
println!(" Filter: {}", filter_items.to_query());
println!(" Name: {}", enter_name.to_query());
println!();
}
fn demo_alt_text_selectors() {
println!("--- Demo 4: Alt Text Selectors (Images) ---\n");
let logo = Selector::alt_text("Company Logo");
println!("Alt text selector: {:?}", logo);
println!(" Query: {}", logo.to_query());
println!(" Count Query: {}", logo.to_count_query());
let player_avatar = Selector::alt_text("Player Avatar");
let enemy_sprite = Selector::alt_text("Enemy");
let power_up = Selector::alt_text("Power Up");
println!("\nGame image alt texts:");
println!(" Avatar: {}", player_avatar.to_query());
println!(" Enemy: {}", enemy_sprite.to_query());
println!(" Power-up: {}", power_up.to_query());
println!();
}
fn demo_static_constructors() {
println!("--- Demo 5: Static Locator Constructors ---\n");
let btn = Locator::by_role("button");
let label = Locator::by_label("Username");
let placeholder = Locator::by_placeholder("Search");
let alt = Locator::by_alt_text("Logo");
let test_id = Locator::by_test_id("submit-btn");
let text = Locator::by_text("Click me");
println!("Locator::by_role(\"button\"): {:?}", btn.selector());
println!("Locator::by_label(\"Username\"): {:?}", label.selector());
println!(
"Locator::by_placeholder(\"Search\"): {:?}",
placeholder.selector()
);
println!("Locator::by_alt_text(\"Logo\"): {:?}", alt.selector());
println!(
"Locator::by_test_id(\"submit-btn\"): {:?}",
test_id.selector()
);
println!("Locator::by_text(\"Click me\"): {:?}", text.selector());
let submit = Locator::by_role_with_name("button", "Submit");
println!("\nLocator::by_role_with_name(\"button\", \"Submit\"):");
println!(" Selector: {:?}", submit.selector());
let custom = Locator::by_role("textbox")
.with_timeout(std::time::Duration::from_secs(5))
.with_strict(true);
println!("\nWith custom options:");
println!(" Timeout: {:?}", custom.options().timeout);
println!(" Strict: {}", custom.options().strict);
println!();
}