Files
c3c/test/unit/stdlib/encoding/json.c3
2025-03-03 00:32:20 +01:00

54 lines
1.5 KiB
Plaintext

module json_test @test;
import std::collections::object;
import std::io;
import std::encoding::json;
fn void simple_test()
{
ByteReader reader;
reader.init(`{ "b": 123, "c": [ { "d": 66 }, null, "hello\tworld", false, { "id": "xyz" } ] }`);
Object* o = json::parse(mem, &reader)!!;
defer o.free();
assert(o.get_int("b")!! == 123);
assert(o.get("c").get_len()!! == 5);
assert(o.get("c").get_at(0).get_int("d")!! == 66);
assert(o.get("c").get_at(1).is_null()!!);
assert(o.get("c").get_string_at(2)!! == "hello\tworld");
assert(o.get("c").get_bool_at(3)!! == false);
assert(o.get("c").get_at(4).get_string("id")!! == "xyz");
}
fn void simple_test2()
{
ByteReader reader;
reader.init(`{"jsonrpc":"2.0","id":null,"method":"initialize"}`);
Object* o = json::parse(mem, &reader)!!;
defer o.free();
}
fn void test_string()
{
Object* o = json::parse_string(mem, `{"jsonrpc":"2","id":null,"method":"initialize"}`)!!;
defer o.free();
String s = string::tformat("%s", *o);
Object* o2 = json::parse_string(mem, s)!!;
defer o2.free();
String s2 = string::tformat("%s", *o2);
assert(s2 == s, "Unexpectedly got %s and not %s", s2, s);
}
fn void test_temp_string()
{
@pool()
{
Object* o = json::tparse_string(`{"jsonrpc":"2","id":null,"method":"initialize"}`)!!;
defer o.free();
String s = string::tformat("%s", *o);
Object* o2 = json::tparse_string(s)!!;
defer o2.free();
String s2 = string::tformat("%s", *o2);
assert(s2 == s, "Unexpectedly got %s and not %s", s2, s);
};
}