157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelpackage com.xtremelabs.robolectric.shadows; 257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport com.xtremelabs.robolectric.internal.Implementation; 457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport com.xtremelabs.robolectric.internal.Implements; 557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport com.xtremelabs.robolectric.internal.RealObject; 657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport android.content.SyncResult; 857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport android.content.SyncStats; 957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 1057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelimport java.lang.reflect.Field; 1157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 1257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel@Implements(SyncResult.class) 1357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkelpublic class ShadowSyncResult { 1457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @RealObject 1557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel private SyncResult result; 1657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 1757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public void __constructor__() { 1857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel try { 1957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel Field f = SyncResult.class.getDeclaredField("stats"); 2057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel f.setAccessible(true); 2157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel f.set(result, new SyncStats()); 2257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } catch (NoSuchFieldException e) { 2357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel throw new RuntimeException(e); 2457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } catch (IllegalAccessException e) { 2557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel throw new RuntimeException(e); 2657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 2757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 2857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 2957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 3057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public boolean hasSoftError() { 3157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel return result.syncAlreadyInProgress || result.stats.numIoExceptions > 0; 3257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 3357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 3457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 3557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public boolean hasHardError() { 3657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel return result.stats.numParseExceptions > 0 3757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.stats.numConflictDetectedExceptions > 0 3857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.stats.numAuthExceptions > 0 3957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.tooManyDeletions 4057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.tooManyRetries 4157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.databaseError; 4257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 4357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 4457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 4557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public boolean hasError() { 4657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel return hasSoftError() || hasHardError(); 4757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 4857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 4957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 5057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public boolean madeSomeProgress() { 5157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel return ((result.stats.numDeletes > 0) && !result.tooManyDeletions) 5257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.stats.numInserts > 0 5357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel || result.stats.numUpdates > 0; 5457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 5557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 5657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 5757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public void clear() { 5857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel if (result.syncAlreadyInProgress) { 5957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel throw new UnsupportedOperationException( 6057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel "you are not allowed to clear the ALREADY_IN_PROGRESS SyncStats"); 6157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 6257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.tooManyDeletions = false; 6357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.tooManyRetries = false; 6457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.databaseError = false; 6557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.fullSyncRequested = false; 6657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.partialSyncUnavailable = false; 6757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.moreRecordsToGet = false; 6857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.delayUntil = 0; 6957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel result.stats.clear(); 7057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 7157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 7257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 7357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implements(SyncStats.class) 7457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public static class ShadowSyncStats { 7557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @RealObject 7657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel private SyncStats stats; 7757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel 7857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel @Implementation 7957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel public void clear() { 8057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numAuthExceptions = 0; 8157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numIoExceptions = 0; 8257d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numParseExceptions = 0; 8357d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numConflictDetectedExceptions = 0; 8457d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numInserts = 0; 8557d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numUpdates = 0; 8657d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numDeletes = 0; 8757d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numEntries = 0; 8857d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel stats.numSkippedEntries = 0; 8957d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 9057d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel } 9157d524e7eebcea4a186fd6f849142a56bcaa1b2aJan Berkel} 92