41 lines
1.5 KiB
C++
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);
|
|
} |