Index: chromecast/base/device_capabilities_impl_unittest.cc |
diff --git a/chromecast/base/device_capabilities_impl_unittest.cc b/chromecast/base/device_capabilities_impl_unittest.cc |
index f83f62ce633aa8ef8b75c89b0dd8c5dc511f362c..eab7a9ec19337d6dec30d52cc8e0f10af618fa43 100644 |
--- a/chromecast/base/device_capabilities_impl_unittest.cc |
+++ b/chromecast/base/device_capabilities_impl_unittest.cc |
@@ -26,14 +26,25 @@ const char kSampleDictionaryCapability[] = |
// argument. |
class FakeCapabilityManagerSimple : public DeviceCapabilities::Validator { |
public: |
+ // Registers itself as Validator in constructor. If init_value is not null, |
+ // the capability gets initialized to that value. Else capability remains |
+ // untouched. |
FakeCapabilityManagerSimple(DeviceCapabilities* capabilities, |
const std::string& key, |
+ scoped_ptr<base::Value> init_value, |
bool accept_changes) |
: DeviceCapabilities::Validator(capabilities), |
key_(key), |
- accept_changes_(accept_changes) {} |
+ accept_changes_(accept_changes) { |
+ capabilities->Register(key, this); |
+ if (init_value) |
+ SetValidatedValue(key, init_value.Pass()); |
+ } |
- ~FakeCapabilityManagerSimple() override {} |
+ // Unregisters itself as Validator. |
+ ~FakeCapabilityManagerSimple() override { |
+ capabilities()->Unregister(key_, this); |
+ } |
void Validate(const std::string& path, |
scoped_ptr<base::Value> proposed_value) override { |
@@ -151,16 +162,16 @@ TEST_F(DeviceCapabilitiesImplTest, Register) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(2); |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
- EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, |
- *init_value)); |
- const base::Value* dict_value; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); |
- EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value)); |
- capabilities()->Unregister(key, &manager); |
+ EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(0); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, nullptr, true); |
+ |
+ EXPECT_EQ(capabilities()->GetValidator(key), &manager); |
+ scoped_ptr<const std::string> empty_dict_string( |
+ SerializeToJson(base::DictionaryValue())); |
+ EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string); |
+ const base::Value* value = nullptr; |
+ EXPECT_FALSE(capabilities()->GetCapability(key, &value)); |
} |
// Tests Unregister() of a default capability. |
@@ -168,15 +179,19 @@ TEST_F(DeviceCapabilitiesImplTest, Unregister) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
+ EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(0); |
+ FakeCapabilityManagerSimple* manager = |
+ new FakeCapabilityManagerSimple(capabilities(), key, nullptr, true); |
+ |
+ delete manager; |
- capabilities()->Unregister(key, &manager); |
+ EXPECT_EQ(capabilities()->GetValidator(key), nullptr); |
scoped_ptr<const std::string> empty_dict_string( |
SerializeToJson(base::DictionaryValue())); |
EXPECT_EQ(capabilities()->GetCapabilitiesString(), *empty_dict_string); |
- EXPECT_TRUE(capabilities()->GetCapabilities()->empty()); |
+ const base::Value* value = nullptr; |
+ EXPECT_FALSE(capabilities()->GetCapability(key, &value)); |
} |
// Tests GetCapability() and updating the value through SetCapability(). |
@@ -184,9 +199,8 @@ TEST_F(DeviceCapabilitiesImplTest, GetCapabilityAndSetCapability) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, |
+ init_value->CreateDeepCopy(), true); |
const base::Value* value = nullptr; |
EXPECT_TRUE(capabilities()->GetCapability(key, &value)); |
@@ -197,49 +211,32 @@ TEST_F(DeviceCapabilitiesImplTest, GetCapabilityAndSetCapability) { |
value = nullptr; |
EXPECT_TRUE(capabilities()->GetCapability(key, &value)); |
EXPECT_TRUE(base::Value::Equals(value, new_value.get())); |
- |
- capabilities()->Unregister(key, &manager); |
- value = nullptr; |
- EXPECT_FALSE(capabilities()->GetCapability(key, &value)); |
- EXPECT_EQ(value, nullptr); |
} |
// Tests BluetoothSupported() and updating this value through SetCapability(). |
TEST_F(DeviceCapabilitiesImplTest, BluetoothSupportedAndSetCapability) { |
FakeCapabilityManagerSimple manager( |
- capabilities(), DeviceCapabilities::kKeyBluetoothSupported, true); |
- |
- capabilities()->Register(DeviceCapabilities::kKeyBluetoothSupported, |
- make_scoped_ptr(new base::FundamentalValue(true)), |
- &manager); |
+ capabilities(), DeviceCapabilities::kKeyBluetoothSupported, |
+ make_scoped_ptr(new base::FundamentalValue(true)), true); |
EXPECT_TRUE(capabilities()->BluetoothSupported()); |
capabilities()->SetCapability( |
DeviceCapabilities::kKeyBluetoothSupported, |
make_scoped_ptr(new base::FundamentalValue(false))); |
EXPECT_FALSE(capabilities()->BluetoothSupported()); |
- |
- capabilities()->Unregister(DeviceCapabilities::kKeyBluetoothSupported, |
- &manager); |
} |
// Tests DisplaySupported() and updating this value through SetCapability(). |
TEST_F(DeviceCapabilitiesImplTest, DisplaySupportedAndSetCapability) { |
FakeCapabilityManagerSimple manager( |
- capabilities(), DeviceCapabilities::kKeyDisplaySupported, true); |
- |
- capabilities()->Register(DeviceCapabilities::kKeyDisplaySupported, |
- make_scoped_ptr(new base::FundamentalValue(true)), |
- &manager); |
+ capabilities(), DeviceCapabilities::kKeyDisplaySupported, |
+ make_scoped_ptr(new base::FundamentalValue(true)), true); |
EXPECT_TRUE(capabilities()->DisplaySupported()); |
capabilities()->SetCapability( |
DeviceCapabilities::kKeyDisplaySupported, |
make_scoped_ptr(new base::FundamentalValue(false))); |
EXPECT_FALSE(capabilities()->DisplaySupported()); |
- |
- capabilities()->Unregister(DeviceCapabilities::kKeyDisplaySupported, |
- &manager); |
} |
// Tests SetCapability() for a default capability when the capability's manager |
@@ -248,17 +245,14 @@ TEST_F(DeviceCapabilitiesImplTest, SetCapabilityInvalid) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, false); |
- |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, |
+ init_value->CreateDeepCopy(), false); |
capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); |
- const base::Value* dict_value = nullptr; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); |
- EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value)); |
- |
- capabilities()->Unregister(key, &manager); |
+ const base::Value* value = nullptr; |
+ EXPECT_TRUE(capabilities()->GetCapability(key, &value)); |
+ EXPECT_TRUE(base::Value::Equals(init_value.get(), value)); |
} |
// Test that SetCapability() updates the capabilities string correctly |
@@ -266,9 +260,8 @@ TEST_F(DeviceCapabilitiesImplTest, SetCapabilityUpdatesString) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, |
+ init_value->CreateDeepCopy(), true); |
EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, |
*init_value)); |
@@ -277,8 +270,6 @@ TEST_F(DeviceCapabilitiesImplTest, SetCapabilityUpdatesString) { |
capabilities()->SetCapability(key, new_value->CreateDeepCopy()); |
EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, |
*new_value)); |
- |
- capabilities()->Unregister(key, &manager); |
} |
// Test that SetCapability() notifies Observers when the capability's value |
@@ -287,43 +278,43 @@ TEST_F(DeviceCapabilitiesImplTest, SetCapabilityNotifiesObservers) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
GetSampleDefaultCapability(&key, &init_value); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(4); |
+ EXPECT_CALL(*capabilities_observer(), OnCapabilitiesChanged(key)).Times(3); |
- capabilities()->Register(key, init_value->CreateDeepCopy(), &manager); |
+ // 1st call (register) |
+ FakeCapabilityManagerSimple manager(capabilities(), key, |
+ init_value->CreateDeepCopy(), true); |
+ // 2nd call |
capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); |
// Observer should not get called when value does not change |
capabilities()->SetCapability(key, GetSampleDefaultCapabilityNewValue()); |
+ // 3rd call |
capabilities()->SetCapability(key, init_value.Pass()); |
- |
- capabilities()->Unregister(key, &manager); |
} |
// Test adding dynamic capabilities |
TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDynamic) { |
std::string key; |
scoped_ptr<base::Value> init_value; |
- |
- ASSERT_FALSE(capabilities()->GetCapabilities()->HasKey(key)); |
- |
GetSampleDynamicCapability(&key, &init_value); |
+ |
+ const base::Value* value = nullptr; |
+ ASSERT_FALSE(capabilities()->GetCapability(key, &value)); |
capabilities()->SetCapability(key, init_value->CreateDeepCopy()); |
- const base::Value* dict_value = nullptr; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); |
- EXPECT_TRUE(base::Value::Equals(init_value.get(), dict_value)); |
+ EXPECT_TRUE(capabilities()->GetCapability(key, &value)); |
+ EXPECT_TRUE(base::Value::Equals(init_value.get(), value)); |
EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, |
*init_value)); |
scoped_ptr<base::Value> new_value = GetSampleDynamicCapabilityNewValue(); |
capabilities()->SetCapability(key, new_value->CreateDeepCopy()); |
- dict_value = nullptr; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get(key, &dict_value)); |
- EXPECT_TRUE(base::Value::Equals(new_value.get(), dict_value)); |
+ value = nullptr; |
+ EXPECT_TRUE(capabilities()->GetCapability(key, &value)); |
+ EXPECT_TRUE(base::Value::Equals(new_value.get(), value)); |
EXPECT_TRUE(JsonStringEquals(capabilities()->GetCapabilitiesString(), key, |
*new_value)); |
} |
@@ -335,94 +326,84 @@ TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionary) { |
scoped_ptr<base::Value> init_value = |
DeserializeFromJson(kSampleDictionaryCapability); |
ASSERT_NE(init_value, nullptr); |
- FakeCapabilityManagerSimple manager(capabilities(), key, true); |
- |
- capabilities()->Register(key, init_value.Pass(), &manager); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, init_value.Pass(), |
+ true); |
capabilities()->SetCapability( |
"dummy_dictionary_key.dummy_field_bool", |
make_scoped_ptr(new base::FundamentalValue(false))); |
- const base::Value* dict_value = nullptr; |
- bool dict_value_bool = true; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get( |
- "dummy_dictionary_key.dummy_field_bool", &dict_value)); |
- EXPECT_TRUE(dict_value->GetAsBoolean(&dict_value_bool)); |
- EXPECT_FALSE(dict_value_bool); |
+ const base::Value* value = nullptr; |
+ bool value_bool = true; |
+ EXPECT_TRUE(capabilities()->GetCapability( |
+ "dummy_dictionary_key.dummy_field_bool", &value)); |
+ EXPECT_TRUE(value->GetAsBoolean(&value_bool)); |
+ EXPECT_FALSE(value_bool); |
capabilities()->SetCapability( |
"dummy_dictionary_key.dummy_field_int", |
make_scoped_ptr(new base::FundamentalValue(100))); |
- dict_value = nullptr; |
- int dict_value_int = 0; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get( |
- "dummy_dictionary_key.dummy_field_int", &dict_value)); |
- EXPECT_TRUE(dict_value->GetAsInteger(&dict_value_int)); |
- EXPECT_EQ(dict_value_int, 100); |
- |
- capabilities()->Unregister(key, &manager); |
+ value = nullptr; |
+ int value_int = 0; |
+ EXPECT_TRUE(capabilities()->GetCapability( |
+ "dummy_dictionary_key.dummy_field_int", &value)); |
+ EXPECT_TRUE(value->GetAsInteger(&value_int)); |
+ EXPECT_EQ(value_int, 100); |
} |
// Tests that SetCapability() works with expanded paths when there is a |
-// capability of type DictionaryValue and invalid changes are proposed. Ensures |
-// that the manager's ValidationCallback is getting called for expanded paths |
-// passed to SetCapability(). |
+// capability of type DictionaryValue and invalid changes are proposed. |
TEST_F(DeviceCapabilitiesImplTest, SetCapabilityDictionaryInvalid) { |
std::string key("dummy_dictionary_key"); |
scoped_ptr<base::Value> init_value = |
DeserializeFromJson(kSampleDictionaryCapability); |
ASSERT_NE(init_value, nullptr); |
- FakeCapabilityManagerSimple manager(capabilities(), key, false); |
- |
- capabilities()->Register(key, init_value.Pass(), &manager); |
+ FakeCapabilityManagerSimple manager(capabilities(), key, init_value.Pass(), |
+ false); |
capabilities()->SetCapability( |
"dummy_dictionary_key.dummy_field_bool", |
make_scoped_ptr(new base::FundamentalValue(false))); |
- const base::Value* dict_value = nullptr; |
- bool dict_value_bool = false; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get( |
- "dummy_dictionary_key.dummy_field_bool", &dict_value)); |
- EXPECT_TRUE(dict_value->GetAsBoolean(&dict_value_bool)); |
- EXPECT_TRUE(dict_value_bool); |
+ const base::Value* value = nullptr; |
+ bool value_bool = false; |
+ EXPECT_TRUE(capabilities()->GetCapability( |
+ "dummy_dictionary_key.dummy_field_bool", &value)); |
+ EXPECT_TRUE(value->GetAsBoolean(&value_bool)); |
+ EXPECT_TRUE(value_bool); |
capabilities()->SetCapability( |
"dummy_dictionary_key.dummy_field_int", |
make_scoped_ptr(new base::FundamentalValue(100))); |
- dict_value = nullptr; |
- int dict_value_int = 0; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get( |
- "dummy_dictionary_key.dummy_field_int", &dict_value)); |
- EXPECT_TRUE(dict_value->GetAsInteger(&dict_value_int)); |
- EXPECT_EQ(dict_value_int, 99); |
- |
- capabilities()->Unregister(key, &manager); |
+ value = nullptr; |
+ int value_int = 0; |
+ EXPECT_TRUE(capabilities()->GetCapability( |
+ "dummy_dictionary_key.dummy_field_int", &value)); |
+ EXPECT_TRUE(value->GetAsInteger(&value_int)); |
+ EXPECT_EQ(value_int, 99); |
} |
// Test MergeDictionary. |
TEST_F(DeviceCapabilitiesImplTest, MergeDictionary) { |
- scoped_ptr<base::Value> value = |
+ scoped_ptr<base::Value> deserialized_value = |
DeserializeFromJson(kSampleDictionaryCapability); |
- ASSERT_NE(value, nullptr); |
+ ASSERT_NE(deserialized_value, nullptr); |
base::DictionaryValue* dict_value = nullptr; |
- ASSERT_TRUE(value->GetAsDictionary(&dict_value)); |
+ ASSERT_TRUE(deserialized_value->GetAsDictionary(&dict_value)); |
ASSERT_NE(dict_value, nullptr); |
capabilities()->MergeDictionary(*dict_value); |
// First make sure that capabilities get created if they do not exist |
- const base::Value* internal_value = nullptr; |
- bool dict_value_bool = false; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_bool", |
- &internal_value)); |
- EXPECT_TRUE(internal_value->GetAsBoolean(&dict_value_bool)); |
- EXPECT_TRUE(dict_value_bool); |
- |
- internal_value = nullptr; |
- int dict_value_int = 0; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_int", |
- &internal_value)); |
- EXPECT_TRUE(internal_value->GetAsInteger(&dict_value_int)); |
- EXPECT_EQ(dict_value_int, 99); |
+ const base::Value* value = nullptr; |
+ bool value_bool = false; |
+ EXPECT_TRUE(capabilities()->GetCapability("dummy_field_bool", &value)); |
+ EXPECT_TRUE(value->GetAsBoolean(&value_bool)); |
+ EXPECT_TRUE(value_bool); |
+ |
+ value = nullptr; |
+ int value_int = 0; |
+ EXPECT_TRUE(capabilities()->GetCapability("dummy_field_int", &value)); |
+ EXPECT_TRUE(value->GetAsInteger(&value_int)); |
+ EXPECT_EQ(value_int, 99); |
// Now just update one of the fields. Make sure the updated value is changed |
// in DeviceCapabilities and the other field remains untouched. |
@@ -431,18 +412,16 @@ TEST_F(DeviceCapabilitiesImplTest, MergeDictionary) { |
capabilities()->MergeDictionary(*dict_value); |
- internal_value = nullptr; |
- dict_value_bool = false; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_bool", |
- &internal_value)); |
- EXPECT_TRUE(internal_value->GetAsBoolean(&dict_value_bool)); |
- EXPECT_TRUE(dict_value_bool); |
- |
- internal_value = nullptr; |
- EXPECT_TRUE(capabilities()->GetCapabilities()->Get("dummy_field_int", |
- &internal_value)); |
- EXPECT_TRUE(internal_value->GetAsInteger(&dict_value_int)); |
- EXPECT_EQ(dict_value_int, 100); |
+ value = nullptr; |
+ value_bool = false; |
+ EXPECT_TRUE(capabilities()->GetCapability("dummy_field_bool", &value)); |
+ EXPECT_TRUE(value->GetAsBoolean(&value_bool)); |
+ EXPECT_TRUE(value_bool); |
+ |
+ value = nullptr; |
+ EXPECT_TRUE(capabilities()->GetCapability("dummy_field_int", &value)); |
+ EXPECT_TRUE(value->GetAsInteger(&value_int)); |
+ EXPECT_EQ(value_int, 100); |
} |
} // namespace chromecast |