#include "util/json.h"
#include <string>
+#include <vector>
#include <gtest/gtest.h>
TEST(JsonTest, EmptyDictionaryContainsNoKeys) {
Json json;
ASSERT_TRUE(json.ParseObject("{}"));
- EXPECT_FALSE(json.HasStringValueForKey("key"));
- EXPECT_FALSE(json.HasStringValueForKey(std::string()));
+ std::string not_checked;
+ EXPECT_FALSE(json.GetStringValueForKey("key", ¬_checked));
+ EXPECT_FALSE(json.GetStringValueForKey(std::string(), ¬_checked));
}
TEST(JsonTest, InvalidJsonIsNotValid) {
TEST(JsonTest, OneKeyIsValid) {
Json json;
ASSERT_TRUE(json.ParseObject("{\"key\": \"value\"}"));
- ASSERT_TRUE(json.HasStringValueForKey("key"));
- EXPECT_EQ("value", json.GetStringValueForKey("key"));
+ std::string value;
+ EXPECT_TRUE(json.GetStringValueForKey("key", &value));
+ EXPECT_EQ("value", value);
}
TEST(JsonTest, EmptyStringKeyIsNotInObject) {
Json json;
ASSERT_TRUE(json.ParseObject("{\"key\": \"value\"}"));
- EXPECT_FALSE(json.HasStringValueForKey(std::string()));
+ std::string not_checked;
+ EXPECT_FALSE(json.GetStringValueForKey(std::string(), ¬_checked));
}
TEST(JsonTest, EmptyKeyIsValid) {
Json json;
ASSERT_TRUE(json.ParseObject("{\"\": \"value\"}"));
- ASSERT_TRUE(json.HasStringValueForKey(std::string()));
- EXPECT_EQ("value", json.GetStringValueForKey(std::string()));
+ std::string value;
+ EXPECT_TRUE(json.GetStringValueForKey(std::string(), &value));
+ EXPECT_EQ("value", value);
}
TEST(JsonTest, EmptyValueIsValid) {
Json json;
ASSERT_TRUE(json.ParseObject("{\"key\": \"\"}"));
- ASSERT_TRUE(json.HasStringValueForKey("key"));
- EXPECT_TRUE(json.GetStringValueForKey("key").empty());
+ std::string value;
+ EXPECT_TRUE(json.GetStringValueForKey("key", &value));
+ EXPECT_TRUE(value.empty());
}
TEST(JsonTest, Utf8EncodingIsValid) {
Json json;
- ASSERT_TRUE(json.ParseObject("{\"key\": \"Ü\"}"));
- ASSERT_TRUE(json.HasStringValueForKey("key"));
- EXPECT_EQ("Ü", json.GetStringValueForKey("key"));
+ ASSERT_TRUE(json.ParseObject("{\"key\": \"\xC3\x9C\"}")); /* "Ü" */
+ std::string value;
+ EXPECT_TRUE(json.GetStringValueForKey("key", &value));
+ EXPECT_EQ("\xC3\x9C", value); /* "Ü" */
}
TEST(JsonTest, InvalidUtf8IsNotValid) {
TEST(JsonTest, TwoKeysAreValid) {
Json json;
ASSERT_TRUE(json.ParseObject("{\"key1\": \"value1\", \"key2\": \"value2\"}"));
- ASSERT_TRUE(json.HasStringValueForKey("key1"));
- EXPECT_EQ("value1", json.GetStringValueForKey("key1"));
+ std::string value;
+ EXPECT_TRUE(json.GetStringValueForKey("key1", &value));
+ EXPECT_EQ("value1", value);
- ASSERT_TRUE(json.HasStringValueForKey("key2"));
- EXPECT_EQ("value2", json.GetStringValueForKey("key2"));
+ EXPECT_TRUE(json.GetStringValueForKey("key2", &value));
+ EXPECT_EQ("value2", value);
}
TEST(JsonTest, ListIsNotValid) {
EXPECT_FALSE(json.ParseObject("3"));
}
+TEST(JsonTest, NoDictionaryFound) {
+ Json json;
+ ASSERT_TRUE(json.ParseObject("{\"key\":\"value\"}"));
+ EXPECT_TRUE(json.GetSubDictionaries().empty());
+}
+
+TEST(JsonTest, DictionaryFound) {
+ Json json;
+ ASSERT_TRUE(json.ParseObject("{\"key\":{\"inner_key\":\"value\"}}"));
+ const std::vector<const Json*>& sub_dicts = json.GetSubDictionaries();
+ ASSERT_EQ(1U, sub_dicts.size());
+
+ std::string value;
+ EXPECT_TRUE(sub_dicts.front()->GetStringValueForKey("inner_key", &value));
+ EXPECT_EQ("value", value);
+}
+
+TEST(JsonTest, DictionariesHaveSubDictionaries) {
+ Json json;
+ ASSERT_TRUE(json.ParseObject(
+ "{\"key\":{\"inner_key\":{\"inner_inner_key\":\"value\"}}}"));
+ const std::vector<const Json*>& sub_dicts = json.GetSubDictionaries();
+ ASSERT_EQ(1U, sub_dicts.size());
+
+ const std::vector<const Json*>& sub_sub_dicts =
+ sub_dicts.front()->GetSubDictionaries();
+ ASSERT_EQ(1U, sub_sub_dicts.size());
+
+ std::string value;
+ EXPECT_TRUE(
+ sub_sub_dicts.front()->GetStringValueForKey("inner_inner_key", &value));
+ EXPECT_EQ("value", value);
+}
+
} // namespace