From fc7123d8b4ed646e31507020775c8593910732b8 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Mon, 15 Sep 2025 20:26:56 +0300 Subject: [PATCH] Add Robolectric tests for edge-to-edge delegate --- app/build.gradle | 1 + .../java/utils/EdgeToEdgeDelegateTest.java | 65 +++++++++++++++++++ gradle/libs.versions.toml | 2 + 3 files changed, 68 insertions(+) create mode 100644 app/src/test/java/com/d4rk/androidtutorials/java/utils/EdgeToEdgeDelegateTest.java diff --git a/app/build.gradle b/app/build.gradle index 8fc180bc..17ad72be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -105,6 +105,7 @@ dependencies { // Testing testImplementation libs.junit testImplementation libs.androidx.core.testing + testImplementation libs.robolectric testImplementation libs.mockito.core testImplementation libs.mockito.inline } \ No newline at end of file diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/utils/EdgeToEdgeDelegateTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/utils/EdgeToEdgeDelegateTest.java new file mode 100644 index 00000000..959d909f --- /dev/null +++ b/app/src/test/java/com/d4rk/androidtutorials/java/utils/EdgeToEdgeDelegateTest.java @@ -0,0 +1,65 @@ +package com.d4rk.androidtutorials.java.utils; + +import static org.junit.Assert.assertEquals; + +import android.app.Activity; +import android.view.View; + +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +@RunWith(RobolectricTestRunner.class) +public class EdgeToEdgeDelegateTest { + + @Test + public void apply_setsContainerPaddingToSystemBarInsets() { + Activity activity = Robolectric.buildActivity(Activity.class).setup().get(); + View container = new View(activity); + + EdgeToEdgeDelegate.apply(activity, container); + + Insets bars = Insets.of(4, 8, 12, 16); + WindowInsetsCompat windowInsets = new WindowInsetsCompat.Builder() + .setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout(), bars) + .build(); + + ViewCompat.dispatchApplyWindowInsets(container, windowInsets); + + assertEquals(bars.left, container.getPaddingLeft()); + assertEquals(bars.top, container.getPaddingTop()); + assertEquals(bars.right, container.getPaddingRight()); + assertEquals(bars.bottom, container.getPaddingBottom()); + } + + @Test + public void applyBottomBar_setsContainerTopPaddingAndBottomBarPadding() { + Activity activity = Robolectric.buildActivity(Activity.class).setup().get(); + View container = new View(activity); + View bottomBar = new View(activity); + + EdgeToEdgeDelegate.applyBottomBar(activity, container, bottomBar); + + Insets bars = Insets.of(3, 6, 9, 12); + WindowInsetsCompat windowInsets = new WindowInsetsCompat.Builder() + .setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout(), bars) + .build(); + + ViewCompat.dispatchApplyWindowInsets(container, windowInsets); + + assertEquals(bars.left, container.getPaddingLeft()); + assertEquals(bars.top, container.getPaddingTop()); + assertEquals(bars.right, container.getPaddingRight()); + assertEquals(0, container.getPaddingBottom()); + + assertEquals(0, bottomBar.getPaddingLeft()); + assertEquals(0, bottomBar.getPaddingTop()); + assertEquals(0, bottomBar.getPaddingRight()); + assertEquals(bars.bottom, bottomBar.getPaddingBottom()); + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f62cc9df..c892b652 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,6 +17,7 @@ lifecycle = "2.9.3" lottie = "6.6.7" mockitoCore = "5.19.0" mockitoInline = "5.2.0" +robolectric = "4.12.2" navigationUi = "2.9.4" preference = "1.2.1" review = "2.0.2" @@ -61,6 +62,7 @@ material = { module = "com.google.android.material:material", version.ref = "mat materialratingbar-library = { module = "me.zhanghai.android.materialratingbar:library", version.ref = "libraryVersion" } mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockitoCore" } mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockitoInline" } +robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" } play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" } review = { module = "com.google.android.play:review", version.ref = "review" } volley = { module = "com.android.volley:volley", version.ref = "volley" }