Index: base/json/json_reader_unittest.cc |
diff --git a/base/json/json_reader_unittest.cc b/base/json/json_reader_unittest.cc |
index 432512cf5f14159330f463b6a4a29c7d5729c4cb..5900781b9fb32657e060eebde04bfe6a74b6d714 100644 |
--- a/base/json/json_reader_unittest.cc |
+++ b/base/json/json_reader_unittest.cc |
@@ -457,6 +457,38 @@ TEST(JSONReaderTest, Reading) { |
false, false)); |
EXPECT_FALSE(root.get()); |
+ // Test utf16 encoded strings. |
+ root.reset(JSONReader().JsonToValue("\"\\u20ac3,14\"", false, false)); |
+ ASSERT_TRUE(root.get()); |
+ EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
+ str_val.clear(); |
+ EXPECT_TRUE(root->GetAsString(&str_val)); |
+ EXPECT_EQ("\xe2\x82\xac""3,14", str_val); |
+ |
+ root.reset(JSONReader().JsonToValue("\"\\ud83d\\udca9\\ud83d\\udc6c\"", |
+ false, false)); |
+ ASSERT_TRUE(root.get()); |
+ EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
+ str_val.clear(); |
+ EXPECT_TRUE(root->GetAsString(&str_val)); |
+ EXPECT_EQ("\xf0\x9f\x92\xa9\xf0\x9f\x91\xac", str_val); |
+ |
+ // Test invalid utf16 strings. |
+ const char* cases[] = { |
+ "\"\\u123\"", // Invalid scalar. |
+ "\"\\ud83d\"", // Invalid scalar. |
+ "\"\\u$%@!\"", // Invalid scalar. |
+ "\"\\uzz89\"", // Invalid scalar. |
+ "\"\\ud83d\\udca\"", // Invalid lower surrogate. |
+ "\"\\ud83d\\ud83d\"", // Invalid lower surrogate. |
+ "\"\\ud83foo\"", // No lower surrogate. |
+ "\"\\ud83\\foo\"" // No lower surrogate. |
+ }; |
+ for (size_t i = 0; i < arraysize(cases); ++i) { |
+ root.reset(JSONReader().JsonToValue(cases[i], false, false)); |
+ EXPECT_FALSE(root.get()) << cases[i]; |
+ } |
+ |
// Test invalid root objects. |
root.reset(JSONReader::Read("null", false)); |
EXPECT_FALSE(root.get()); |