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

Side by Side Diff: chromecast/base/device_capabilities_impl_unittest.cc

Issue 1401993002: Refactoring DeviceCapabilities unit test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Unregister() does not remove capability. Register() does not take initial value. Created 5 years, 2 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
« no previous file with comments | « chromecast/base/device_capabilities_impl.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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chromecast/base/device_capabilities_impl.h" 5 #include "chromecast/base/device_capabilities_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chromecast/base/serializers.h" 10 #include "chromecast/base/serializers.h"
11 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace chromecast { 14 namespace chromecast {
15 15
16 namespace { 16 namespace {
17 17
18 const char kSampleDictionaryCapability[] = 18 const char kSampleDictionaryCapability[] =
19 "{" 19 "{"
20 " \"dummy_field_bool\": true," 20 " \"dummy_field_bool\": true,"
21 " \"dummy_field_int\": 99" 21 " \"dummy_field_int\": 99"
22 "}"; 22 "}";
23 23
24 // Simple capability manager that implements the Validator interface. Either 24 // Simple capability manager that implements the Validator interface. Either
25 // accepts or rejects all proposed changes based on |accept_changes| constructor 25 // accepts or rejects all proposed changes based on |accept_changes| constructor
26 // argument. 26 // argument.
27 class FakeCapabilityManagerSimple : public DeviceCapabilities::Validator { 27 class FakeCapabilityManagerSimple : public DeviceCapabilities::Validator {
28 public: 28 public:
29 // Registers itself as Validator in constructor. If init_value is not null,
30 // the capability gets initialized to that value. Else capability remains
31 // untouched.
29 FakeCapabilityManagerSimple(DeviceCapabilities* capabilities, 32 FakeCapabilityManagerSimple(DeviceCapabilities* capabilities,
30 const std::string& key, 33 const std::string& key,
34 scoped_ptr<base::Value> init_value,
31 bool accept_changes) 35 bool accept_changes)
32 : DeviceCapabilities::Validator(capabilities), 36 : DeviceCapabilities::Validator(capabilities),
33 key_(key), 37 key_(key),
34 accept_changes_(accept_changes) {} 38 accept_changes_(accept_changes) {
39 capabilities->Register(key, this);
40 if (init_value)
41 SetValidatedValue(key, init_value.Pass());
42 }
35 43
36 ~FakeCapabilityManagerSimple() override {} 44 // Unregisters itself as Validator.
45 ~FakeCapabilityManagerSimple() override {
46 capabilities()->Unregister(key_, this);
47 }
37 48
38 void Validate(const std::string& path, 49 void Validate(const std::string& path,
39 scoped_ptr<base::Value> proposed_value) override { 50 scoped_ptr<base::Value> proposed_value) override {
40 ASSERT_TRUE(path.find(key_) == 0); 51 ASSERT_TRUE(path.find(key_) == 0);
41 if (accept_changes_) 52 if (accept_changes_)
42 SetValidatedValue(path, proposed_value.Pass()); 53 SetValidatedValue(path, proposed_value.Pass());
43 } 54 }
44 55
45 private: 56 private:
46 const std::string key_; 57 const std::string key_;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 SerializeToJson(base::DictionaryValue())); 155 SerializeToJson(base::DictionaryValue()));
145 EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string); 156 EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string);
146 EXPECT_TRUE(capabilities()->GetCapabilities()->empty()); 157 EXPECT_TRUE(capabilities()->GetCapabilities()->empty());
147 } 158 }
148 159
149 // Tests Register() of a default capability. 160 // Tests Register() of a default capability.
150 TEST_F(DeviceCapabilitiesImplTest, Register) { 161 TEST_F(DeviceCapabilitiesImplTest, Register) {
151 std::string key; 162 std::string key;
152 scoped_ptr<base::Value> init_value; 163 scoped_ptr<base::Value> init_value;
153 GetSampleDefaultCapability(&key, &init_value); 164 GetSampleDefaultCapability(&key, &init_value);
154 FakeCapabilityManagerSimple manager(capabilities(), key, true);
155 165
156 EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(2); 166 EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(0);
157 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); 167 FakeCapabilityManagerSimple manager(capabilities(), key, nullptr, true);
158 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, 168
159 *init_value)); 169 EXPECT_EQ(capabilities()->GetValidator(key), &manager);
160 const base::Value* dict_value; 170 scoped_ptr<const std::string> empty_dict_string(
161 EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); 171 SerializeToJson(base::DictionaryValue()));
162 EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value)); 172 EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string);
163 capabilities()->Unregister(key, &manager); 173 const base::Value* value = nullptr;
174 EXPECT_FALSE(capabilities()->GetCapability(key, &value));
164 } 175 }
165 176
166 // Tests Unregister() of a default capability. 177 // Tests Unregister() of a default capability.
167 TEST_F(DeviceCapabilitiesImplTest, Unregister) { 178 TEST_F(DeviceCapabilitiesImplTest, Unregister) {
168 std::string key; 179 std::string key;
169 scoped_ptr<base::Value> init_value; 180 scoped_ptr<base::Value> init_value;
170 GetSampleDefaultCapability(&key, &init_value); 181 GetSampleDefaultCapability(&key, &init_value);
171 FakeCapabilityManagerSimple manager(capabilities(), key, true);
172 182
173 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); 183 EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(0);
184 FakeCapabilityManagerSimple* manager =
185 new FakeCapabilityManagerSimple(capabilities(), key, nullptr, true);
174 186
175 capabilities()->Unregister(key, &manager); 187 delete manager;
188
189 EXPECT_EQ(capabilities()->GetValidator(key), nullptr);
176 scoped_ptr<const std::string> empty_dict_string( 190 scoped_ptr<const std::string> empty_dict_string(
177 SerializeToJson(base::DictionaryValue())); 191 SerializeToJson(base::DictionaryValue()));
178 EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string); 192 EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string);
179 EXPECT_TRUE(capabilities()->GetCapabilities()->empty()); 193 const base::Value* value = nullptr;
194 EXPECT_FALSE(capabilities()->GetCapability(key, &value));
180 } 195 }
181 196
182 // Tests GetCapability() and updating the value through SetCapability(). 197 // Tests GetCapability() and updating the value through SetCapability().
183 TEST_F(DeviceCapabilitiesImplTest, GetCapabilityAndSetCapability) { 198 TEST_F(DeviceCapabilitiesImplTest, GetCapabilityAndSetCapability) {
184 std::string key; 199 std::string key;
185 scoped_ptr<base::Value> init_value; 200 scoped_ptr<base::Value> init_value;
186 GetSampleDefaultCapability(&key, &init_value); 201 GetSampleDefaultCapability(&key, &init_value);
187 FakeCapabilityManagerSimple manager(capabilities(), key, true); 202 FakeCapabilityManagerSimple manager(capabilities(), key,
188 203 init_value->CreateDeepCopy(), true);
189 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager);
190 204
191 const base::Value* value = nullptr; 205 const base::Value* value = nullptr;
192 EXPECT_TRUE(capabilities()->GetCapability(key, &value)); 206 EXPECT_TRUE(capabilities()->GetCapability(key, &value));
193 EXPECT_TRUE(base::Value::Equals(value, init_value.get())); 207 EXPECT_TRUE(base::Value::Equals(value, init_value.get()));
194 208
195 scoped_ptr<base::Value> new_value = GetSampleDefaultCapabilityNewValue(); 209 scoped_ptr<base::Value> new_value = GetSampleDefaultCapabilityNewValue();
196 capabilities()->SetCapability(key, new_value->CreateDeepCopy()); 210 capabilities()->SetCapability(key, new_value->CreateDeepCopy());
197 value = nullptr; 211 value = nullptr;
198 EXPECT_TRUE(capabilities()->GetCapability(key, &value)); 212 EXPECT_TRUE(capabilities()->GetCapability(key, &value));
199 EXPECT_TRUE(base::Value::Equals(value, new_value.get())); 213 EXPECT_TRUE(base::Value::Equals(value, new_value.get()));
200
201 capabilities()->Unregister(key, &manager);
202 value = nullptr;
203 EXPECT_FALSE(capabilities()->GetCapability(key, &value));
204 EXPECT_EQ(value, nullptr);
205 } 214 }
206 215
207 // Tests BluetoothSupported() and updating this value through SetCapability(). 216 // Tests BluetoothSupported() and updating this value through SetCapability().
208 TEST_F(DeviceCapabilitiesImplTest, BluetoothSupportedAndSetCapability) { 217 TEST_F(DeviceCapabilitiesImplTest, BluetoothSupportedAndSetCapability) {
209 FakeCapabilityManagerSimple manager( 218 FakeCapabilityManagerSimple manager(
210 capabilities(), DeviceCapabilities::kKeyBluetoothSupported, true); 219 capabilities(), DeviceCapabilities::kKeyBluetoothSupported,
211 220 make_scoped_ptr(new base::FundamentalValue(true)), true);
212 capabilities()->Register(DeviceCapabilities::kKeyBluetoothSupported,
213 make_scoped_ptr(new base::FundamentalValue(true)),
214 &manager);
215 221
216 EXPECT_TRUE(capabilities()->BluetoothSupported()); 222 EXPECT_TRUE(capabilities()->BluetoothSupported());
217 capabilities()->SetCapability( 223 capabilities()->SetCapability(
218 DeviceCapabilities::kKeyBluetoothSupported, 224 DeviceCapabilities::kKeyBluetoothSupported,
219 make_scoped_ptr(new base::FundamentalValue(false))); 225 make_scoped_ptr(new base::FundamentalValue(false)));
220 EXPECT_FALSE(capabilities()->BluetoothSupported()); 226 EXPECT_FALSE(capabilities()->BluetoothSupported());
221
222 capabilities()->Unregister(DeviceCapabilities::kKeyBluetoothSupported,
223 &manager);
224 } 227 }
225 228
226 // Tests DisplaySupported() and updating this value through SetCapability(). 229 // Tests DisplaySupported() and updating this value through SetCapability().
227 TEST_F(DeviceCapabilitiesImplTest, DisplaySupportedAndSetCapability) { 230 TEST_F(DeviceCapabilitiesImplTest, DisplaySupportedAndSetCapability) {
228 FakeCapabilityManagerSimple manager( 231 FakeCapabilityManagerSimple manager(
229 capabilities(), DeviceCapabilities::kKeyDisplaySupported, true); 232 capabilities(), DeviceCapabilities::kKeyDisplaySupported,
230 233 make_scoped_ptr(new base::FundamentalValue(true)), true);
231 capabilities()->Register(DeviceCapabilities::kKeyDisplaySupported,
232 make_scoped_ptr(new base::FundamentalValue(true)),
233 &manager);
234 234
235 EXPECT_TRUE(capabilities()->DisplaySupported()); 235 EXPECT_TRUE(capabilities()->DisplaySupported());
236 capabilities()->SetCapability( 236 capabilities()->SetCapability(
237 DeviceCapabilities::kKeyDisplaySupported, 237 DeviceCapabilities::kKeyDisplaySupported,
238 make_scoped_ptr(new base::FundamentalValue(false))); 238 make_scoped_ptr(new base::FundamentalValue(false)));
239 EXPECT_FALSE(capabilities()->DisplaySupported()); 239 EXPECT_FALSE(capabilities()->DisplaySupported());
240
241 capabilities()->Unregister(DeviceCapabilities::kKeyDisplaySupported,
242 &manager);
243 } 240 }
244 241
245 // Tests SetCapability() for a default capability when the capability's manager 242 // Tests SetCapability() for a default capability when the capability's manager
246 // rejects the proposed change. 243 // rejects the proposed change.
247 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityInvalid) { 244 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityInvalid) {
248 std::string key; 245 std::string key;
249 scoped_ptr<base::Value> init_value; 246 scoped_ptr<base::Value> init_value;
250 GetSampleDefaultCapability(&key, &init_value); 247 GetSampleDefaultCapability(&key, &init_value);
251 FakeCapabilityManagerSimple manager(capabilities(), key, false); 248 FakeCapabilityManagerSimple manager(capabilities(), key,
252 249 init_value->CreateDeepCopy(), false);
253 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager);
254 250
255 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); 251 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue());
256 252
257 const base::Value* dict_value = nullptr; 253 const base::Value* value = nullptr;
258 EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); 254 EXPECT_TRUE(capabilities()->GetCapability(key, &value));
259 EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value)); 255 EXPECT_TRUE(base::Value::Equals(init_value.get(), value));
260
261 capabilities()->Unregister(key, &manager);
262 } 256 }
263 257
264 // Test that SetCapability() updates the capabilities string correctly 258 // Test that SetCapability() updates the capabilities string correctly
265 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityUpdatesString) { 259 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityUpdatesString) {
266 std::string key; 260 std::string key;
267 scoped_ptr<base::Value> init_value; 261 scoped_ptr<base::Value> init_value;
268 GetSampleDefaultCapability(&key, &init_value); 262 GetSampleDefaultCapability(&key, &init_value);
269 FakeCapabilityManagerSimple manager(capabilities(), key, true); 263 FakeCapabilityManagerSimple manager(capabilities(), key,
270 264 init_value->CreateDeepCopy(), true);
271 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager);
272 265
273 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, 266 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key,
274 *init_value)); 267 *init_value));
275 268
276 scoped_ptr<base::Value> new_value = GetSampleDefaultCapabilityNewValue(); 269 scoped_ptr<base::Value> new_value = GetSampleDefaultCapabilityNewValue();
277 capabilities()->SetCapability(key, new_value->CreateDeepCopy()); 270 capabilities()->SetCapability(key, new_value->CreateDeepCopy());
278 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, 271 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key,
279 *new_value)); 272 *new_value));
280
281 capabilities()->Unregister(key, &manager);
282 } 273 }
283 274
284 // Test that SetCapability() notifies Observers when the capability's value 275 // Test that SetCapability() notifies Observers when the capability's value
285 // changes 276 // changes
286 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityNotifiesObservers) { 277 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityNotifiesObservers) {
287 std::string key; 278 std::string key;
288 scoped_ptr<base::Value> init_value; 279 scoped_ptr<base::Value> init_value;
289 GetSampleDefaultCapability(&key, &init_value); 280 GetSampleDefaultCapability(&key, &init_value);
290 FakeCapabilityManagerSimple manager(capabilities(), key, true);
291 281
292 EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(4); 282 EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(3);
293 283
294 capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); 284 // 1st call (register)
285 FakeCapabilityManagerSimple manager(capabilities(), key,
286 init_value->CreateDeepCopy(), true);
295 287
288 // 2nd call
296 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); 289 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue());
297 290
298 // Observer should not get called when value does not change 291 // Observer should not get called when value does not change
299 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); 292 capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue());
300 293
294 // 3rd call
301 capabilities()->SetCapability(key, init_value.Pass()); 295 capabilities()->SetCapability(key, init_value.Pass());
302
303 capabilities()->Unregister(key, &manager);
304 } 296 }
305 297
306 // Test adding dynamic capabilities 298 // Test adding dynamic capabilities
307 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDynamic) { 299 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDynamic) {
308 std::string key; 300 std::string key;
309 scoped_ptr<base::Value> init_value; 301 scoped_ptr<base::Value> init_value;
302 GetSampleDynamicCapability(&key, &init_value);
310 303
311 ASSERT_FALSE(capabilities()->GetCapabilities()->HasKey(key)); 304 const base::Value* value = nullptr;
312 305 ASSERT_FALSE(capabilities()->GetCapability(key, &value));
313 GetSampleDynamicCapability(&key, &init_value);
314 capabilities()->SetCapability(key, init_value->CreateDeepCopy()); 306 capabilities()->SetCapability(key, init_value->CreateDeepCopy());
315 307
316 const base::Value* dict_value = nullptr; 308 EXPECT_TRUE(capabilities()->GetCapability(key, &value));
317 EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); 309 EXPECT_TRUE(base::Value::Equals(init_value.get(), value));
318 EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value));
319 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, 310 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key,
320 *init_value)); 311 *init_value));
321 312
322 scoped_ptr<base::Value> new_value = GetSampleDynamicCapabilityNewValue(); 313 scoped_ptr<base::Value> new_value = GetSampleDynamicCapabilityNewValue();
323 capabilities()->SetCapability(key, new_value->CreateDeepCopy()); 314 capabilities()->SetCapability(key, new_value->CreateDeepCopy());
324 dict_value = nullptr; 315 value = nullptr;
325 EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); 316 EXPECT_TRUE(capabilities()->GetCapability(key, &value));
326 EXPECT_TRUE(base::Value::Equals(new_value.get(), dict_value)); 317 EXPECT_TRUE(base::Value::Equals(new_value.get(), value));
327 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, 318 EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key,
328 *new_value)); 319 *new_value));
329 } 320 }
330 321
331 // Tests that SetCapability() works with expanded paths when there is a 322 // Tests that SetCapability() works with expanded paths when there is a
332 // capability of type DictionaryValue. 323 // capability of type DictionaryValue.
333 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionary) { 324 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionary) {
334 std::string key("dummy_dictionary_key"); 325 std::string key("dummy_dictionary_key");
335 scoped_ptr<base::Value> init_value = 326 scoped_ptr<base::Value> init_value =
336 DeserializeFromJson(kSampleDictionaryCapability); 327 DeserializeFromJson(kSampleDictionaryCapability);
337 ASSERT_NE(init_value, nullptr); 328 ASSERT_NE(init_value, nullptr);
338 FakeCapabilityManagerSimple manager(capabilities(), key, true); 329 FakeCapabilityManagerSimple manager(capabilities(), key, init_value.Pass(),
339 330 true);
340 capabilities()->Register(key, init_value.Pass(), &manager);
341 331
342 capabilities()->SetCapability( 332 capabilities()->SetCapability(
343 "dummy_dictionary_key.dummy_field_bool", 333 "dummy_dictionary_key.dummy_field_bool",
344 make_scoped_ptr(new base::FundamentalValue(false))); 334 make_scoped_ptr(new base::FundamentalValue(false)));
345 const base::Value* dict_value = nullptr; 335 const base::Value* value = nullptr;
346 bool dict_value_bool = true; 336 bool value_bool = true;
347 EXPECT_TRUE(capabilities()->GetCapabilities()->Get( 337 EXPECT_TRUE(capabilities()->GetCapability(
348 "dummy_dictionary_key.dummy_field_bool", &dict_value)); 338 "dummy_dictionary_key.dummy_field_bool", &value));
349 EXPECT_TRUE(dict_value->GetAsBoolean(&dict_value_bool)); 339 EXPECT_TRUE(value->GetAsBoolean(&value_bool));
350 EXPECT_FALSE(dict_value_bool); 340 EXPECT_FALSE(value_bool);
351 341
352 capabilities()->SetCapability( 342 capabilities()->SetCapability(
353 "dummy_dictionary_key.dummy_field_int", 343 "dummy_dictionary_key.dummy_field_int",
354 make_scoped_ptr(new base::FundamentalValue(100))); 344 make_scoped_ptr(new base::FundamentalValue(100)));
355 dict_value = nullptr; 345 value = nullptr;
356 int dict_value_int = 0; 346 int value_int = 0;
357 EXPECT_TRUE(capabilities()->GetCapabilities()->Get( 347 EXPECT_TRUE(capabilities()->GetCapability(
358 "dummy_dictionary_key.dummy_field_int", &dict_value)); 348 "dummy_dictionary_key.dummy_field_int", &value));
359 EXPECT_TRUE(dict_value->GetAsInteger(&dict_value_int)); 349 EXPECT_TRUE(value->GetAsInteger(&value_int));
360 EXPECT_EQ(dict_value_int, 100); 350 EXPECT_EQ(value_int, 100);
361
362 capabilities()->Unregister(key, &manager);
363 } 351 }
364 352
365 // Tests that SetCapability() works with expanded paths when there is a 353 // Tests that SetCapability() works with expanded paths when there is a
366 // capability of type DictionaryValue and invalid changes are proposed. Ensures 354 // capability of type DictionaryValue and invalid changes are proposed.
367 // that the manager's ValidationCallback is getting called for expanded paths
368 // passed to SetCapability().
369 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionaryInvalid) { 355 TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionaryInvalid) {
370 std::string key("dummy_dictionary_key"); 356 std::string key("dummy_dictionary_key");
371 scoped_ptr<base::Value> init_value = 357 scoped_ptr<base::Value> init_value =
372 DeserializeFromJson(kSampleDictionaryCapability); 358 DeserializeFromJson(kSampleDictionaryCapability);
373 ASSERT_NE(init_value, nullptr); 359 ASSERT_NE(init_value, nullptr);
374 FakeCapabilityManagerSimple manager(capabilities(), key, false); 360 FakeCapabilityManagerSimple manager(capabilities(), key, init_value.Pass(),
375 361 false);
376 capabilities()->Register(key, init_value.Pass(), &manager);
377 362
378 capabilities()->SetCapability( 363 capabilities()->SetCapability(
379 "dummy_dictionary_key.dummy_field_bool", 364 "dummy_dictionary_key.dummy_field_bool",
380 make_scoped_ptr(new base::FundamentalValue(false))); 365 make_scoped_ptr(new base::FundamentalValue(false)));
381 const base::Value* dict_value = nullptr; 366 const base::Value* value = nullptr;
382 bool dict_value_bool = false; 367 bool value_bool = false;
383 EXPECT_TRUE(capabilities()->GetCapabilities()->Get( 368 EXPECT_TRUE(capabilities()->GetCapability(
384 "dummy_dictionary_key.dummy_field_bool", &dict_value)); 369 "dummy_dictionary_key.dummy_field_bool", &value));
385 EXPECT_TRUE(dict_value->GetAsBoolean(&dict_value_bool)); 370 EXPECT_TRUE(value->GetAsBoolean(&value_bool));
386 EXPECT_TRUE(dict_value_bool); 371 EXPECT_TRUE(value_bool);
387 372
388 capabilities()->SetCapability( 373 capabilities()->SetCapability(
389 "dummy_dictionary_key.dummy_field_int", 374 "dummy_dictionary_key.dummy_field_int",
390 make_scoped_ptr(new base::FundamentalValue(100))); 375 make_scoped_ptr(new base::FundamentalValue(100)));
391 dict_value = nullptr; 376 value = nullptr;
392 int dict_value_int = 0; 377 int value_int = 0;
393 EXPECT_TRUE(capabilities()->GetCapabilities()->Get( 378 EXPECT_TRUE(capabilities()->GetCapability(
394 "dummy_dictionary_key.dummy_field_int", &dict_value)); 379 "dummy_dictionary_key.dummy_field_int", &value));
395 EXPECT_TRUE(dict_value->GetAsInteger(&dict_value_int)); 380 EXPECT_TRUE(value->GetAsInteger(&value_int));
396 EXPECT_EQ(dict_value_int, 99); 381 EXPECT_EQ(value_int, 99);
397
398 capabilities()->Unregister(key, &manager);
399 } 382 }
400 383
401 // Test MergeDictionary. 384 // Test MergeDictionary.
402 TEST_F(DeviceCapabilitiesImplTest, MergeDictionary) { 385 TEST_F(DeviceCapabilitiesImplTest, MergeDictionary) {
403 scoped_ptr<base::Value> value = 386 scoped_ptr<base::Value> deserialized_value =
404 DeserializeFromJson(kSampleDictionaryCapability); 387 DeserializeFromJson(kSampleDictionaryCapability);
405 ASSERT_NE(value, nullptr); 388 ASSERT_NE(deserialized_value, nullptr);
406 base::DictionaryValue* dict_value = nullptr; 389 base::DictionaryValue* dict_value = nullptr;
407 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); 390 ASSERT_TRUE(deserialized_value->GetAsDictionary(&dict_value));
408 ASSERT_NE(dict_value, nullptr); 391 ASSERT_NE(dict_value, nullptr);
409 392
410 capabilities()->MergeDictionary(*dict_value); 393 capabilities()->MergeDictionary(*dict_value);
411 394
412 // First make sure that capabilities get created if they do not exist 395 // First make sure that capabilities get created if they do not exist
413 const base::Value* internal_value = nullptr; 396 const base::Value* value = nullptr;
414 bool dict_value_bool = false; 397 bool value_bool = false;
415 EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_bool", 398 EXPECT_TRUE(capabilities()->GetCapability("dummy_field_bool", &value));
416 &internal_value)); 399 EXPECT_TRUE(value->GetAsBoolean(&value_bool));
417 EXPECT_TRUE(internal_value->GetAsBoolean(&dict_value_bool)); 400 EXPECT_TRUE(value_bool);
418 EXPECT_TRUE(dict_value_bool);
419 401
420 internal_value = nullptr; 402 value = nullptr;
421 int dict_value_int = 0; 403 int value_int = 0;
422 EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_int", 404 EXPECT_TRUE(capabilities()->GetCapability("dummy_field_int", &value));
423 &internal_value)); 405 EXPECT_TRUE(value->GetAsInteger(&value_int));
424 EXPECT_TRUE(internal_value->GetAsInteger(&dict_value_int)); 406 EXPECT_EQ(value_int, 99);
425 EXPECT_EQ(dict_value_int, 99);
426 407
427 // Now just update one of the fields. Make sure the updated value is changed 408 // Now just update one of the fields. Make sure the updated value is changed
428 // in DeviceCapabilities and the other field remains untouched. 409 // in DeviceCapabilities and the other field remains untouched.
429 dict_value->SetInteger("dummy_field_int", 100); 410 dict_value->SetInteger("dummy_field_int", 100);
430 ASSERT_TRUE(dict_value->Remove("dummy_field_bool", nullptr)); 411 ASSERT_TRUE(dict_value->Remove("dummy_field_bool", nullptr));
431 412
432 capabilities()->MergeDictionary(*dict_value); 413 capabilities()->MergeDictionary(*dict_value);
433 414
434 internal_value = nullptr; 415 value = nullptr;
435 dict_value_bool = false; 416 value_bool = false;
436 EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_bool", 417 EXPECT_TRUE(capabilities()->GetCapability("dummy_field_bool", &value));
437 &internal_value)); 418 EXPECT_TRUE(value->GetAsBoolean(&value_bool));
438 EXPECT_TRUE(internal_value->GetAsBoolean(&dict_value_bool)); 419 EXPECT_TRUE(value_bool);
439 EXPECT_TRUE(dict_value_bool);
440 420
441 internal_value = nullptr; 421 value = nullptr;
442 EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_int", 422 EXPECT_TRUE(capabilities()->GetCapability("dummy_field_int", &value));
443 &internal_value)); 423 EXPECT_TRUE(value->GetAsInteger(&value_int));
444 EXPECT_TRUE(internal_value->GetAsInteger(&dict_value_int)); 424 EXPECT_EQ(value_int, 100);
445 EXPECT_EQ(dict_value_int, 100);
446 } 425 }
447 426
448 } // namespace chromecast 427 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/base/device_capabilities_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698