use predicates::prelude::*;
#[test]
#[ignore = "Issue #131: parse_json() not yet implemented"]
fn test_issue_131_01_parse_json_simple_object() {
let script = r#"
fun main() {
let json_str = '{"name": "test", "value": 42}'
let data = parse_json(json_str)
println(data["name"])
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script)
.assert()
.success()
.stdout(predicate::str::contains("test"));
}
#[test]
#[ignore = "Issue #131: parse_json() not yet implemented"]
fn test_issue_131_02_parse_json_nested_access() {
let script = r#"
fun main() {
let json_str = '{"user": {"name": "Alice", "age": 30}}'
let data = parse_json(json_str)
println(data["user"]["name"])
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script)
.assert()
.success()
.stdout(predicate::str::contains("Alice"));
}
#[test]
#[ignore = "Issue #131: parse_json() not yet implemented"]
fn test_issue_131_03_parse_json_bench_009_pattern() {
let script = r#"
fun main() {
let json_str = '{"users": [{"name": "Bob"}]}'
let data = parse_json(json_str)
println(data["users"][0]["name"])
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script)
.assert()
.success()
.stdout(predicate::str::contains("Bob"));
}
#[test]
#[ignore = "Issue #131: json_parse() not yet implemented"]
fn test_issue_131_04_json_parse_still_works() {
let script = r#"
fun main() {
let json_str = '{"name": "test"}'
let data = json_parse(json_str)
println(data["name"])
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script)
.assert()
.success()
.stdout(predicate::str::contains("test"));
}
#[test]
#[ignore = "Issue #131: JSON parsing not yet implemented"]
fn test_issue_131_05_both_aliases_identical() {
let script_parse_json = r#"
fun main() {
let data = parse_json('{"x": 1, "y": 2}')
println(data["x"])
println(data["y"])
}
"#;
let script_json_parse = r#"
fun main() {
let data = json_parse('{"x": 1, "y": 2}')
println(data["x"])
println(data["y"])
}
"#;
let output1 = assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script_parse_json)
.assert()
.success()
.get_output()
.stdout
.clone();
let output2 = assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script_json_parse)
.assert()
.success()
.get_output()
.stdout
.clone();
assert_eq!(
output1, output2,
"parse_json() and json_parse() should produce identical output"
);
}
#[test]
fn test_issue_131_06_parse_json_not_message_type() {
let script = r#"
fun main() {
let data = parse_json("{\"name\": \"test\"}")
println(data)
}
"#;
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg("-e")
.arg(script)
.assert()
.success()
.stdout(predicate::str::contains("Message").not());
}