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