Skip to main content

use_accessibility/
lib.rs

1#![forbid(unsafe_code)]
2//! Thin facade for the `use-accessibility` workspace.
3//!
4//! The crate reexports the focused accessibility crates directly so consumers
5//! can opt into one dependency while still using the smaller APIs.
6//!
7//! # Examples
8//!
9//! ```rust
10//! use use_accessibility::*;
11//!
12//! let ratio = contrast_ratio(
13//!     RgbColor {
14//!         red: 0,
15//!         green: 0,
16//!         blue: 0,
17//!     },
18//!     RgbColor {
19//!         red: 255,
20//!         green: 255,
21//!         blue: 255,
22//!     },
23//! );
24//! let target = TouchTarget::new(48.0, 44.0).unwrap();
25//! let label = AccessibleLabel::new("Submit order").unwrap();
26//!
27//! assert!(passes_normal_text_aaa(ratio));
28//! assert!(target.is_recommended_size());
29//! assert_eq!(label.word_count(), 2);
30//! ```
31
32pub use use_accessibility_check;
33pub use use_accessibility_check::*;
34pub use use_accessibility_score;
35pub use use_accessibility_score::*;
36pub use use_accessible_label;
37pub use use_accessible_label::*;
38pub use use_contrast;
39pub use use_contrast::*;
40pub use use_focus_order;
41pub use use_focus_order::*;
42pub use use_motion_preference;
43pub use use_motion_preference::*;
44pub use use_readable_text;
45pub use use_readable_text::*;
46pub use use_touch_target;
47pub use use_touch_target::*;
48
49#[cfg(test)]
50mod tests {
51    use super::{
52        AccessibilityCheckResult, AccessibilityIssue, AccessibilitySeverity, AccessibleLabel,
53        CheckStatus, RgbColor, TouchTarget, contrast_ratio, count_failed, filter_by_severity,
54        passes_normal_text_aaa,
55    };
56
57    #[test]
58    fn facade_reexports_workspace_apis() {
59        let ratio = contrast_ratio(
60            RgbColor {
61                red: 0,
62                green: 0,
63                blue: 0,
64            },
65            RgbColor {
66                red: 255,
67                green: 255,
68                blue: 255,
69            },
70        );
71        let target = TouchTarget::new(48.0, 44.0).unwrap();
72        let label = AccessibleLabel::new("Submit order").unwrap();
73        let issue = AccessibilityIssue {
74            code: String::from("contrast"),
75            message: String::from("Low contrast"),
76            severity: AccessibilitySeverity::Warning,
77        };
78
79        assert!(passes_normal_text_aaa(ratio));
80        assert!(target.is_recommended_size());
81        assert_eq!(label.word_count(), 2);
82        assert_eq!(
83            filter_by_severity(&[issue], AccessibilitySeverity::Warning).len(),
84            1
85        );
86        assert_eq!(
87            count_failed(&[AccessibilityCheckResult {
88                name: String::from("contrast"),
89                status: CheckStatus::Fail,
90                weight: 1.0,
91            }]),
92            1
93        );
94    }
95}