use std::time::Duration;
pub const CHROME_ARGS: &[&str] = &[
"--disable-session-crashed-bubble",
"--hide-crash-restore-bubble",
"--disable-infobars",
"--password-store=basic",
"--no-first-run",
"--no-default-browser-check",
"--disable-crash-restore",
];
#[derive(Debug, Clone, Copy)]
pub struct Timing {
pub scroll_animation_wait: Duration,
pub default_wait_after_scroll: Duration,
pub visibility_check_timeout: Duration,
pub default_timeout: Duration,
pub navigation_timeout: Duration,
pub verification_timeout: Duration,
pub verification_retry_interval: Duration,
}
impl Default for Timing {
fn default() -> Self {
Self {
scroll_animation_wait: Duration::from_millis(300),
default_wait_after_scroll: Duration::from_millis(1000),
visibility_check_timeout: Duration::from_millis(100),
default_timeout: Duration::from_millis(5000),
navigation_timeout: Duration::from_millis(30000),
verification_timeout: Duration::from_millis(3000),
verification_retry_interval: Duration::from_millis(100),
}
}
}
pub static TIMING: std::sync::LazyLock<Timing> = std::sync::LazyLock::new(Timing::default);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn chrome_args_is_not_empty() {
assert!(!CHROME_ARGS.is_empty());
}
#[test]
fn chrome_args_contains_expected_arguments() {
assert!(CHROME_ARGS.contains(&"--disable-infobars"));
assert!(CHROME_ARGS.contains(&"--password-store=basic"));
assert!(CHROME_ARGS.contains(&"--no-first-run"));
assert!(CHROME_ARGS.contains(&"--no-default-browser-check"));
}
#[test]
fn chrome_args_contains_crash_related_flags() {
assert!(CHROME_ARGS.contains(&"--disable-session-crashed-bubble"));
assert!(CHROME_ARGS.contains(&"--hide-crash-restore-bubble"));
assert!(CHROME_ARGS.contains(&"--disable-crash-restore"));
}
#[test]
fn chrome_args_has_at_least_5_arguments() {
assert!(CHROME_ARGS.len() >= 5);
}
#[test]
fn timing_default_values_are_reasonable() {
let timing = Timing::default();
assert!(timing.scroll_animation_wait > Duration::ZERO);
assert!(timing.default_wait_after_scroll > Duration::ZERO);
assert!(timing.visibility_check_timeout > Duration::ZERO);
assert!(timing.default_timeout > Duration::ZERO);
assert!(timing.navigation_timeout > Duration::ZERO);
assert!(timing.verification_timeout > Duration::ZERO);
assert!(timing.verification_retry_interval > Duration::ZERO);
assert!(timing.navigation_timeout > timing.default_timeout);
}
#[test]
fn timing_scroll_animation_wait_is_300ms() {
let timing = Timing::default();
assert_eq!(timing.scroll_animation_wait, Duration::from_millis(300));
}
#[test]
fn timing_default_wait_after_scroll_is_1000ms() {
let timing = Timing::default();
assert_eq!(
timing.default_wait_after_scroll,
Duration::from_millis(1000)
);
}
#[test]
fn timing_visibility_check_timeout_is_100ms() {
let timing = Timing::default();
assert_eq!(timing.visibility_check_timeout, Duration::from_millis(100));
}
#[test]
fn timing_default_timeout_is_5000ms() {
let timing = Timing::default();
assert_eq!(timing.default_timeout, Duration::from_millis(5000));
}
#[test]
fn timing_navigation_timeout_is_30000ms() {
let timing = Timing::default();
assert_eq!(timing.navigation_timeout, Duration::from_millis(30000));
}
}