blob: 5cd737ac6df046edf9ca81cd5b63413dc14f78ab [file] [edit]
#include "support/json.h"
#include "gtest/gtest.h"
using JSONTest = ::testing::Test;
TEST_F(JSONTest, RoundtripString) {
// TODO: change the API to not require a copy
auto input = "[\"hello\",\"world\"]";
auto* copy = strdup(input);
json::Value value;
value.parse(copy, json::Value::ASCII);
std::stringstream ss;
value.stringify(ss);
EXPECT_EQ(ss.str(), input);
free(copy);
}
static void
checkOutput(json::Value::Ref ref, std::string expected, bool pretty = false) {
std::stringstream ss;
ref->stringify(ss, pretty);
EXPECT_EQ(ss.str(), expected);
}
static void checkPrettyOutput(json::Value::Ref ref, std::string expected) {
checkOutput(ref, expected, true);
}
TEST_F(JSONTest, StringifyArray) {
auto array = json::Value::makeArray();
array->push_back(json::Value::make(42));
array->push_back(json::Value::make("1337"));
array->push_back(json::Value::make()); // null
checkOutput(array, "[42,\"1337\",null]");
checkPrettyOutput(array, R"([
42,
"1337",
null
])");
}
TEST_F(JSONTest, StringifyObject) {
auto object = json::Value::makeObject();
object["foo"] = json::Value::make(42);
object["bar"] = json::Value::make("1337");
checkOutput(object, "{\"foo\":42,\"bar\":\"1337\"}");
checkPrettyOutput(object, R"({
"foo": 42,
"bar": "1337"
})");
}
TEST_F(JSONTest, StringifyNesting) {
auto array = json::Value::makeArray();
auto object = json::Value::makeObject();
auto array1 = json::Value::makeArray();
auto object1 = json::Value::makeObject();
array->push_back(object);
object["body"] = array1;
array1->push_back(object1);
object1["value"] = json::Value::make(42);
checkPrettyOutput(array, R"([
{
"body": [
{
"value": 42
}
]
}
])");
}