aboutsummaryrefslogtreecommitdiff
path: root/robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java')
-rw-r--r--robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java75
1 files changed, 72 insertions, 3 deletions
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java
index b0261527d..7eaa98896 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowPausedSystemClockTest.java
@@ -1,6 +1,5 @@
package org.robolectric.shadows;
-import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
import static android.os.Build.VERSION_CODES.P;
import static android.os.Build.VERSION_CODES.Q;
import static com.google.common.truth.Truth.assertThat;
@@ -12,6 +11,7 @@ import static org.robolectric.annotation.LooperMode.Mode.PAUSED;
import android.os.SystemClock;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import java.time.DateTimeException;
+import java.time.Duration;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -32,6 +32,7 @@ public class ShadowPausedSystemClockTest {
assertTrue(SystemClock.setCurrentTimeMillis(1000));
SystemClock.sleep(34);
assertThat(SystemClock.uptimeMillis()).isEqualTo(1034);
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1034);
}
@Test
@@ -69,11 +70,58 @@ public class ShadowPausedSystemClockTest {
}
@Test
+ public void deepSleep_advancesOnlyRealtime() {
+ assertTrue(SystemClock.setCurrentTimeMillis(1000));
+
+ ShadowPausedSystemClock.deepSleep(34);
+
+ assertThat(SystemClock.uptimeMillis()).isEqualTo(1000);
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1034);
+ }
+
+ @Test
+ public void deepSleep_notifiesListener() {
+ AtomicBoolean listenerCalled = new AtomicBoolean();
+ ShadowPausedSystemClock.addListener(() -> listenerCalled.set(true));
+
+ ShadowPausedSystemClock.deepSleep(100);
+
+ assertThat(listenerCalled.get()).isTrue();
+ }
+
+ @SuppressWarnings("FutureReturnValueIgnored")
+ @Test
+ public void deepSleep_concurrentAccess_doesNotCorruptData() throws Exception {
+ SystemClock.setCurrentTimeMillis(100);
+ ExecutorService executor = Executors.newFixedThreadPool(2);
+ try {
+ int numToExecute = 10000;
+ CountDownLatch latch = new CountDownLatch(numToExecute);
+
+ for (int i = 0; i < numToExecute; i++) {
+ executor.submit(
+ () -> {
+ ShadowPausedSystemClock.deepSleep(100);
+ latch.countDown();
+ });
+ }
+ latch.await();
+
+ assertThat(SystemClock.uptimeMillis()).isEqualTo(100);
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(100 + numToExecute * 100);
+ } finally {
+ executor.shutdown();
+ }
+ }
+
+ @Test
public void testSetCurrentTime() {
assertTrue(SystemClock.setCurrentTimeMillis(1034));
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1034);
assertThat(SystemClock.uptimeMillis()).isEqualTo(1034);
assertThat(SystemClock.currentThreadTimeMillis()).isEqualTo(1034);
assertFalse(SystemClock.setCurrentTimeMillis(1000));
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1034);
assertThat(SystemClock.uptimeMillis()).isEqualTo(1034);
}
@@ -104,7 +152,7 @@ public class ShadowPausedSystemClockTest {
latch.countDown();
});
latch.await();
-
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(300);
assertThat(SystemClock.uptimeMillis()).isEqualTo(300);
} finally {
executor.shutdown();
@@ -112,13 +160,34 @@ public class ShadowPausedSystemClockTest {
}
@Test
+ public void advanceTimeBy_shouldAdvanceBothElapsedRealtimeAndUptimeMillis() {
+ SystemClock.setCurrentTimeMillis(1000);
+
+ ShadowPausedSystemClock.advanceBy(Duration.ofMillis(100));
+
+ assertThat(SystemClock.uptimeMillis()).isEqualTo(1100);
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1100);
+ assertThat(SystemClock.currentThreadTimeMillis()).isEqualTo(1100);
+ }
+
+ @Test
+ public void simulateDeepSleep_shouldOnlyAdvanceElapsedRealtime() {
+ SystemClock.setCurrentTimeMillis(1000);
+
+ ShadowPausedSystemClock.simulateDeepSleep(Duration.ofMillis(100));
+
+ assertThat(SystemClock.uptimeMillis()).isEqualTo(1000);
+ assertThat(SystemClock.currentThreadTimeMillis()).isEqualTo(1000);
+ assertThat(SystemClock.elapsedRealtime()).isEqualTo(1100);
+ }
+
+ @Test
public void testElapsedRealtime() {
SystemClock.setCurrentTimeMillis(1000);
assertThat(SystemClock.elapsedRealtime()).isEqualTo(1000);
}
@Test
- @Config(minSdk = JELLY_BEAN_MR1)
public void testElapsedRealtimeNanos() {
SystemClock.setCurrentTimeMillis(1000);
assertThat(SystemClock.elapsedRealtimeNanos()).isEqualTo(1000000000);