Files
klubhaus-doorbell/libraries/FastLED/tests/test_json_roundtrip.cpp
2026-02-12 00:45:31 -08:00

41 lines
1.5 KiB
C++

#include "test.h"
#include "fl/json.h"
using namespace fl;
TEST_CASE("JSON Round Trip Serialization Test") {
// Create the initial JSON string
const char* initialJson = "{\"name\":\"bob\",\"value\":21}";
// 1. Parse the JSON string into a Json document
Json parsedJson = Json::parse(initialJson);
// Verify parsing was successful
CHECK(parsedJson.has_value());
CHECK(parsedJson.is_object());
CHECK(parsedJson.contains("name"));
CHECK(parsedJson.contains("value"));
// Check values
CHECK_EQ(parsedJson["name"].as_or(string("")), "bob");
CHECK_EQ(parsedJson["value"].as_or(0), 21);
// 2. Serialize it back to a string
string serializedJson = parsedJson.to_string();
// 3. Confirm that the string is the same (after normalization)
// Since JSON serialization might reorder keys or add spaces, we'll normalize both strings
string normalizedInitial = Json::normalizeJsonString(initialJson);
string normalizedSerialized = Json::normalizeJsonString(serializedJson.c_str());
CHECK_EQ(normalizedInitial, normalizedSerialized);
// Also test with a more structured approach - parse the serialized string again
Json reparsedJson = Json::parse(serializedJson);
CHECK(reparsedJson.has_value());
CHECK(reparsedJson.is_object());
CHECK(reparsedJson.contains("name"));
CHECK(reparsedJson.contains("value"));
CHECK_EQ(reparsedJson["name"].as_or(string("")), "bob");
CHECK_EQ(reparsedJson["value"].as_or(0), 21);
}