Skip to content

Commit 5b018da

Browse files
committed
Increase test coverage pre-release (pt 2)
1 parent 7c38d99 commit 5b018da

6 files changed

Lines changed: 176 additions & 0 deletions

File tree

src/cli.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,7 @@ pub struct InputParameters {
234234
pub greppable: bool,
235235
pub no_extensions: bool,
236236
}
237+
238+
#[cfg(test)]
239+
#[path = "cli_test.rs"]
240+
mod tests;

src/cli_test.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use super::*;
2+
use clap::Parser;
3+
4+
#[test]
5+
fn test_argument_parse_success() {
6+
let arg: Argument = "name:string=value".parse().unwrap();
7+
8+
assert_eq!(arg.name, "name");
9+
assert_eq!(arg.type_name, "string");
10+
assert_eq!(arg.value, "value");
11+
}
12+
13+
#[test]
14+
fn test_argument_parse_missing_type_separator() {
15+
let err = "name=value".parse::<Argument>().unwrap_err();
16+
17+
assert!(err.contains("Invalid argument format"));
18+
}
19+
20+
#[test]
21+
fn test_argument_parse_missing_value_separator() {
22+
let err = "name:string".parse::<Argument>().unwrap_err();
23+
24+
assert!(err.contains("Missing value for argument 'name'"));
25+
}
26+
27+
#[test]
28+
fn test_argument_parse_empty_value() {
29+
let arg: Argument = "name:string=".parse().unwrap();
30+
31+
assert_eq!(arg.value, "");
32+
}
33+
34+
#[test]
35+
fn test_input_format_defaults_to_json() {
36+
let cli = Cli::parse_from(["celq", "this"]);
37+
38+
assert_eq!(cli.input_format(), InputFormat::Json);
39+
}
40+
41+
#[test]
42+
fn test_input_format_xml() {
43+
let cli = Cli::parse_from(["celq", "--from-xml", "this"]);
44+
45+
assert_eq!(cli.input_format(), InputFormat::Xml);
46+
}
47+
48+
#[test]
49+
fn test_parse_parallelism_positive() {
50+
assert_eq!(parse_parallelism("3").unwrap(), 3);
51+
}
52+
53+
#[test]
54+
fn test_parse_parallelism_zero_rejected() {
55+
let err = parse_parallelism("0").unwrap_err();
56+
57+
assert_eq!(err, "parallelism level cannot be 0");
58+
}
59+
60+
#[test]
61+
fn test_parse_parallelism_negative_uses_auto() {
62+
assert_eq!(parse_parallelism("-4").unwrap(), -1);
63+
}
64+
65+
#[test]
66+
fn test_parse_parallelism_invalid() {
67+
let err = parse_parallelism("abc").unwrap_err();
68+
69+
assert_eq!(err, "'abc' is not a valid integer");
70+
}

src/input_handler_test.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,3 +300,35 @@ fn test_handle_buffer_custom_root_var() {
300300
assert_eq!(results[0].0, "42");
301301
assert!(results[0].1);
302302
}
303+
304+
#[test]
305+
fn test_handle_buffer_rejects_zero_parallelism() {
306+
let program = Program::compile("this.x").unwrap();
307+
let args = BTreeMap::new();
308+
let input = r#"{"x": 42}"#;
309+
let cursor = Cursor::new(input.as_bytes());
310+
let reader = BufReader::new(cursor);
311+
let mut params = default_params();
312+
params.parallelism = 0;
313+
314+
let err = handle_buffer(&program, &args, &params, reader)
315+
.unwrap_err()
316+
.to_string();
317+
318+
assert!(err.contains("Parallelism level cannot be 0"));
319+
}
320+
321+
#[test]
322+
#[cfg(not(feature = "greppable"))]
323+
fn test_handle_json_greppable_disabled() {
324+
let program = Program::compile("this").unwrap();
325+
let args = BTreeMap::new();
326+
let mut params = default_params();
327+
params.greppable = true;
328+
329+
let err = handle_json(&program, &args, &params, Some(r#"{"x": 42}"#))
330+
.unwrap_err()
331+
.to_string();
332+
333+
assert!(err.contains("Binary was compiled without greppable support"));
334+
}

src/json2cel_test.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,29 @@ fn test_yaml_format_disabled() {
257257
assert!(vars.is_err());
258258
}
259259

260+
#[test]
261+
#[cfg(feature = "from-yaml")]
262+
fn test_yaml_invalid_input() {
263+
let vars = json_to_cel_variables(
264+
"{ invalid: [yaml",
265+
ROOT_VAR,
266+
InputFormat::Yaml,
267+
DEFAULT_PARALLELISM,
268+
);
269+
270+
assert!(vars.is_err());
271+
}
272+
273+
#[test]
274+
#[cfg(not(feature = "from-xml"))]
275+
fn test_xml_format_disabled() {
276+
let xml_input = r#"<root><value>42</value></root>"#;
277+
278+
let vars = json_to_cel_variables(xml_input, ROOT_VAR, InputFormat::Xml, DEFAULT_PARALLELISM);
279+
280+
assert!(vars.is_err());
281+
}
282+
260283
#[test]
261284
#[cfg(feature = "from-yaml")]
262285
fn test_yaml_multi_document_format() {

src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,7 @@ fn compile_expression(expression: Option<&str>, from_file: Option<&PathBuf>) ->
130130

131131
Program::compile(&source).map_err(|e| anyhow::anyhow!(e))
132132
}
133+
134+
#[cfg(test)]
135+
#[path = "main_test.rs"]
136+
mod tests;

src/main_test.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
use super::*;
2+
use tempfile::NamedTempFile;
3+
4+
#[test]
5+
fn test_compile_expression_inline() {
6+
let result = compile_expression(Some("1 + 2"), None);
7+
8+
assert!(result.is_ok());
9+
}
10+
11+
#[test]
12+
fn test_compile_expression_from_file() {
13+
let file = NamedTempFile::new().unwrap();
14+
fs::write(file.path(), "1 + 2").unwrap();
15+
16+
let result = compile_expression(None, Some(&file.path().to_path_buf()));
17+
18+
assert!(result.is_ok());
19+
}
20+
21+
#[test]
22+
fn test_compile_expression_missing_expression() {
23+
let err = compile_expression(None, None).unwrap_err().to_string();
24+
25+
assert!(err.contains("missing CEL expression"));
26+
}
27+
28+
#[test]
29+
fn test_compile_expression_missing_file() {
30+
let path = PathBuf::from("/definitely/missing/celq-expression.txt");
31+
let err = compile_expression(None, Some(&path))
32+
.unwrap_err()
33+
.to_string();
34+
35+
assert!(err.contains("failed to read expression file"));
36+
}
37+
38+
#[test]
39+
fn test_compile_expression_invalid_source() {
40+
let err = compile_expression(Some("("), None).unwrap_err().to_string();
41+
42+
assert!(!err.is_empty());
43+
}

0 commit comments

Comments
 (0)