vespe 0.1.2

Text as a Canvas for LLM Collaboration and Automation
Documentation
use super::super::Ast2Error;
use super::parser::Parser;
use super::values::{_try_parse_enclosed_string, _try_parse_enclosed_value, _try_parse_value};
use serde_json::json;

#[test]
fn test_try_parse_enclosed_string_double_quote() {
    let doc = r#""hello world" rest"#;
    let parser = Parser::new(doc);
    let p_after_opening_quote = parser.consume_matching_char_immutable('"').unwrap(); // Consume opening quote
    let (value, p_next) = _try_parse_enclosed_string(&parser, "\"").unwrap().unwrap();
    assert_eq!(value, "hello world");
    assert_eq!(p_next.remain(), " rest");

    let doc_escaped = r#""hello \"world\"" rest"#;
    let parser_escaped = Parser::new(doc_escaped);
    let p_after_opening_quote_escaped =
        parser_escaped.consume_matching_char_immutable('"').unwrap(); // Consume opening quote
    let (value_escaped, p_next_escaped) = _try_parse_enclosed_string(&parser_escaped, "\"")
        .unwrap()
        .unwrap();
    assert_eq!(value_escaped, "hello \"world\""); // Expect unescaped
    assert_eq!(p_next_escaped.remain(), " rest");

    let doc_unclosed = r#""hello"#;
    let parser_unclosed = Parser::new(doc_unclosed);
    let p_after_opening_quote_unclosed = parser_unclosed
        .consume_matching_char_immutable('"')
        .unwrap(); // Consume opening quote
    let result = _try_parse_enclosed_string(&parser_unclosed, "\"");
    assert!(matches!(result, Err(Ast2Error::UnclosedString { .. })));
}

#[test]
fn test_try_parse_enclosed_string_single_quote() {
    let doc = r#"'hello world' rest"#;
    let parser = Parser::new(doc);
    let p_after_opening_quote = parser.consume_matching_char_immutable('\'').unwrap(); // Consume opening quote
    let (value, p_next) = _try_parse_enclosed_string(&parser, "'").unwrap().unwrap();
    assert_eq!(value, "hello world");
    assert_eq!(p_next.remain(), " rest");

    let doc_escaped = r#"'hello \'world\'' rest"#;
    let parser_escaped = Parser::new(doc_escaped);
    let p_after_opening_quote_escaped = parser_escaped
        .consume_matching_char_immutable('\'')
        .unwrap(); // Consume opening quote
    let (value_escaped, p_next_escaped) = _try_parse_enclosed_string(&parser_escaped, "'")
        .unwrap()
        .unwrap();
    assert_eq!(value_escaped, "hello 'world'"); // Expect unescaped
    assert_eq!(p_next_escaped.remain(), " rest");
}

#[test]
fn test_try_parse_enclosed_value_double_quote() {
    let doc = r#""json value" rest"#;
    let parser = Parser::new(doc);
    let p_after_opening_quote = parser.consume_matching_char_immutable('"').unwrap(); // Consume opening quote
    let (value, p_next) = _try_parse_enclosed_value(&parser, "\"").unwrap().unwrap();
    assert_eq!(value, json!("json value"));
    assert_eq!(p_next.remain(), " rest");
}

#[test]
fn test_try_parse_enclosed_value_single_quote() {
    let doc = "'json value' rest";
    let parser = Parser::new(doc);
    let p_after_opening_quote = parser.consume_matching_char_immutable('\'').unwrap(); // Consume opening quote
    let (value, p_next) = _try_parse_enclosed_value(&parser, "'").unwrap().unwrap();
    assert_eq!(value, json!("json value"));
    assert_eq!(p_next.remain(), " rest");
}

#[test]
fn test_try_parse_value_enclosed() {
    let doc_double = r#""double quoted" rest"#;
    let parser_double = Parser::new(doc_double);
    let (value_double, p_next_double) = _try_parse_value(&parser_double).unwrap().unwrap();
    assert_eq!(value_double, json!("double quoted"));
    assert_eq!(p_next_double.remain(), " rest");

    let doc_single = "'single quoted' rest";
    let parser_single = Parser::new(doc_single);
    let (value_single, p_next_single) = _try_parse_value(&parser_single).unwrap().unwrap();
    assert_eq!(value_single, json!("single quoted"));
    assert_eq!(p_next_single.remain(), " rest");
}