From fe22841857e87219c0587a71880e573cd05977c9 Mon Sep 17 00:00:00 2001 From: Daniel Frett Date: Fri, 14 Jul 2023 17:06:54 -0600 Subject: [PATCH] add an extension method to toggle a drawer open/closed --- .../build.gradle.kts | 2 + .../ui/navigationdrawer/DrawerState.kt | 6 +++ .../ui/navigationdrawer/DrawerStateTest.kt | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 gto-support-androidx-compose-material3/src/main/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerState.kt create mode 100644 gto-support-androidx-compose-material3/src/test/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerStateTest.kt diff --git a/gto-support-androidx-compose-material3/build.gradle.kts b/gto-support-androidx-compose-material3/build.gradle.kts index 5b142f2f1..c078d11f0 100644 --- a/gto-support-androidx-compose-material3/build.gradle.kts +++ b/gto-support-androidx-compose-material3/build.gradle.kts @@ -12,6 +12,8 @@ dependencies { implementation(project(":gto-support-androidx-compose")) + testImplementation(libs.kotlin.coroutines.test) + // region Linkify support implementation(libs.androidx.core) // endregion Linkify support diff --git a/gto-support-androidx-compose-material3/src/main/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerState.kt b/gto-support-androidx-compose-material3/src/main/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerState.kt new file mode 100644 index 000000000..593883db3 --- /dev/null +++ b/gto-support-androidx-compose-material3/src/main/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerState.kt @@ -0,0 +1,6 @@ +package org.ccci.gto.android.common.androidx.compose.material3.ui.navigationdrawer + +import androidx.compose.material3.DrawerState +import androidx.compose.material3.DrawerValue + +suspend fun DrawerState.toggle() = if (targetValue == DrawerValue.Open) close() else open() diff --git a/gto-support-androidx-compose-material3/src/test/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerStateTest.kt b/gto-support-androidx-compose-material3/src/test/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerStateTest.kt new file mode 100644 index 000000000..006220059 --- /dev/null +++ b/gto-support-androidx-compose-material3/src/test/kotlin/org/ccci/gto/android/common/androidx/compose/material3/ui/navigationdrawer/DrawerStateTest.kt @@ -0,0 +1,41 @@ +package org.ccci.gto.android.common.androidx.compose.material3.ui.navigationdrawer + +import androidx.compose.material3.DrawerState +import androidx.compose.material3.DrawerValue +import io.mockk.Runs +import io.mockk.coEvery +import io.mockk.coVerifyAll +import io.mockk.every +import io.mockk.excludeRecords +import io.mockk.just +import io.mockk.mockk +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class DrawerStateTest { + @Test + fun `toggle() - Drawer currently open`() = runTest { + val state: DrawerState = mockk { + every { targetValue } returns DrawerValue.Open + coEvery { close() } just Runs + + excludeRecords { targetValue } + } + + state.toggle() + coVerifyAll { state.close() } + } + + @Test + fun `toggle() - Drawer currently closed`() = runTest { + val state: DrawerState = mockk { + every { targetValue } returns DrawerValue.Closed + coEvery { open() } just Runs + + excludeRecords { targetValue } + } + + state.toggle() + coVerifyAll { state.open() } + } +}