1 // Copyright 2014 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.
8 #include "base/command_line.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_util.h"
11 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
12 #include "chrome/browser/sync/profile_sync_components_factory_impl.h"
13 #include "chrome/browser/sync/profile_sync_service.h"
14 #include "chrome/browser/sync/profile_sync_service_android.h"
15 #include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h"
16 #include "chrome/test/base/testing_profile.h"
17 #include "components/signin/core/browser/profile_oauth2_token_service.h"
18 #include "components/sync_driver/data_type_controller.h"
19 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "sync/internal_api/public/base/model_type.h"
21 #include "testing/gtest/include/gtest/gtest.h"
25 int NumberOfSetBits(jlong bitmask
) {
36 class ProfileSyncServiceAndroidTest
: public testing::Test
{
38 ProfileSyncServiceAndroidTest()
39 : command_line_(base::CommandLine::NO_PROGRAM
) {}
40 ~ProfileSyncServiceAndroidTest() override
{}
42 void SetUp() override
{
43 ProfileOAuth2TokenService
* token_service
=
44 ProfileOAuth2TokenServiceFactory::GetForProfile(&profile_
);
45 ProfileSyncComponentsFactory
* factory
=
46 new ProfileSyncComponentsFactoryImpl(
51 profile_
.GetRequestContext());
52 sync_service_
.reset(new ProfileSyncService(
53 make_scoped_ptr(factory
),
55 scoped_ptr
<SupervisedUserSigninManagerWrapper
>(),
57 browser_sync::MANUAL_START
));
58 factory
->RegisterDataTypes(sync_service_
.get());
62 syncer::ModelTypeSet
GetRegisteredDataTypes() {
63 sync_driver::DataTypeController::StateMap controller_states
;
64 sync_service_
->GetDataTypeControllerStates(&controller_states
);
65 syncer::ModelTypeSet model_types
;
66 for (sync_driver::DataTypeController::StateMap::const_iterator it
=
67 controller_states
.begin();
68 it
!= controller_states
.end(); ++it
) {
69 model_types
.Put(it
->first
);
75 base::CommandLine command_line_
;
76 content::TestBrowserThreadBundle thread_bundle_
;
77 TestingProfile profile_
;
78 scoped_ptr
<ProfileSyncService
> sync_service_
;
81 TEST_F(ProfileSyncServiceAndroidTest
, ModelTypesToInvalidationNames
) {
82 syncer::ModelTypeSet model_types
= GetRegisteredDataTypes();
84 jlong model_type_selection
=
85 ProfileSyncServiceAndroid::ModelTypeSetToSelection(model_types
);
86 // The number of set bits in the model type bitmask should be equal to the
87 // number of model types.
88 EXPECT_EQ(static_cast<int>(model_types
.Size()),
89 NumberOfSetBits(model_type_selection
));
91 std::vector
<std::string
> invalidation_names
;
92 for (syncer::ModelTypeSet::Iterator it
= model_types
.First(); it
.Good();
94 std::string notification_type
;
95 if (syncer::RealModelTypeToNotificationType(it
.Get(), ¬ification_type
))
96 invalidation_names
.push_back(notification_type
);
99 std::sort(invalidation_names
.begin(), invalidation_names
.end());
100 EXPECT_EQ(base::JoinString(invalidation_names
, ", "),
101 ProfileSyncServiceAndroid::ModelTypeSelectionToStringForTest(
102 model_type_selection
));