use decrust_promac_runtime::backtrace::DecrustBacktrace as Backtrace;
use decrust_promac_runtime::DecrustError;
#[test]
fn test_decrust_macro_simple_expression() {
fn risky_operation() -> Result<i32, DecrustError> {
Ok(42)
}
let result = risky_operation().unwrap();
assert_eq!(result, 42);
}
#[test]
fn test_decrust_macro_block() {
fn risky_operation() -> Result<i32, DecrustError> {
Ok(42)
}
fn another_risky_op(i: i32) -> Result<i32, DecrustError> {
Ok(i * 2)
}
let result = risky_operation()
.and_then(|x| another_risky_op(x).map(|y| y + 1))
.unwrap();
assert_eq!(result, 85); }
#[test]
fn test_decrust_macro_error_handling() {
fn failing_operation() -> Result<i32, DecrustError> {
Err(DecrustError::Validation {
field: "test".to_string(),
message: "Test error".to_string(),
expected: None,
actual: None,
rule: None,
backtrace: Backtrace::capture(),
})
}
let result = failing_operation();
assert!(result.is_err());
if let Err(err) = result {
if let DecrustError::Validation { field, message, .. } = err {
assert_eq!(field, "test");
assert_eq!(message, "Test error");
} else {
panic!("Expected Validation error variant");
}
}
}
#[test]
fn test_decrust_macro_autocorrection() {
fn error_with_autocorrection() -> Result<i32, DecrustError> {
let err = DecrustError::Validation {
field: "test".to_string(),
message: "Test error with autocorrection".to_string(),
expected: None,
actual: None,
rule: None,
backtrace: Backtrace::capture(),
};
Err(err)
}
let result = error_with_autocorrection();
assert!(result.is_err());
}