use clex_gen::generator;
#[test]
fn test_lexer_error_includes_span() {
let input = "'unclosed string";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("0.."));
assert!(error_message.contains("expected closing single quote"));
}
#[test]
fn test_parser_error_includes_span() {
let input = "N[1, 2";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("expected closing square bracket"));
}
#[test]
fn test_invalid_charset_error_includes_span() {
let input = "@CH_INVALID@";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("0.."));
assert!(error_message.contains("invalid character set"));
}
#[test]
fn test_multiple_errors_have_different_positions() {
let test_cases = [
"'hello", "N ' ", "N N ' ", ];
for (i, input) in test_cases.iter().enumerate() {
let result = generator(input.to_string());
assert!(result.is_err(), "Test case {} should error", i);
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("|")); }
}
#[test]
fn test_unclosed_non_capturing_group_error() {
let input = "(?:N";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("non-capturing group"));
}
#[test]
fn test_missing_colon_after_question_mark() {
let input = "N ?";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("expected colon"));
}
#[test]
fn test_negative_group_number_error() {
let input = "N{\\0}";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("input:"));
assert!(error_message.contains("group number must be positive"));
}
#[test]
fn test_error_format_has_visual_pointer() {
let input = "'test";
let result = generator(input.to_string());
assert!(result.is_err());
let error_message = result.unwrap_err().to_string();
assert!(error_message.contains("^")); assert!(error_message.contains("|")); assert!(error_message.contains("error:")); }