1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/extension_sync_data.h"
6
7#include "base/files/file_path.h"
8#include "base/memory/scoped_ptr.h"
9#include "base/version.h"
10#include "sync/protocol/extension_specifics.pb.h"
11#include "sync/protocol/sync.pb.h"
12#include "testing/gtest/include/gtest/gtest.h"
13#include "url/gurl.h"
14
15namespace {
16
17#if defined(OS_WIN)
18const base::FilePath::CharType kExtensionFilePath[] =
19    FILE_PATH_LITERAL("c:\\foo");
20#elif defined(OS_POSIX)
21const base::FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/foo");
22#endif
23
24const char kValidId[] = "abcdefghijklmnopabcdefghijklmnop";
25const char kValidVersion[] = "0.0.0.0";
26const char kVersion1[] = "1.0.0.1";
27const char kVersion2[] = "1.0.1.0";
28const char kVersion3[] = "1.1.0.0";
29const char kValidUpdateUrl1[] =
30    "http://clients2.google.com/service/update2/crx";
31const char kValidUpdateUrl2[] =
32    "https://clients2.google.com/service/update2/crx";
33const char kName[] = "MyExtension";
34const char kName2[] = "MyExtension2";
35
36class ExtensionSyncDataTest : public testing::Test {
37};
38
39TEST_F(ExtensionSyncDataTest, SyncDataToExtensionSyncDataForExtension) {
40  sync_pb::EntitySpecifics entity;
41  sync_pb::ExtensionSpecifics* extension_specifics = entity.mutable_extension();
42  extension_specifics->set_id(kValidId);
43  extension_specifics->set_update_url(kValidUpdateUrl2);
44  extension_specifics->set_enabled(false);
45  extension_specifics->set_incognito_enabled(true);
46  extension_specifics->set_version(kVersion1);
47  extension_specifics->set_name(kName);
48  syncer::SyncData sync_data =
49      syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
50
51  extensions::ExtensionSyncData extension_sync_data(sync_data);
52  EXPECT_EQ(extension_specifics->id(), extension_sync_data.id());
53  EXPECT_EQ(extension_specifics->version(),
54            extension_sync_data.version().GetString());
55  EXPECT_EQ(extension_specifics->update_url(),
56            extension_sync_data.update_url().spec());
57  EXPECT_EQ(extension_specifics->enabled(), extension_sync_data.enabled());
58  EXPECT_EQ(extension_specifics->incognito_enabled(),
59            extension_sync_data.incognito_enabled());
60  EXPECT_EQ(extension_specifics->name(), extension_sync_data.name());
61  EXPECT_FALSE(extension_sync_data.uninstalled());
62}
63
64TEST_F(ExtensionSyncDataTest, ExtensionSyncDataToSyncDataForExtension) {
65  sync_pb::EntitySpecifics entity;
66  sync_pb::ExtensionSpecifics* input_extension = entity.mutable_extension();
67  input_extension->set_id(kValidId);
68  input_extension->set_update_url(kValidUpdateUrl2);
69  input_extension->set_enabled(true);
70  input_extension->set_incognito_enabled(false);
71  input_extension->set_version(kVersion1);
72  input_extension->set_name(kName);
73  syncer::SyncData sync_data =
74      syncer::SyncData::CreateLocalData("sync_tag", "non_unique_title", entity);
75  extensions::ExtensionSyncData extension_sync_data(sync_data);
76
77  syncer::SyncData output_sync_data = extension_sync_data.GetSyncData();
78  const sync_pb::ExtensionSpecifics& output_specifics =
79      output_sync_data.GetSpecifics().extension();
80  EXPECT_EQ(extension_sync_data.id(), output_specifics.id());
81  EXPECT_EQ(extension_sync_data.update_url().spec(),
82            output_specifics.update_url());
83  EXPECT_EQ(extension_sync_data.enabled(), output_specifics.enabled());
84  EXPECT_EQ(extension_sync_data.incognito_enabled(),
85            output_specifics.incognito_enabled());
86  EXPECT_EQ(extension_sync_data.version().GetString(),
87            output_specifics.version());
88  EXPECT_EQ(extension_sync_data.name(), output_specifics.name());
89}
90
91}  // namespace
92