#[path = "support.rs"]
mod support;
use html_generator::accessibility::{
add_aria_attributes, validate_wcag, AccessibilityConfig, WcagLevel,
};
fn main() {
support::header("html-generator -- accessibility");
support::task_with_output("Add ARIA to buttons", || {
let html = r#"<button>Submit</button>"#;
let enhanced = add_aria_attributes(html, None).unwrap();
vec![
format!("input = {html}"),
format!("output = {enhanced}"),
format!(
"has aria-label = {}",
enhanced.contains("aria-label")
),
]
});
support::task_with_output("Add ARIA to navigation", || {
let html = r#"<nav><ul><li>Home</li><li>About</li></ul></nav>"#;
let enhanced = add_aria_attributes(html, None).unwrap();
vec![
format!(
"has role=navigation = {}",
enhanced.contains("role=\"navigation\"")
),
format!(
"has aria-label = {}",
enhanced.contains("aria-label")
),
]
});
support::task_with_output("Add ARIA to forms", || {
let html = r#"<form><input type="checkbox"></form>"#;
let enhanced = add_aria_attributes(html, None).unwrap();
vec![
format!(
"has aria-labelledby = {}",
enhanced.contains("aria-labelledby")
),
format!("output_length = {} bytes", enhanced.len()),
]
});
support::task_with_output("Validate WCAG AA compliance", || {
let html = r#"<html lang="en"><body><h1>Title</h1><h2>Sub</h2></body></html>"#;
let config = AccessibilityConfig::default();
let report = validate_wcag(html, &config, None).unwrap();
vec![
format!("issues = {}", report.issue_count),
format!("level = {:?}", config.wcag_level),
]
});
support::task_with_output("Validate WCAG AAA (stricter)", || {
let html = r#"<html lang="en"><body><h1>Title</h1><h3>Skipped</h3></body></html>"#;
let config = AccessibilityConfig {
wcag_level: WcagLevel::AAA,
..AccessibilityConfig::default()
};
let report = validate_wcag(html, &config, None).unwrap();
vec![
format!("issues = {}", report.issue_count),
format!(
"heading skip detected = {}",
report.issue_count > 0
),
]
});
support::task_with_output("Enhance multiple element types", || {
let html = r#"<nav><ul><li>Home</li></ul></nav><button>Click</button><form><input type="text"></form>"#;
let enhanced = add_aria_attributes(html, None).unwrap();
vec![
format!(
"nav aria = {}",
enhanced.contains("role=\"navigation\"")
),
format!("btn label = {}", enhanced.contains("aria-label")),
format!(
"form label = {}",
enhanced.contains("aria-labelledby")
),
]
});
support::summary(6);
}