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.
5 #include "sync/internal_api/js_sync_manager_observer.h"
7 #include "base/basictypes.h"
8 #include "base/location.h"
9 #include "base/run_loop.h"
10 #include "base/values.h"
11 #include "sync/internal_api/public/base/model_type.h"
12 #include "sync/internal_api/public/sessions/sync_session_snapshot.h"
13 #include "sync/internal_api/public/util/sync_string_conversions.h"
14 #include "sync/internal_api/public/util/weak_handle.h"
15 #include "sync/js/js_event_details.h"
16 #include "sync/js/js_test_util.h"
17 #include "sync/protocol/sync_protocol_error.h"
18 #include "testing/gtest/include/gtest/gtest.h"
23 using ::testing::InSequence
;
24 using ::testing::StrictMock
;
26 class JsSyncManagerObserverTest
: public testing::Test
{
28 JsSyncManagerObserverTest() {
29 js_sync_manager_observer_
.SetJsEventHandler(
30 mock_js_event_handler_
.AsWeakHandle());
34 // This must be destroyed after the member variables below in order
35 // for WeakHandles to be destroyed properly.
36 base::MessageLoop message_loop_
;
39 StrictMock
<MockJsEventHandler
> mock_js_event_handler_
;
40 JsSyncManagerObserver js_sync_manager_observer_
;
43 base::RunLoop().RunUntilIdle();
47 TEST_F(JsSyncManagerObserverTest
, OnInitializationComplete
) {
48 base::DictionaryValue expected_details
;
49 syncer::ModelTypeSet restored_types
;
50 restored_types
.Put(BOOKMARKS
);
51 restored_types
.Put(NIGORI
);
52 expected_details
.Set("restoredTypes", ModelTypeSetToValue(restored_types
));
54 EXPECT_CALL(mock_js_event_handler_
,
55 HandleJsEvent("onInitializationComplete",
56 HasDetailsAsDictionary(expected_details
)));
58 js_sync_manager_observer_
.OnInitializationComplete(
59 WeakHandle
<JsBackend
>(),
60 WeakHandle
<DataTypeDebugInfoListener
>(),
66 TEST_F(JsSyncManagerObserverTest
, OnSyncCycleCompleted
) {
67 sessions::SyncSessionSnapshot
snapshot(
68 sessions::ModelNeutralState(),
77 std::vector
<int>(MODEL_TYPE_COUNT
, 0),
78 std::vector
<int>(MODEL_TYPE_COUNT
, 0),
79 sync_pb::GetUpdatesCallerInfo::UNKNOWN
);
80 base::DictionaryValue expected_details
;
81 expected_details
.Set("snapshot", snapshot
.ToValue());
83 EXPECT_CALL(mock_js_event_handler_
,
84 HandleJsEvent("onSyncCycleCompleted",
85 HasDetailsAsDictionary(expected_details
)));
87 js_sync_manager_observer_
.OnSyncCycleCompleted(snapshot
);
91 TEST_F(JsSyncManagerObserverTest
, OnActionableError
) {
92 SyncProtocolError sync_error
;
93 sync_error
.action
= CLEAR_USER_DATA_AND_RESYNC
;
94 sync_error
.error_type
= TRANSIENT_ERROR
;
95 base::DictionaryValue expected_details
;
96 expected_details
.Set("syncError", sync_error
.ToValue());
98 EXPECT_CALL(mock_js_event_handler_
,
99 HandleJsEvent("onActionableError",
100 HasDetailsAsDictionary(expected_details
)));
102 js_sync_manager_observer_
.OnActionableError(sync_error
);
107 TEST_F(JsSyncManagerObserverTest
, OnConnectionStatusChange
) {
108 const ConnectionStatus kStatus
= CONNECTION_AUTH_ERROR
;
109 base::DictionaryValue expected_details
;
110 expected_details
.SetString("status",
111 ConnectionStatusToString(kStatus
));
113 EXPECT_CALL(mock_js_event_handler_
,
114 HandleJsEvent("onConnectionStatusChange",
115 HasDetailsAsDictionary(expected_details
)));
117 js_sync_manager_observer_
.OnConnectionStatusChange(kStatus
);
122 } // namespace syncer