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 |