OLD | NEW |
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 Loading... |
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 |
OLD | NEW |