Skip to content

Commit 2f9384c

Browse files
committed
feat(cli): add exit code tests and SerializationError variant
Add exit code verification tests (code 2 for clap errors, code 1 for runtime errors). Add SerializationError variant to StringyError and migrate JSON serialization errors from ConfigError to the new variant for more precise error categorization. Signed-off-by: UncleSp1d3r <unclesp1d3r@evilbitlabs.io>
1 parent c1cf01a commit 2f9384c

3 files changed

Lines changed: 19 additions & 4 deletions

File tree

src/output/json.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ pub fn format_json(strings: &[FoundString], _metadata: &OutputMetadata) -> Resul
1111
let mut lines = Vec::with_capacity(strings.len());
1212
for item in strings {
1313
if !item.confidence.is_finite() {
14-
return Err(StringyError::ConfigError(
14+
return Err(StringyError::SerializationError(
1515
"JSON serialization failed: non-finite confidence".to_string(),
1616
));
1717
}
1818
let line = serde_json::to_string(item).map_err(|err| {
19-
StringyError::ConfigError(format!("JSON serialization failed: {}", err))
19+
StringyError::SerializationError(format!("JSON serialization failed: {}", err))
2020
})?;
2121
lines.push(line);
2222
}
@@ -275,8 +275,8 @@ mod tests {
275275
let strings = vec![make_string("nan").with_confidence(f32::NAN)];
276276
let result = format_json(&strings, &make_metadata(1));
277277
match result {
278-
Err(StringyError::ConfigError(_)) => {}
279-
_ => panic!("Expected ConfigError on invalid JSON serialization"),
278+
Err(StringyError::SerializationError(_)) => {}
279+
_ => panic!("Expected SerializationError on invalid JSON serialization"),
280280
}
281281
}
282282
}

src/types/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ pub enum StringyError {
1818
#[error("Configuration error: {0}")]
1919
ConfigError(String),
2020

21+
#[error("Serialization error: {0}")]
22+
SerializationError(String),
23+
2124
#[error("Validation error: {0}")]
2225
ValidationError(String),
2326

tests/integration_cli_errors.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,15 @@ fn error_missing_file_shows_path() {
2525
.failure()
2626
.stderr(predicate::str::contains("this_file_does_not_exist.bin"));
2727
}
28+
29+
#[test]
30+
fn exit_code_2_for_clap_errors() {
31+
// Missing required argument
32+
stringy().assert().failure().code(2);
33+
}
34+
35+
#[test]
36+
fn exit_code_1_for_runtime_errors() {
37+
// Cargo.toml is not a valid binary format
38+
stringy().arg("Cargo.toml").assert().failure().code(1);
39+
}

0 commit comments

Comments
 (0)