humphrey_json 0.2.2

A JSON library for the Humphrey ecosystem.
Documentation
use crate::{json, Value};

#[test]
fn test_macro_object() {
    let value = json!({
        "name": "William Henderson",
        "favouriteNumber": 1.414,
        "languages": [
            "Rust",
            "TypeScript",
            1.234E3,
            false,
            {
                "name": "Python",
                "version": 3.6
            }
        ],
        "weaknesses": [],
        "funnyName": {},
        "online": true,
        "life": null
    });

    let expected_string = include_str!("./testcases/object.json");
    let expected_value = Value::parse(expected_string).unwrap();

    assert_eq!(value, expected_value);
}

#[test]
fn test_macro_array() {
    let value = json!([
      {
        "name": "w-henderson",
        "favouriteNumber": 1.414,
        "online": true
      },
      {
        "name": "flauntingspade4",
        "favouriteNumber": 69,
        "online": false
      }
    ]);

    let expected_string = include_str!("./testcases/array.json");
    let expected_value = Value::parse(expected_string).unwrap();

    assert_eq!(value, expected_value);
}

#[test]
fn test_macro_string() {
    let value = json!("Hello, world!");
    let expected_value = Value::String("Hello, world!".into());

    assert_eq!(value, expected_value);
}

#[test]
fn test_macro_literals() {
    let values = [json!(1234), json!(true), json!(false), json!(null), json!()];

    let expected_values = [
        Value::Number(1234.0),
        Value::Bool(true),
        Value::Bool(false),
        Value::Null,
        Value::Null,
    ];

    for (value, expected_value) in values.iter().zip(expected_values.iter()) {
        assert_eq!(*value, *expected_value);
    }
}

#[test]
fn test_macro_embedded_variables() {
    let embedded_string = "Hello, world!";
    let embedded_number: u16 = 1234;
    let embedded_some = Some("value");
    let embedded_none: Option<&str> = None;

    let value = json!({
        "string": embedded_string,
        "number": embedded_number,
        "some": embedded_some,
        "none": embedded_none
    });

    let expected_value = Value::Object(vec![
        ("string".into(), Value::String("Hello, world!".into())),
        ("number".into(), Value::Number(1234.0)),
        ("some".into(), Value::String("value".into())),
        ("none".into(), Value::Null),
    ]);

    assert_eq!(value, expected_value);
}

#[test]
fn test_macro_complex_embedded_variables() {
    let embedded_string = "Hello, world!";
    let embedded_number: Option<u16> = Some(1234);

    let value = json!({
        "string": embedded_string,
        "number": embedded_number.map(|n| n * 2),
        "array": [
            embedded_number.map(|n| n * 3),
            embedded_number.map(|n| n * 4)
        ]
    });

    let expected_value = Value::Object(vec![
        ("string".into(), Value::String("Hello, world!".into())),
        ("number".into(), Value::Number(2468.0)),
        (
            "array".into(),
            Value::Array(vec![Value::Number(3702.0), Value::Number(4936.0)]),
        ),
    ]);

    assert_eq!(value, expected_value);
}