browser_commander/core/
constants.rs1use std::time::Duration;
7
8pub const CHROME_ARGS: &[&str] = &[
13 "--disable-session-crashed-bubble",
14 "--hide-crash-restore-bubble",
15 "--disable-infobars",
16 "--no-first-run",
17 "--no-default-browser-check",
18 "--disable-crash-restore",
19];
20
21#[derive(Debug, Clone, Copy)]
26pub struct Timing {
27 pub scroll_animation_wait: Duration,
29 pub default_wait_after_scroll: Duration,
31 pub visibility_check_timeout: Duration,
33 pub default_timeout: Duration,
35 pub navigation_timeout: Duration,
37 pub verification_timeout: Duration,
39 pub verification_retry_interval: Duration,
41}
42
43impl Default for Timing {
44 fn default() -> Self {
45 Self {
46 scroll_animation_wait: Duration::from_millis(300),
47 default_wait_after_scroll: Duration::from_millis(1000),
48 visibility_check_timeout: Duration::from_millis(100),
49 default_timeout: Duration::from_millis(5000),
50 navigation_timeout: Duration::from_millis(30000),
51 verification_timeout: Duration::from_millis(3000),
52 verification_retry_interval: Duration::from_millis(100),
53 }
54 }
55}
56
57pub static TIMING: std::sync::LazyLock<Timing> = std::sync::LazyLock::new(Timing::default);
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63
64 #[test]
65 fn chrome_args_is_not_empty() {
66 assert!(!CHROME_ARGS.is_empty());
67 }
68
69 #[test]
70 fn chrome_args_contains_expected_arguments() {
71 assert!(CHROME_ARGS.contains(&"--disable-infobars"));
72 assert!(CHROME_ARGS.contains(&"--no-first-run"));
73 assert!(CHROME_ARGS.contains(&"--no-default-browser-check"));
74 }
75
76 #[test]
77 fn chrome_args_contains_crash_related_flags() {
78 assert!(CHROME_ARGS.contains(&"--disable-session-crashed-bubble"));
79 assert!(CHROME_ARGS.contains(&"--hide-crash-restore-bubble"));
80 assert!(CHROME_ARGS.contains(&"--disable-crash-restore"));
81 }
82
83 #[test]
84 fn chrome_args_has_at_least_5_arguments() {
85 assert!(CHROME_ARGS.len() >= 5);
86 }
87
88 #[test]
89 fn timing_default_values_are_reasonable() {
90 let timing = Timing::default();
91
92 assert!(timing.scroll_animation_wait > Duration::ZERO);
94 assert!(timing.default_wait_after_scroll > Duration::ZERO);
95 assert!(timing.visibility_check_timeout > Duration::ZERO);
96 assert!(timing.default_timeout > Duration::ZERO);
97 assert!(timing.navigation_timeout > Duration::ZERO);
98 assert!(timing.verification_timeout > Duration::ZERO);
99 assert!(timing.verification_retry_interval > Duration::ZERO);
100
101 assert!(timing.navigation_timeout > timing.default_timeout);
103 }
104
105 #[test]
106 fn timing_scroll_animation_wait_is_300ms() {
107 let timing = Timing::default();
108 assert_eq!(timing.scroll_animation_wait, Duration::from_millis(300));
109 }
110
111 #[test]
112 fn timing_default_wait_after_scroll_is_1000ms() {
113 let timing = Timing::default();
114 assert_eq!(
115 timing.default_wait_after_scroll,
116 Duration::from_millis(1000)
117 );
118 }
119
120 #[test]
121 fn timing_visibility_check_timeout_is_100ms() {
122 let timing = Timing::default();
123 assert_eq!(timing.visibility_check_timeout, Duration::from_millis(100));
124 }
125
126 #[test]
127 fn timing_default_timeout_is_5000ms() {
128 let timing = Timing::default();
129 assert_eq!(timing.default_timeout, Duration::from_millis(5000));
130 }
131
132 #[test]
133 fn timing_navigation_timeout_is_30000ms() {
134 let timing = Timing::default();
135 assert_eq!(timing.navigation_timeout, Duration::from_millis(30000));
136 }
137}