diff options
author | Rouslan Solomakhin <rouslan@chromium.org> | 2014-07-10 17:58:38 +0000 |
---|---|---|
committer | Fredrik Roubert <roubert@google.com> | 2014-09-01 19:20:49 +0200 |
commit | bc335343da0b0364f5245ae270ffdc493e818322 (patch) | |
tree | 4007c37bc6732f422ac45c4b34e2cdf1521a7708 /cpp/test/util/json_test.cc | |
parent | 769091c77a33efa2b26bd6b0a143e9400ba59617 (diff) | |
download | src-bc335343da0b0364f5245ae270ffdc493e818322.tar.gz |
Avoid string copying in json.cc.
The following two methods:
bool Json::HasStringValueForKey(const std::string& key) const;
std::string Json::GetStringValueForKey(const std::string& key) const;
have been replaced with a single method:
bool Json::GetStringValueForKey(const std::string& key,
std::string* value) const;
to avoid copying possibly large strings.
BUG=8
R=roubert@google.com
Review URL: https://codereview.appspot.com/112940044
Diffstat (limited to 'cpp/test/util/json_test.cc')
-rw-r--r-- | cpp/test/util/json_test.cc | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/cpp/test/util/json_test.cc b/cpp/test/util/json_test.cc index f6eb389..a3b9f80 100644 --- a/cpp/test/util/json_test.cc +++ b/cpp/test/util/json_test.cc @@ -32,8 +32,9 @@ TEST(JsonTest, EmptyStringIsNotValid) { 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) { @@ -44,35 +45,40 @@ 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")); + std::string value; + EXPECT_TRUE(json.GetStringValueForKey("key", &value)); + EXPECT_EQ("Ü", value); } TEST(JsonTest, InvalidUtf8IsNotValid) { @@ -89,11 +95,12 @@ TEST(JsonTest, NullInMiddleIsNotValid) { 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) { @@ -122,8 +129,9 @@ TEST(JsonTest, DictionaryFound) { ASSERT_TRUE(json.ParseObject("{\"key\":{\"inner_key\":\"value\"}}")); ASSERT_TRUE(json.HasDictionaryValueForKey("key")); const Json& sub_json = json.GetDictionaryValueForKey("key"); - ASSERT_TRUE(sub_json.HasStringValueForKey("inner_key")); - EXPECT_EQ("value", sub_json.GetStringValueForKey("inner_key")); + std::string value; + EXPECT_TRUE(sub_json.GetStringValueForKey("inner_key", &value)); + EXPECT_EQ("value", value); } TEST(JsonTest, DictionariesHaveKeys) { |