1 // Copyright 2013 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 package org.chromium.chrome.browser.sync;
7 import android.accounts.Account;
8 import android.app.Application;
9 import android.content.Context;
10 import android.content.SyncResult;
11 import android.os.Bundle;
12 import android.test.suitebuilder.annotation.MediumTest;
14 import com.google.protos.ipc.invalidation.Types;
16 import org.chromium.base.test.util.Feature;
17 import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
18 import org.chromium.sync.notifier.SyncStatusHelper;
19 import org.chromium.sync.signin.AccountManagerHelper;
21 public class ChromiumSyncAdapterTest extends ChromiumTestShellTestBase {
23 private static final Account TEST_ACCOUNT =
24 AccountManagerHelper.createAccountFromName("test@gmail.com");
26 private TestChromiumSyncAdapter mSyncAdapter;
28 private static class TestChromiumSyncAdapter extends ChromiumSyncAdapter {
29 private boolean mCommandlineInitialized;
30 private boolean mSyncRequested;
31 private boolean mSyncRequestedForAllTypes;
32 private int mObjectSource;
33 private String mObjectId;
34 private long mVersion;
35 private String mPayload;
37 public TestChromiumSyncAdapter(Context context, Application application) {
38 super(context, application);
42 protected boolean useAsyncStartup() {
47 protected void initCommandLine() {
48 mCommandlineInitialized = true;
52 public void requestSync(int objectSource, String objectId, long version, String payload) {
53 mObjectSource = objectSource;
57 mSyncRequested = true;
61 public void requestSyncForAllTypes() {
62 mSyncRequestedForAllTypes = true;
67 protected void setUp() throws Exception {
69 launchChromiumTestShellWithBlankPage();
70 mSyncAdapter = new TestChromiumSyncAdapter(getInstrumentation().getTargetContext(),
71 getActivity().getApplication());
76 public void testRequestSyncNoInvalidationData() {
77 SyncResult syncResult = new SyncResult();
78 mSyncAdapter.onPerformSync(TEST_ACCOUNT, new Bundle(),
79 SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
80 assertTrue(mSyncAdapter.mSyncRequestedForAllTypes);
81 assertFalse(mSyncAdapter.mSyncRequested);
82 assertTrue(mSyncAdapter.mCommandlineInitialized);
85 private void testRequestSyncSpecificDataType(boolean withObjectSource) {
86 SyncResult syncResult = new SyncResult();
87 Bundle extras = new Bundle();
88 if (withObjectSource) {
89 extras.putInt(ChromiumSyncAdapter.INVALIDATION_OBJECT_SOURCE_KEY, 61);
91 extras.putString(ChromiumSyncAdapter.INVALIDATION_OBJECT_ID_KEY, "objectid_value");
92 extras.putLong(ChromiumSyncAdapter.INVALIDATION_VERSION_KEY, 42);
93 extras.putString(ChromiumSyncAdapter.INVALIDATION_PAYLOAD_KEY, "payload_value");
94 mSyncAdapter.onPerformSync(TEST_ACCOUNT, extras,
95 SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
96 assertFalse(mSyncAdapter.mSyncRequestedForAllTypes);
97 assertTrue(mSyncAdapter.mSyncRequested);
98 if (withObjectSource) {
99 assertEquals(61, mSyncAdapter.mObjectSource);
101 assertEquals(Types.ObjectSource.Type.CHROME_SYNC.getNumber(),
102 mSyncAdapter.mObjectSource);
104 assertEquals("objectid_value", mSyncAdapter.mObjectId);
105 assertEquals(42, mSyncAdapter.mVersion);
106 assertEquals("payload_value", mSyncAdapter.mPayload);
107 assertTrue(mSyncAdapter.mCommandlineInitialized);
112 public void testRequestSyncSpecificDataType() {
113 testRequestSyncSpecificDataType(true /* withObjectSource */);
118 public void testRequestSyncSpecificDataType_withoutObjectSource() {
119 testRequestSyncSpecificDataType(false /* withObjectSource */);
124 public void testRequestSyncWhenChromeInBackground() throws InterruptedException {
125 DelayedSyncControllerTest.sendChromeToBackground(getActivity());
126 SyncResult syncResult = new SyncResult();
127 mSyncAdapter.onPerformSync(TEST_ACCOUNT, new Bundle(),
128 SyncStatusHelper.get(getActivity()).getContractAuthority(), null, syncResult);
129 assertFalse(mSyncAdapter.mSyncRequestedForAllTypes);
130 assertFalse(mSyncAdapter.mSyncRequested);
131 assertFalse(mSyncAdapter.mCommandlineInitialized);