summaryrefslogtreecommitdiffstats
path: root/base/json/json_reader_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/json/json_reader_unittest.cc')
-rw-r--r--base/json/json_reader_unittest.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/base/json/json_reader_unittest.cc b/base/json/json_reader_unittest.cc
index 432512c..5900781 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());