All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xtremelabs.robolectric.shadows.ShadowSyncResult Maven / Gradle / Ivy

The newest version!
package com.xtremelabs.robolectric.shadows;

import com.xtremelabs.robolectric.internal.Implementation;
import com.xtremelabs.robolectric.internal.Implements;
import com.xtremelabs.robolectric.internal.RealObject;

import android.content.SyncResult;
import android.content.SyncStats;

import java.lang.reflect.Field;

@Implements(SyncResult.class)
public class ShadowSyncResult {
    @RealObject
    private SyncResult result;

    public void __constructor__() {
        try {
            Field f = SyncResult.class.getDeclaredField("stats");
            f.setAccessible(true);
            f.set(result, new SyncStats());
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }

    @Implementation
    public boolean hasSoftError() {
        return result.syncAlreadyInProgress || result.stats.numIoExceptions > 0;
    }

    @Implementation
    public boolean hasHardError() {
        return result.stats.numParseExceptions > 0
                || result.stats.numConflictDetectedExceptions > 0
                || result.stats.numAuthExceptions > 0
                || result.tooManyDeletions
                || result.tooManyRetries
                || result.databaseError;
    }

    @Implementation
    public boolean hasError() {
        return hasSoftError() || hasHardError();
    }

    @Implementation
    public boolean madeSomeProgress() {
        return ((result.stats.numDeletes > 0) && !result.tooManyDeletions)
                || result.stats.numInserts > 0
                || result.stats.numUpdates > 0;
    }

    @Implementation
    public void clear() {
        if (result.syncAlreadyInProgress) {
            throw new UnsupportedOperationException(
                    "you are not allowed to clear the ALREADY_IN_PROGRESS SyncStats");
        }
        result.tooManyDeletions = false;
        result.tooManyRetries = false;
        result.databaseError = false;
        result.fullSyncRequested = false;
        result.partialSyncUnavailable = false;
        result.moreRecordsToGet = false;
        result.delayUntil = 0;
        result.stats.clear();
    }


    @Implements(SyncStats.class)
    public static class ShadowSyncStats {
        @RealObject
        private SyncStats stats;

        @Implementation
        public void clear() {
            stats.numAuthExceptions = 0;
            stats.numIoExceptions = 0;
            stats.numParseExceptions = 0;
            stats.numConflictDetectedExceptions = 0;
            stats.numInserts = 0;
            stats.numUpdates = 0;
            stats.numDeletes = 0;
            stats.numEntries = 0;
            stats.numSkippedEntries = 0;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy