#![allow(clippy::unwrap_used, clippy::expect_used)]
use kaish_kernel::Kernel;
#[tokio::test]
async fn regex_match_valid_matching_pattern_exits_zero() {
let kernel = Kernel::transient().unwrap();
let result = kernel.execute(r#"[[ "abc" =~ "a.c" ]]"#).await.expect("should succeed");
assert_eq!(result.code, 0, "matching regex should exit 0; stderr: {:?}", result.err);
assert!(result.err.is_empty(), "no error on a valid match: {:?}", result.err);
}
#[tokio::test]
async fn regex_match_valid_nonmatching_pattern_exits_one() {
let kernel = Kernel::transient().unwrap();
let result = kernel.execute(r#"[[ "abc" =~ "xyz" ]]"#).await.expect("should succeed");
assert_eq!(result.code, 1, "non-matching regex should exit 1; stderr: {:?}", result.err);
assert!(result.err.is_empty(), "no error on a valid non-match: {:?}", result.err);
}
#[tokio::test]
async fn regex_match_uncompilable_pattern_is_loud_error() {
let kernel = Kernel::transient().unwrap();
let result = kernel.execute(r#"[[ "abc" =~ "(" ]]"#).await;
assert!(result.is_err(), "uncompilable regex must return Err, not silent false");
let msg = format!("{:#}", result.unwrap_err());
assert!(
msg.to_lowercase().contains("regex") || msg.to_lowercase().contains("pattern") || msg.to_lowercase().contains("paren"),
"error message must name the regex problem: {msg}"
);
}
#[tokio::test]
async fn regex_notmatch_uncompilable_pattern_is_loud_error() {
let kernel = Kernel::transient().unwrap();
let result = kernel.execute(r#"[[ "abc" != "(" ]]"#).await;
drop(result);
let result2 = kernel.execute(r#"[[ "abc" !~ "(" ]]"#).await;
assert!(result2.is_err(), "uncompilable regex in !~ must return Err, not silent true");
let msg = format!("{:#}", result2.unwrap_err());
assert!(
msg.to_lowercase().contains("regex") || msg.to_lowercase().contains("pattern") || msg.to_lowercase().contains("paren"),
"error message must name the regex problem: {msg}"
);
}
#[tokio::test]
async fn regex_match_unclosed_bracket_is_loud_error() {
let kernel = Kernel::transient().unwrap();
let result = kernel.execute(r#"[[ "abc" =~ "[" ]]"#).await;
assert!(result.is_err(), "unclosed bracket regex must return Err, not silent false");
let msg = format!("{:#}", result.unwrap_err());
assert!(
msg.to_lowercase().contains("regex") || msg.to_lowercase().contains("pattern") || msg.to_lowercase().contains("bracket") || msg.to_lowercase().contains("class"),
"error message must name the regex problem: {msg}"
);
}