FileDocCategorySizeDatePackage
SyncBaseInstrumentation.javaAPI DocAndroid 1.5 API4418Wed May 06 22:42:02 BST 2009android.test

SyncBaseInstrumentation

public class SyncBaseInstrumentation extends InstrumentationTestCase
If you would like to test sync a single provider with an {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and {@link #tearDown}.

Fields Summary
private android.content.Context
mTargetContext
android.content.ContentResolver
mContentResolver
private static final int
MAX_TIME_FOR_SYNC_IN_MINS
Constructors Summary
Methods Summary
protected voidcancelSyncsandDisableAutoSync()

        Sync.Settings.QueryMap mSyncSettings =
                new Sync.Settings.QueryMap(mContentResolver, true, null);
        mSyncSettings.setListenForNetworkTickles(false);
        mContentResolver.cancelSync(null);
        mSyncSettings.close();
    
private booleanisActiveInActiveQueryMap(Sync.Active.QueryMap activemap, java.lang.String account, java.lang.String authority)

        Map<String, ContentValues> rows = activemap.getRows();
        for (ContentValues values : rows.values()) {
            if (values.getAsString("account").equals(account)
                    && values.getAsString("authority").equals(authority)) {
                return true;
            }
        }
        return false;
    
private booleanisSyncActive(java.lang.String account, java.lang.String authority)
This method tests if any sync is active or not. Sync is considered to be active if the entry is in either the Pending or Active tables.

return

        Sync.Pending.QueryMap pendingQueryMap = null;
        Sync.Active.QueryMap activeQueryMap = null;
        try {
            pendingQueryMap = new Sync.Pending.QueryMap(mContentResolver, false, null);
            activeQueryMap = new Sync.Active.QueryMap(mContentResolver, false, null);

            if (pendingQueryMap.isPending(account, authority)) {
                return true;
            }
            if (isActiveInActiveQueryMap(activeQueryMap, account, authority)) {
                return true;
            }
            return false;
        } finally {
            activeQueryMap.close();
            pendingQueryMap.close();
        }
    
protected voidsetUp()


    
         
        super.setUp();
        mTargetContext = getInstrumentation().getTargetContext();
        mContentResolver = mTargetContext.getContentResolver();
    
protected voidsyncProvider(android.net.Uri uri, java.lang.String account, java.lang.String authority)
Syncs the specified provider.

throws
Exception

        Bundle extras = new Bundle();
        extras.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
        extras.putString(ContentResolver.SYNC_EXTRAS_ACCOUNT, account);

        mContentResolver.startSync(uri, extras);
        long startTimeInMillis = SystemClock.elapsedRealtime();
        long endTimeInMillis = startTimeInMillis + MAX_TIME_FOR_SYNC_IN_MINS * 60000;

        int counter = 0;
        // Making sure race condition does not occur when en entry have been removed from pending
        // and active tables and loaded in memory (therefore sync might be still in progress)
        while (counter < 2) {
            // Sleep for 1 second.
            Thread.sleep(1000);
            // Finish test if time to sync has exceeded max time.
            if (SystemClock.elapsedRealtime() > endTimeInMillis) {
                break;
            }

            if (isSyncActive(account, authority)) {
                counter = 0;
                continue;
            }
            counter++;
        }