| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "base/json/json_value_converter.h" | 5 #include "base/json/json_value_converter.h" | 
| 6 | 6 | 
| 7 #include <string> | 7 #include <string> | 
| 8 #include <vector> | 8 #include <vector> | 
| 9 | 9 | 
| 10 #include "base/values.h" | 10 #include "base/values.h" | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 55       "{\n" | 55       "{\n" | 
| 56       "  \"foo\": 1,\n" | 56       "  \"foo\": 1,\n" | 
| 57       "  \"bar\": \"bar\",\n" | 57       "  \"bar\": \"bar\",\n" | 
| 58       "  \"baz\": true,\n" | 58       "  \"baz\": true,\n" | 
| 59       "  \"ints\": [1, 2]" | 59       "  \"ints\": [1, 2]" | 
| 60       "}\n"; | 60       "}\n"; | 
| 61 | 61 | 
| 62   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 62   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 
| 63   SimpleMessage message; | 63   SimpleMessage message; | 
| 64   base::JSONValueConverter<SimpleMessage> converter; | 64   base::JSONValueConverter<SimpleMessage> converter; | 
| 65   converter.Convert(*value.get(), &message); | 65   EXPECT_TRUE(converter.Convert(*value.get(), &message)); | 
|  | 66 | 
| 66   EXPECT_EQ(1, message.foo); | 67   EXPECT_EQ(1, message.foo); | 
| 67   EXPECT_EQ("bar", message.bar); | 68   EXPECT_EQ("bar", message.bar); | 
| 68   EXPECT_TRUE(message.baz); | 69   EXPECT_TRUE(message.baz); | 
| 69   EXPECT_EQ(2, static_cast<int>(message.ints.size())); | 70   EXPECT_EQ(2, static_cast<int>(message.ints.size())); | 
| 70   EXPECT_EQ(1, message.ints[0]); | 71   EXPECT_EQ(1, message.ints[0]); | 
| 71   EXPECT_EQ(2, message.ints[1]); | 72   EXPECT_EQ(2, message.ints[1]); | 
| 72 } | 73 } | 
| 73 | 74 | 
| 74 TEST(JSONValueConverterTest, ParseNestedMessage) { | 75 TEST(JSONValueConverterTest, ParseNestedMessage) { | 
| 75   const char normal_data[] = | 76   const char normal_data[] = | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 88       "  {\n" | 89       "  {\n" | 
| 89       "    \"foo\": 3,\n" | 90       "    \"foo\": 3,\n" | 
| 90       "    \"bar\": \"barbaz\",\n" | 91       "    \"bar\": \"barbaz\",\n" | 
| 91       "    \"baz\": false\n" | 92       "    \"baz\": false\n" | 
| 92       "  }]\n" | 93       "  }]\n" | 
| 93       "}\n"; | 94       "}\n"; | 
| 94 | 95 | 
| 95   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 96   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 
| 96   NestedMessage message; | 97   NestedMessage message; | 
| 97   base::JSONValueConverter<NestedMessage> converter; | 98   base::JSONValueConverter<NestedMessage> converter; | 
| 98   converter.Convert(*value.get(), &message); | 99   EXPECT_TRUE(converter.Convert(*value.get(), &message)); | 
|  | 100 | 
| 99   EXPECT_EQ(1.0, message.foo); | 101   EXPECT_EQ(1.0, message.foo); | 
| 100   EXPECT_EQ(1, message.child.foo); | 102   EXPECT_EQ(1, message.child.foo); | 
| 101   EXPECT_EQ("bar", message.child.bar); | 103   EXPECT_EQ("bar", message.child.bar); | 
| 102   EXPECT_TRUE(message.child.baz); | 104   EXPECT_TRUE(message.child.baz); | 
| 103 | 105 | 
| 104   EXPECT_EQ(2, static_cast<int>(message.children.size())); | 106   EXPECT_EQ(2, static_cast<int>(message.children.size())); | 
| 105   const SimpleMessage& first_child = message.children[0]; | 107   const SimpleMessage& first_child = message.children[0]; | 
| 106   EXPECT_EQ(2, first_child.foo); | 108   EXPECT_EQ(2, first_child.foo); | 
| 107   EXPECT_EQ("foobar", first_child.bar); | 109   EXPECT_EQ("foobar", first_child.bar); | 
| 108   EXPECT_TRUE(first_child.baz); | 110   EXPECT_TRUE(first_child.baz); | 
| 109 | 111 | 
| 110   const SimpleMessage& second_child = message.children[1]; | 112   const SimpleMessage& second_child = message.children[1]; | 
| 111   EXPECT_EQ(3, second_child.foo); | 113   EXPECT_EQ(3, second_child.foo); | 
| 112   EXPECT_EQ("barbaz", second_child.bar); | 114   EXPECT_EQ("barbaz", second_child.bar); | 
| 113   EXPECT_FALSE(second_child.baz); | 115   EXPECT_FALSE(second_child.baz); | 
| 114 } | 116 } | 
| 115 | 117 | 
|  | 118 TEST(JSONValueConverterTest, ParseFailures) { | 
|  | 119   const char normal_data[] = | 
|  | 120       "{\n" | 
|  | 121       "  \"foo\": 1,\n" | 
|  | 122       "  \"bar\": 2,\n" // "bar" is an integer here. | 
|  | 123       "  \"baz\": true,\n" | 
|  | 124       "  \"ints\": [1, 2]" | 
|  | 125       "}\n"; | 
|  | 126 | 
|  | 127   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 
|  | 128   SimpleMessage message; | 
|  | 129   base::JSONValueConverter<SimpleMessage> converter; | 
|  | 130   EXPECT_FALSE(converter.Convert(*value.get(), &message)); | 
|  | 131   // Do not check the values below.  |message| may be modified during | 
|  | 132   // Convert() even it fails. | 
|  | 133 } | 
|  | 134 | 
|  | 135 TEST(JSONValueConverterTest, ParseWithMissingFields) { | 
|  | 136   const char normal_data[] = | 
|  | 137       "{\n" | 
|  | 138       "  \"foo\": 1,\n" | 
|  | 139       "  \"baz\": true,\n" | 
|  | 140       "  \"ints\": [1, 2]" | 
|  | 141       "}\n"; | 
|  | 142 | 
|  | 143   scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false)); | 
|  | 144   SimpleMessage message; | 
|  | 145   base::JSONValueConverter<SimpleMessage> converter; | 
|  | 146   // Convert() still succeeds even if the input doesn't have "bar" field. | 
|  | 147   EXPECT_TRUE(converter.Convert(*value.get(), &message)); | 
|  | 148 | 
|  | 149   EXPECT_EQ(1, message.foo); | 
|  | 150   EXPECT_TRUE(message.baz); | 
|  | 151   EXPECT_EQ(2, static_cast<int>(message.ints.size())); | 
|  | 152   EXPECT_EQ(1, message.ints[0]); | 
|  | 153   EXPECT_EQ(2, message.ints[1]); | 
|  | 154 } | 
|  | 155 | 
| 116 }  // namespace base | 156 }  // namespace base | 
| OLD | NEW | 
|---|