#include #include "common/json.hpp" using namespace alvin; TEST_CASE("json parses a Hyprland client entry") { auto v = json::parse(R"([{ "address": "0x55a4165aec60", "at": [2903, 58], "size": [2834, 1539], "workspace": {"id": 8, "name": "8"}, "hidden": false, "title": "Café \"quoted\"", "pid": 3163 }])"); REQUIRE(v); const auto& c = (*v)[0]; CHECK(c["address"].string() == "0x55a4165aec60"); CHECK(c["at"][0].number() == 2903); CHECK(c["size"][1].number() == 1539); CHECK(c["workspace"]["name"].string() == "8"); CHECK(c["hidden"].boolean(true) == false); CHECK(c["title"].string() == "Caf\xc3\xa9 \"quoted\""); CHECK(c["missing"].isNull()); CHECK(c["missing"]["deeper"].isNull()); } TEST_CASE("json rejects malformed input") { CHECK_FALSE(json::parse("{")); CHECK_FALSE(json::parse("[1,]")); CHECK_FALSE(json::parse("{\"a\" 1}")); CHECK_FALSE(json::parse("[1] trailing")); CHECK(json::parse(" {} ")); CHECK(json::parse("\"\\ud83d\\ude00\"")->string() == "\xf0\x9f\x98\x80"); }