| 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 |