celq 0.4.0

A CEL command-line query tool for JSON data
Documentation
use super::*;

#[test]
fn test_simple_object() {
    let input = r#"json = {};
json.Host = "headers.jsontest.com";
json["User-Agent"] = "gron/0.1";"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "Host": "headers.jsontest.com",
        "User-Agent": "gron/0.1"
    });

    assert_eq!(result, expected);
}

#[test]
fn test_sparse_array() {
    let input = r#"json.likes = [];
json.likes[0] = "code";
json.likes[2] = "meat";"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "likes": ["code", null, "meat"]
    });

    assert_eq!(result, expected);
}

#[test]
fn test_nested_object() {
    let input = r#"json = {};
json.user = {};
json.user.name = "John";
json.user.age = 30;"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "user": {
            "name": "John",
            "age": 30
        }
    });

    assert_eq!(result, expected);
}

#[test]
fn test_numbers() {
    let input = r#"json = {};
json.integer = 42;
json.float = 17.38;
json.negative = -5;"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "integer": 42,
        "float": 17.38,
        "negative": -5
    });

    assert_eq!(result, expected);
}

#[test]
fn test_booleans_and_null() {
    let input = r#"json = {};
json.isTrue = true;
json.isFalse = false;
json.nothing = null;"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "isTrue": true,
        "isFalse": false,
        "nothing": null
    });

    assert_eq!(result, expected);
}

#[test]
fn test_empty_container_assignments_do_not_overwrite_existing_values() {
    let input = r#"json = {};
json.user = {};
json.user.name = "John";
json.user = {};
json.items = [];
json.items[0] = "first";
json.items = [];"#;

    let result = gron_to_json(input).unwrap();
    let expected: JsonValue = serde_json::json!({
        "user": {
            "name": "John"
        },
        "items": ["first"]
    });

    assert_eq!(result, expected);
}