From 9eda842af66a0e36b5739a0c4f4167623662143e 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 --- .../ui/navigationdrawer/DrawerState.kt | 6 +++ .../ui/navigationdrawer/DrawerStateTest.kt | 41 +++++++++++++++++++ 2 files changed, 47 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/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() } + } +}