Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Side by Side Diff: dbus/values_util_unittest.cc

Issue 9702094: Add dbus::PopDataAsValue (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: _ Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« dbus/values_util.h ('K') | « dbus/values_util.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "dbus/values_util.h"
6
7 #include <vector>
8
9 #include "base/float_util.h"
10 #include "base/json/json_writer.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/values.h"
13 #include "dbus/message.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 TEST(ValuesUtilTest, PopBasicTypes) {
17 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
18 // Append basic type values.
19 dbus::MessageWriter writer(response.get());
20 const uint8 kByteValue = 42;
21 writer.AppendByte(kByteValue);
22 const bool kBoolValue = true;
23 writer.AppendBool(kBoolValue);
24 const int16 kInt16Value = -43;
25 writer.AppendInt16(kInt16Value);
26 const uint16 kUint16Value = 44;
27 writer.AppendUint16(kUint16Value);
28 const int32 kInt32Value = -45;
29 writer.AppendInt32(kInt32Value);
30 const uint32 kUint32Value = 46;
31 writer.AppendUint32(kUint32Value);
32 const int64 kInt64Value = -47;
33 writer.AppendInt64(kInt64Value);
34 const uint64 kUint64Value = 48;
35 writer.AppendUint64(kUint64Value);
36 const double kDoubleValue = 4.9;
37 writer.AppendDouble(kDoubleValue);
38 const std::string kStringValue = "fifty";
39 writer.AppendString(kStringValue);
40 const std::string kEmptyStringValue;
41 writer.AppendString(kEmptyStringValue);
42 const dbus::ObjectPath kObjectPathValue("ObjectPath");
43 writer.AppendObjectPath(kObjectPathValue);
44
45 dbus::MessageReader reader(response.get());
46 scoped_ptr<Value> value;
47 // Pop a byte.
48 value.reset(dbus::PopDataAsValue(&reader));
49 EXPECT_TRUE(value.get() != NULL);
50 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(kByteValue)));
51 // Pop a bool.
52 value.reset(dbus::PopDataAsValue(&reader));
53 EXPECT_TRUE(value.get() != NULL);
54 EXPECT_TRUE(value->Equals(Value::CreateBooleanValue(kBoolValue)));
55 // Pop an int16.
56 value.reset(dbus::PopDataAsValue(&reader));
57 EXPECT_TRUE(value.get() != NULL);
58 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(kInt16Value)));
59 // Pop a uint16.
60 value.reset(dbus::PopDataAsValue(&reader));
61 EXPECT_TRUE(value.get() != NULL);
62 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(kUint16Value)));
63 // Pop an int32.
64 value.reset(dbus::PopDataAsValue(&reader));
65 EXPECT_TRUE(value.get() != NULL);
66 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(kInt32Value)));
67 // Pop a uint32.
68 value.reset(dbus::PopDataAsValue(&reader));
69 EXPECT_TRUE(value.get() != NULL);
70 EXPECT_TRUE(value->Equals(Value::CreateDoubleValue(kUint32Value)));
71 // Pop an int64.
72 value.reset(dbus::PopDataAsValue(&reader));
73 EXPECT_TRUE(value.get() != NULL);
74 EXPECT_TRUE(value->Equals(Value::CreateDoubleValue(kInt64Value)));
75 // Pop a uint64.
76 value.reset(dbus::PopDataAsValue(&reader));
77 EXPECT_TRUE(value.get() != NULL);
78 EXPECT_TRUE(value->Equals(Value::CreateDoubleValue(kUint64Value)));
79 // Pop a double.
80 value.reset(dbus::PopDataAsValue(&reader));
81 EXPECT_TRUE(value.get() != NULL);
82 EXPECT_TRUE(value->Equals(Value::CreateDoubleValue(kDoubleValue)));
83 // Pop a string.
84 value.reset(dbus::PopDataAsValue(&reader));
85 EXPECT_TRUE(value.get() != NULL);
86 EXPECT_TRUE(value->Equals(Value::CreateStringValue(kStringValue)));
87 // Pop an empty string.
88 value.reset(dbus::PopDataAsValue(&reader));
89 EXPECT_TRUE(value.get() != NULL);
90 EXPECT_TRUE(value->Equals(Value::CreateStringValue(kEmptyStringValue)));
91 // Pop an object path.
92 value.reset(dbus::PopDataAsValue(&reader));
93 EXPECT_TRUE(value.get() != NULL);
94 EXPECT_TRUE(
95 value->Equals(Value::CreateStringValue(kObjectPathValue.value())));
96 }
97
98 TEST(ValuesUtilTest, PopVariant) {
99 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
100 // Append variant values.
101 dbus::MessageWriter writer(response.get());
102 const bool kBoolValue = true;
103 writer.AppendVariantOfBool(kBoolValue);
104 const int32 kInt32Value = -45;
105 writer.AppendVariantOfInt32(kInt32Value);
106 const double kDoubleValue = 4.9;
107 writer.AppendVariantOfDouble(kDoubleValue);
108 const std::string kStringValue = "fifty";
109 writer.AppendVariantOfString(kStringValue);
110
111 dbus::MessageReader reader(response.get());
112 scoped_ptr<Value> value;
113 // Pop a bool.
114 value.reset(dbus::PopDataAsValue(&reader));
115 EXPECT_TRUE(value.get() != NULL);
116 EXPECT_TRUE(value->Equals(Value::CreateBooleanValue(kBoolValue)));
117 // Pop an int32.
118 value.reset(dbus::PopDataAsValue(&reader));
119 EXPECT_TRUE(value.get() != NULL);
120 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(kInt32Value)));
121 // Pop a double.
122 value.reset(dbus::PopDataAsValue(&reader));
123 EXPECT_TRUE(value.get() != NULL);
124 EXPECT_TRUE(value->Equals(Value::CreateDoubleValue(kDoubleValue)));
125 // Pop a string.
126 value.reset(dbus::PopDataAsValue(&reader));
127 EXPECT_TRUE(value.get() != NULL);
128 EXPECT_TRUE(value->Equals(Value::CreateStringValue(kStringValue)));
129 }
130
131 TEST(ValuesUtilTest, PopIntArray) {
132 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
133 // Append an int32 array.
134 dbus::MessageWriter writer(response.get());
135 dbus::MessageWriter sub_writer(NULL);
136 std::vector<int32> data;
137 data.push_back(0);
138 data.push_back(1);
139 data.push_back(2);
140 writer.OpenArray("i", &sub_writer);
141 for (size_t i = 0; i != data.size(); ++i)
142 sub_writer.AppendInt32(data[i]);
143 writer.CloseContainer(&sub_writer);
144
145 // Create the expected value.
146 ListValue* list_value = new ListValue;
147 for (size_t i = 0; i != data.size(); ++i)
148 list_value->Append(Value::CreateIntegerValue(data[i]));
149
150 // Pop an int32 array.
151 dbus::MessageReader reader(response.get());
152 scoped_ptr<Value> value(dbus::PopDataAsValue(&reader));
153 EXPECT_TRUE(value.get() != NULL);
154 EXPECT_TRUE(value->Equals(list_value));
155 }
156
157 TEST(ValuesUtilTest, PopStringArray) {
158 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
159 // Append a string array.
160 dbus::MessageWriter writer(response.get());
161 dbus::MessageWriter sub_writer(NULL);
162 std::vector<std::string> data;
163 data.push_back("Dreamlifter");
164 data.push_back("Beluga");
165 data.push_back("Mriya");
166 writer.AppendArrayOfStrings(data);
167
168 // Create the expected value.
169 ListValue* list_value = new ListValue;
170 for (size_t i = 0; i != data.size(); ++i)
171 list_value->Append(Value::CreateStringValue(data[i]));
172
173 // Pop a string array.
174 dbus::MessageReader reader(response.get());
175 scoped_ptr<Value> value(dbus::PopDataAsValue(&reader));
176 EXPECT_TRUE(value.get() != NULL);
177 EXPECT_TRUE(value->Equals(list_value));
178 }
179
180 TEST(ValuesUtilTest, PopStruct) {
181 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
182 // Append a struct.
183 dbus::MessageWriter writer(response.get());
184 dbus::MessageWriter sub_writer(NULL);
185 writer.OpenStruct(&sub_writer);
186 const bool kBoolValue = true;
187 sub_writer.AppendBool(kBoolValue);
188 const int32 kInt32Value = -123;
189 sub_writer.AppendInt32(kInt32Value);
190 const double kDoubleValue = 1.23;
191 sub_writer.AppendDouble(kDoubleValue);
192 const std::string kStringValue = "one two three";
193 sub_writer.AppendString(kStringValue);
194 writer.CloseContainer(&sub_writer);
195
196 // Create the expected value.
197 ListValue list_value;
198 list_value.Append(Value::CreateBooleanValue(kBoolValue));
199 list_value.Append(Value::CreateIntegerValue(kInt32Value));
200 list_value.Append(Value::CreateDoubleValue(kDoubleValue));
201 list_value.Append(Value::CreateStringValue(kStringValue));
202
203 // Pop a struct.
204 dbus::MessageReader reader(response.get());
205 scoped_ptr<Value> value(dbus::PopDataAsValue(&reader));
206 EXPECT_TRUE(value.get() != NULL);
207 EXPECT_TRUE(value->Equals(&list_value));
208 }
209
210 TEST(ValuesUtilTest, PopStringToVariantDictionary) {
211 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
212 // Append a dictionary.
213 dbus::MessageWriter writer(response.get());
214 dbus::MessageWriter sub_writer(NULL);
215 dbus::MessageWriter entry_writer(NULL);
216 writer.OpenArray("{sv}", &sub_writer);
217 sub_writer.OpenDictEntry(&entry_writer);
218 const std::string kKey1 = "one";
219 entry_writer.AppendString(kKey1);
220 const bool kBoolValue = true;
221 entry_writer.AppendVariantOfBool(kBoolValue);
222 sub_writer.CloseContainer(&entry_writer);
223 sub_writer.OpenDictEntry(&entry_writer);
224 const std::string kKey2 = "two";
225 entry_writer.AppendString(kKey2);
226 const int32 kInt32Value = -45;
227 entry_writer.AppendVariantOfInt32(kInt32Value);
228 sub_writer.CloseContainer(&entry_writer);
229 sub_writer.OpenDictEntry(&entry_writer);
230 const std::string kKey3 = "three";
231 entry_writer.AppendString(kKey3);
232 const double kDoubleValue = 4.9;
233 entry_writer.AppendVariantOfDouble(kDoubleValue);
234 sub_writer.CloseContainer(&entry_writer);
235 sub_writer.OpenDictEntry(&entry_writer);
236 const std::string kKey4 = "four";
237 entry_writer.AppendString(kKey4);
238 const std::string kStringValue = "fifty";
239 entry_writer.AppendVariantOfString(kStringValue);
240 sub_writer.CloseContainer(&entry_writer);
241 writer.CloseContainer(&sub_writer);
242
243 // Create the expected value.
244 DictionaryValue dictionary_value;
245 dictionary_value.SetBoolean(kKey1, kBoolValue);
246 dictionary_value.SetInteger(kKey2, kInt32Value);
247 dictionary_value.SetDouble(kKey3, kDoubleValue);
248 dictionary_value.SetString(kKey4, kStringValue);
249
250 // Pop a dictinoary.
251 dbus::MessageReader reader(response.get());
252 scoped_ptr<Value> value(dbus::PopDataAsValue(&reader));
253 EXPECT_TRUE(value.get() != NULL);
254 EXPECT_TRUE(value->Equals(&dictionary_value));
255 }
256
257 TEST(ValuesUtilTest, PopDoubleToIntDictionary) {
258 // Create test data.
259 static const int32 kValues[] = {0, 1, 1, 2, 3, 5, 8, 13, 21};
260 static const int length = arraysize(kValues);
261 double keys[length];
262 for (size_t i = 0; i != length; ++i)
263 keys[i] = sqrt(kValues[i]);
264
265 // Append a dictionary.
266 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
267 dbus::MessageWriter writer(response.get());
268 dbus::MessageWriter sub_writer(NULL);
269 writer.OpenArray("{di}", &sub_writer);
270 for (size_t i = 0; i != length; ++i) {
271 dbus::MessageWriter entry_writer(NULL);
272 sub_writer.OpenDictEntry(&entry_writer);
273 entry_writer.AppendDouble(keys[i]);
274 entry_writer.AppendInt32(kValues[i]);
275 sub_writer.CloseContainer(&entry_writer);
276 }
277 writer.CloseContainer(&sub_writer);
278
279 // Create the expected value.
280 DictionaryValue dictionary_value;
281 for (size_t i = 0; i != length; ++i) {
282 scoped_ptr<Value> key_value(Value::CreateDoubleValue(keys[i]));
283 std::string key_string;
284 const bool kPrettyPrint = false;
285 base::JSONWriter::Write(key_value.get(), kPrettyPrint, &key_string);
286 dictionary_value.SetInteger(key_string, kValues[i]);
287 }
288
289 // Pop a dictionary.
290 dbus::MessageReader reader(response.get());
291 scoped_ptr<Value> value(dbus::PopDataAsValue(&reader));
292 EXPECT_TRUE(value.get() != NULL);
293 EXPECT_TRUE(value->Equals(&dictionary_value));
294 }
OLDNEW
« dbus/values_util.h ('K') | « dbus/values_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698