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