blob: 2ae90cd60fd945ea6f6396fa85144f0df0a660c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
package org.robolectric.shadows;
import static android.os.Build.VERSION_CODES.P;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.robolectric.annotation.LooperMode.Mode.LEGACY;
import android.os.SystemClock;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import java.time.DateTimeException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.LooperMode;
import org.robolectric.annotation.experimental.LazyApplication;
import org.robolectric.annotation.experimental.LazyApplication.LazyLoad;
import org.robolectric.internal.bytecode.RobolectricInternals;
@RunWith(AndroidJUnit4.class)
@LooperMode(LEGACY)
public class ShadowLegacySystemClockTest {
@Test
public void shouldAllowForFakingOfTime() {
assertThat(SystemClock.uptimeMillis()).isNotEqualTo(1000);
Robolectric.getForegroundThreadScheduler().advanceTo(1000);
assertThat(SystemClock.uptimeMillis()).isEqualTo(1000);
}
@Test
public void sleep() {
Robolectric.getForegroundThreadScheduler().advanceTo(1000);
SystemClock.sleep(34);
assertThat(SystemClock.uptimeMillis()).isEqualTo(1034);
}
@Test
public void testSetCurrentTime() {
Robolectric.getForegroundThreadScheduler().advanceTo(1000);
assertThat(ShadowLegacySystemClock.now()).isEqualTo(1000);
assertTrue(SystemClock.setCurrentTimeMillis(1034));
assertThat(ShadowLegacySystemClock.now()).isEqualTo(1034);
assertFalse(SystemClock.setCurrentTimeMillis(1000));
assertThat(ShadowLegacySystemClock.now()).isEqualTo(1034);
}
@Test
public void testElapsedRealtime() {
Robolectric.getForegroundThreadScheduler().advanceTo(1000);
assertThat(SystemClock.elapsedRealtime()).isEqualTo(1000);
Robolectric.getForegroundThreadScheduler().advanceTo(1034);
assertThat(SystemClock.elapsedRealtime()).isEqualTo(1034);
}
@Test
public void testElapsedRealtimeNanos() {
Robolectric.getForegroundThreadScheduler().advanceTo(1000);
assertThat(SystemClock.elapsedRealtimeNanos()).isEqualTo(1000000000);
Robolectric.getForegroundThreadScheduler().advanceTo(1034);
assertThat(SystemClock.elapsedRealtimeNanos()).isEqualTo(1034000000);
}
@Test
public void shouldInterceptSystemTimeCalls() throws Throwable {
ShadowSystemClock.setNanoTime(3141592L);
long systemNanoTime = (Long) RobolectricInternals.intercept(
"java/lang/System/nanoTime()J", null, null, getClass());
assertThat(systemNanoTime).isEqualTo(3141592L);
long systemMilliTime = (Long) RobolectricInternals.intercept(
"java/lang/System/currentTimeMillis()J", null, null, getClass());
assertThat(systemMilliTime).isEqualTo(3L);
}
@Test
@Config(minSdk = P)
public void currentNetworkTimeMillis_networkTimeAvailable_shouldReturnCurrentTime() {
ShadowSystemClock.setNanoTime(123456000000L);
assertThat(SystemClock.currentNetworkTimeMillis()).isEqualTo(123456);
}
@Test
@Config(minSdk = P)
public void currentNetworkTimeMillis_networkTimeNotAvailable_shouldThrowDateTimeException() {
ShadowSystemClock.setNetworkTimeAvailable(false);
try {
SystemClock.currentNetworkTimeMillis();
fail("Trying to get currentNetworkTimeMillis without network time should throw");
} catch (DateTimeException e) {
// pass
}
}
@Test
@LazyApplication(LazyLoad.ON)
public void systemClockWorksWithLazyApplication() {
SystemClock.setCurrentTimeMillis(10000);
assertThat(ShadowSystemClock.currentTimeMillis()).isEqualTo(10000);
}
}
|