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