Skip to main content

jugar_probar/
result.rs

1//! Result and error types for Probar.
2
3use thiserror::Error;
4
5/// Result type for Probar operations
6pub type ProbarResult<T> = Result<T, ProbarError>;
7
8/// Errors that can occur in Probar
9#[derive(Debug, Error)]
10pub enum ProbarError {
11    /// Browser executable not found
12    #[error("Browser not found. Install Chromium or set CHROMIUM_PATH")]
13    BrowserNotFound,
14
15    /// Browser launch error
16    #[error("Failed to launch browser: {message}")]
17    BrowserLaunchError {
18        /// Error message
19        message: String,
20    },
21
22    /// Connection to browser failed
23    #[error("Failed to connect to browser: {message}")]
24    ConnectionFailed {
25        /// Error message
26        message: String,
27    },
28
29    /// Page error
30    #[error("Page error: {message}")]
31    PageError {
32        /// Error message
33        message: String,
34    },
35
36    /// Navigation error
37    #[error("Navigation to {url} failed: {message}")]
38    NavigationError {
39        /// URL that failed
40        url: String,
41        /// Error message
42        message: String,
43    },
44
45    /// Operation timed out
46    #[error("Operation timed out after {ms}ms")]
47    Timeout {
48        /// Timeout in milliseconds
49        ms: u64,
50    },
51
52    /// Timeout with message
53    #[error("Timeout: {message}")]
54    TimeoutError {
55        /// Error message
56        message: String,
57    },
58
59    /// WASM evaluation error
60    #[error("WASM evaluation failed: {message}")]
61    WasmError {
62        /// Error message
63        message: String,
64    },
65
66    /// Input simulation error
67    #[error("Input simulation failed: {message}")]
68    InputError {
69        /// Error message
70        message: String,
71    },
72
73    /// Screenshot error
74    #[error("Screenshot failed: {message}")]
75    ScreenshotError {
76        /// Error message
77        message: String,
78    },
79
80    /// Element not found error
81    #[error("Element not found: {selector} - {message}")]
82    ElementNotFound {
83        /// CSS selector
84        selector: String,
85        /// Error message
86        message: String,
87    },
88
89    /// Assertion failed
90    #[error("Assertion failed: {message}")]
91    AssertionFailed {
92        /// Error message
93        message: String,
94    },
95
96    /// Assertion error (from `expect()`)
97    #[error("Assertion error: {message}")]
98    AssertionError {
99        /// Error message
100        message: String,
101    },
102
103    /// Snapshot mismatch
104    #[error("Snapshot mismatch: {name} differs by {difference:.2}%")]
105    SnapshotMismatch {
106        /// Snapshot name
107        name: String,
108        /// Difference percentage
109        difference: f64,
110    },
111
112    /// Page navigation error (legacy)
113    #[error("Navigation failed: {url}")]
114    NavigationFailed {
115        /// URL that failed
116        url: String,
117    },
118
119    /// Image comparison error
120    #[error("Image comparison failed: {message}")]
121    ImageComparisonError {
122        /// Error message
123        message: String,
124    },
125
126    /// Image processing error (resizing, encoding, etc.)
127    #[error("Image processing failed: {message}")]
128    ImageProcessing {
129        /// Error message
130        message: String,
131    },
132
133    /// Invalid state error (operation called in wrong state)
134    #[error("Invalid state: {message}")]
135    InvalidState {
136        /// Error message
137        message: String,
138    },
139
140    /// Video recording error
141    #[error("Video recording failed: {message}")]
142    VideoRecording {
143        /// Error message
144        message: String,
145    },
146
147    /// Fixture error (setup/teardown failed)
148    #[error("Fixture error: {message}")]
149    FixtureError {
150        /// Error message
151        message: String,
152    },
153
154    /// I/O error
155    #[error("I/O error: {0}")]
156    Io(#[from] std::io::Error),
157
158    /// JSON error
159    #[error("JSON error: {0}")]
160    Json(#[from] serde_json::Error),
161
162    /// TUI testing error (Feature 21 - EDD Compliance)
163    #[error("TUI error: {message}")]
164    TuiError {
165        /// Error message
166        message: String,
167    },
168
169    /// Snapshot serialization error
170    #[error("Snapshot serialization error: {message}")]
171    SnapshotSerializationError {
172        /// Error message
173        message: String,
174    },
175
176    /// HTML generation error (Feature E - Zero-JavaScript Policy)
177    #[error("HTML generation error: {0}")]
178    HtmlGeneration(String),
179
180    /// CSS generation error (Feature E - Zero-JavaScript Policy)
181    #[error("CSS generation error: {0}")]
182    CssGeneration(String),
183
184    /// JavaScript generation error (Feature E - Zero-JavaScript Policy)
185    #[error("JavaScript generation error: {0}")]
186    JsGeneration(String),
187
188    /// Web validation error (Feature E - Zero-JavaScript Policy)
189    #[error("Web validation error: {0}")]
190    WebValidation(String),
191
192    /// Pixel coverage error (Feature A - Pixel-Level GUI Coverage)
193    #[error("Pixel coverage error: {0}")]
194    PixelCoverage(String),
195
196    /// Performance tracing error (Feature C - Renacer Integration)
197    #[error("Performance tracing error: {0}")]
198    PerformanceTracing(String),
199
200    /// WASM runner error (Feature D - WASM Runner)
201    #[error("WASM runner error: {0}")]
202    WasmRunner(String),
203
204    /// Serialization error (Issue #9 - Renacer Integration)
205    #[error("Serialization error: {message}")]
206    SerializationError {
207        /// Error message
208        message: String,
209    },
210
211    /// AV sync verification error
212    #[error("AV sync error: {message}")]
213    AvSyncError {
214        /// Error message
215        message: String,
216    },
217
218    /// ffmpeg execution error
219    #[error("ffmpeg error: {message}")]
220    FfmpegError {
221        /// Error message
222        message: String,
223    },
224}