Index: chrome/browser/extensions/extension_sync_data_unittest.cc |
diff --git a/chrome/browser/extensions/extension_sync_data_unittest.cc b/chrome/browser/extensions/extension_sync_data_unittest.cc |
index 46b35493c1546fe4a4bb908dfda63496111ace5d..bd4e9ee11330c3f7f40c36121033a6f3fa021dfe 100644 |
--- a/chrome/browser/extensions/extension_sync_data_unittest.cc |
+++ b/chrome/browser/extensions/extension_sync_data_unittest.cc |
@@ -12,6 +12,8 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "url/gurl.h" |
+namespace extensions { |
+ |
namespace { |
const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop"; |
@@ -20,59 +22,115 @@ const char kValidUpdateUrl[] = |
"https://clients2.google.com/service/update2/crx"; |
const char kName[] = "MyExtension"; |
+// Serializes a protobuf structure (entity specifics) into an ExtensionSyncData |
+// and back again, and confirms that the input is the same as the output. |
+void ProtobufToSyncDataEqual(const sync_pb::EntitySpecifics& entity) { |
+ syncer::SyncData sync_data = |
+ syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); |
+ ExtensionSyncData extension_sync_data(sync_data); |
+ syncer::SyncData output_sync_data = extension_sync_data.GetSyncData(); |
+ const sync_pb::ExtensionSpecifics& output = |
+ output_sync_data.GetSpecifics().extension(); |
+ const sync_pb::ExtensionSpecifics& input = entity.extension(); |
+ |
+ // Check for field-by-field quality. It'd be nice if we could use |
+ // AssertionResults here (instead of EXPECT_EQ) so that we could get valid |
+ // line numbers, but it's not worth the ugliness of the verbose comparison. |
+ EXPECT_EQ(input.id(), output.id()); |
+ EXPECT_EQ(input.name(), output.name()); |
+ EXPECT_EQ(input.version(), output.version()); |
+ EXPECT_EQ(input.update_url(), output.update_url()); |
+ EXPECT_EQ(input.enabled(), output.enabled()); |
+ EXPECT_EQ(input.incognito_enabled(), output.incognito_enabled()); |
+ EXPECT_EQ(input.remote_install(), output.remote_install()); |
+ EXPECT_EQ(input.installed_by_custodian(), output.installed_by_custodian()); |
+ EXPECT_EQ(input.has_all_urls_enabled(), output.has_all_urls_enabled()); |
+ if (input.has_all_urls_enabled()) |
+ EXPECT_EQ(input.all_urls_enabled(), output.all_urls_enabled()); |
+} |
+ |
+// Serializes an ExtensionSyncData into a protobuf structure and back again, and |
+// confirms that the input is the same as the output. |
+void SyncDataToProtobufEqual(const ExtensionSyncData& input) { |
+ syncer::SyncData sync_data = input.GetSyncData(); |
+ ExtensionSyncData output(sync_data); |
+ |
+ EXPECT_EQ(input.id(), output.id()); |
+ EXPECT_EQ(input.uninstalled(), output.uninstalled()); |
+ EXPECT_EQ(input.enabled(), output.enabled()); |
+ EXPECT_EQ(input.incognito_enabled(), output.incognito_enabled()); |
+ EXPECT_EQ(input.remote_install(), output.remote_install()); |
+ EXPECT_EQ(input.installed_by_custodian(), output.installed_by_custodian()); |
+ EXPECT_EQ(input.all_urls_enabled(), output.all_urls_enabled()); |
+ EXPECT_TRUE(input.version().Equals(output.version())); |
+ EXPECT_EQ(input.update_url(), output.update_url()); |
+ EXPECT_EQ(input.name(), output.name()); |
+} |
+ |
+} // namespace |
+ |
class ExtensionSyncDataTest : public testing::Test { |
}; |
-TEST_F(ExtensionSyncDataTest, SyncDataToExtensionSyncDataForExtension) { |
+// Tests the conversion process from a protobuf to an ExtensionSyncData and vice |
+// versa. |
+TEST_F(ExtensionSyncDataTest, ExtensionSyncDataForExtension) { |
sync_pb::EntitySpecifics entity; |
sync_pb::ExtensionSpecifics* extension_specifics = entity.mutable_extension(); |
extension_specifics->set_id(kValidId); |
extension_specifics->set_update_url(kValidUpdateUrl); |
extension_specifics->set_enabled(false); |
extension_specifics->set_incognito_enabled(true); |
+ extension_specifics->set_remote_install(false); |
+ extension_specifics->set_installed_by_custodian(false); |
+ extension_specifics->set_all_urls_enabled(true); |
extension_specifics->set_version(kVersion); |
extension_specifics->set_name(kName); |
- syncer::SyncData sync_data = |
- syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); |
- extensions::ExtensionSyncData extension_sync_data(sync_data); |
- EXPECT_EQ(extension_specifics->id(), extension_sync_data.id()); |
- EXPECT_EQ(extension_specifics->version(), |
- extension_sync_data.version().GetString()); |
- EXPECT_EQ(extension_specifics->update_url(), |
- extension_sync_data.update_url().spec()); |
- EXPECT_EQ(extension_specifics->enabled(), extension_sync_data.enabled()); |
- EXPECT_EQ(extension_specifics->incognito_enabled(), |
- extension_sync_data.incognito_enabled()); |
- EXPECT_EQ(extension_specifics->name(), extension_sync_data.name()); |
- EXPECT_FALSE(extension_sync_data.uninstalled()); |
-} |
+ // Check the serialize-deserialize process for proto to ExtensionSyncData. |
+ ProtobufToSyncDataEqual(entity); |
-TEST_F(ExtensionSyncDataTest, ExtensionSyncDataToSyncDataForExtension) { |
- sync_pb::EntitySpecifics entity; |
- sync_pb::ExtensionSpecifics* input_extension = entity.mutable_extension(); |
- input_extension->set_id(kValidId); |
- input_extension->set_update_url(kValidUpdateUrl); |
- input_extension->set_enabled(true); |
- input_extension->set_incognito_enabled(false); |
- input_extension->set_version(kVersion); |
- input_extension->set_name(kName); |
- syncer::SyncData sync_data = |
- syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity); |
- extensions::ExtensionSyncData extension_sync_data(sync_data); |
+ // Explicitly test that conversion to an ExtensionSyncData gets the correct |
+ // result (otherwise we just know that conversion to/from a proto gives us |
+ // the same result, but don't know that it's right). |
+ ExtensionSyncData extension_sync_data; |
+ extension_sync_data.PopulateFromExtensionSpecifics(*extension_specifics); |
+ EXPECT_EQ(kValidId, extension_sync_data.id()); |
+ EXPECT_EQ(GURL(kValidUpdateUrl), extension_sync_data.update_url()); |
+ EXPECT_EQ(false, extension_sync_data.enabled()); |
+ EXPECT_EQ(true, extension_sync_data.incognito_enabled()); |
+ EXPECT_EQ(false, extension_sync_data.remote_install()); |
+ EXPECT_EQ(ExtensionSyncData::BOOLEAN_TRUE, |
+ extension_sync_data.all_urls_enabled()); |
+ EXPECT_TRUE(Version(kVersion).Equals(extension_sync_data.version())); |
+ EXPECT_EQ(std::string(kName), extension_sync_data.name()); |
- syncer::SyncData output_sync_data = extension_sync_data.GetSyncData(); |
- const sync_pb::ExtensionSpecifics& output_specifics = |
- output_sync_data.GetSpecifics().extension(); |
- EXPECT_EQ(extension_sync_data.id(), output_specifics.id()); |
- EXPECT_EQ(extension_sync_data.update_url().spec(), |
- output_specifics.update_url()); |
- EXPECT_EQ(extension_sync_data.enabled(), output_specifics.enabled()); |
- EXPECT_EQ(extension_sync_data.incognito_enabled(), |
- output_specifics.incognito_enabled()); |
- EXPECT_EQ(extension_sync_data.version().GetString(), |
- output_specifics.version()); |
- EXPECT_EQ(extension_sync_data.name(), output_specifics.name()); |
+ // Check the serialize-deserialize process for ExtensionSyncData to proto. |
+ SyncDataToProtobufEqual(extension_sync_data); |
+ |
+ // The most important thing to test is the "all urls" bit, since it is a |
+ // tri-state boolean (and thus has more logic). Also flip another bit for a |
+ // sanity check. |
+ extension_specifics->set_all_urls_enabled(false); |
+ extension_specifics->set_incognito_enabled(false); |
+ ProtobufToSyncDataEqual(entity); |
+ |
+ extension_sync_data.PopulateFromExtensionSpecifics(*extension_specifics); |
+ EXPECT_EQ(ExtensionSyncData::BOOLEAN_FALSE, |
+ extension_sync_data.all_urls_enabled()); |
+ EXPECT_EQ(false, extension_sync_data.incognito_enabled()); |
+ |
+ SyncDataToProtobufEqual(extension_sync_data); |
+ |
+ extension_specifics->clear_all_urls_enabled(); |
+ ProtobufToSyncDataEqual(entity); |
+ |
+ extension_sync_data.PopulateFromExtensionSpecifics(*extension_specifics); |
+ EXPECT_FALSE(extension_specifics->has_all_urls_enabled()); |
+ EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, |
+ extension_sync_data.all_urls_enabled()); |
+ |
+ SyncDataToProtobufEqual(extension_sync_data); |
} |
-} // namespace |
+} // namespace extensions |