• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package android.view;
2 
3 import static android.os.Build.VERSION_CODES.O_MR1;
4 import static com.google.common.truth.Truth.assertThat;
5 
6 import android.os.Build;
7 import androidx.test.core.app.ApplicationProvider;
8 import androidx.test.ext.junit.runners.AndroidJUnit4;
9 import java.lang.reflect.Method;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 import org.robolectric.annotation.Config;
14 import org.robolectric.annotation.internal.DoNotInstrument;
15 
16 /** Tests that {@link android.view.ViewConfiguration} behavior is consistent with real Android. */
17 @DoNotInstrument
18 @RunWith(AndroidJUnit4.class)
19 public final class ViewConfigurationTest {
20 
21   private float density;
22   private ViewConfiguration viewConfiguration;
23 
24   @Before
setUp()25   public void setUp() {
26     density =
27         ApplicationProvider.getApplicationContext().getResources().getDisplayMetrics().density;
28     viewConfiguration = ViewConfiguration.get(ApplicationProvider.getApplicationContext());
29   }
30 
31   @Test
scrollbar_configuration()32   public void scrollbar_configuration() {
33     int scrollBarSize = ViewConfiguration.getScrollBarSize();
34     int scaledScrollBarSizeDp = pxToDp(viewConfiguration.getScaledScrollBarSize());
35     if (Build.VERSION.SDK_INT >= O_MR1) {
36       assertThat(scrollBarSize).isEqualTo(4);
37       assertThat(scaledScrollBarSizeDp).isEqualTo(4);
38     } else {
39       assertThat(scrollBarSize).isEqualTo(10);
40       assertThat(scaledScrollBarSizeDp).isEqualTo(10);
41     }
42   }
43 
44   @Test
isFadingMarqueeEnabled_returnsFalse()45   public void isFadingMarqueeEnabled_returnsFalse() throws Exception {
46     // isFadingMarqueeEnabled is a '@hide' method.
47     boolean isFadingMarqueeEnabled =
48         callMethod(viewConfiguration, "isFadingMarqueeEnabled", Boolean.class);
49     assertThat(isFadingMarqueeEnabled).isFalse();
50   }
51 
52   // Emulators have hdpi density by default, so match this in Robolectric for consistency.
53   @Config(qualifiers = "hdpi")
54   @Test
overfling_distance()55   public void overfling_distance() {
56     assertThat(density).isEqualTo(1.5f);
57     assertThat(viewConfiguration.getScaledOverflingDistance()).isEqualTo(9);
58   }
59 
pxToDp(int px)60   public int pxToDp(int px) {
61     return Math.round(px / density);
62   }
63 
callMethod(Object obj, String methodName, Class<T> returnType)64   public <T> T callMethod(Object obj, String methodName, Class<T> returnType) throws Exception {
65     Method method = obj.getClass().getMethod(methodName);
66     return returnType.cast(method.invoke(obj));
67   }
68 }
69