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