app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

HarvestCircleThemeRenderTest.kt (2379B)


      1 package org.harvestcircle.ui.shell
      2 
      3 import androidx.compose.foundation.background
      4 import androidx.compose.foundation.layout.Box
      5 import androidx.compose.foundation.layout.size
      6 import androidx.compose.runtime.getValue
      7 import androidx.compose.runtime.mutableStateOf
      8 import androidx.compose.runtime.setValue
      9 import androidx.compose.ui.Modifier
     10 import androidx.compose.ui.graphics.toPixelMap
     11 import androidx.compose.ui.platform.testTag
     12 import androidx.compose.ui.test.ExperimentalTestApi
     13 import androidx.compose.ui.test.captureToImage
     14 import androidx.compose.ui.test.onNodeWithTag
     15 import androidx.compose.ui.test.v2.runComposeUiTest
     16 import androidx.compose.ui.unit.dp
     17 import org.harvestcircle.appearance.AppearanceState
     18 import org.harvestcircle.appearance.ThemePreference
     19 import kotlin.test.Test
     20 import kotlin.test.assertEquals
     21 import kotlin.test.assertNotEquals
     22 import org.harvestcircle.designsystem.theme.HarvestCircleTheme as DesignTheme
     23 
     24 @OptIn(ExperimentalTestApi::class)
     25 class HarvestCircleThemeRenderTest {
     26     @Test
     27     fun lightDarkAndSystemPreferencesChangeRenderedPixels() =
     28         runComposeUiTest {
     29             var preference by mutableStateOf(ThemePreference.Light)
     30             var systemDark by mutableStateOf(false)
     31             setHarvestCircleContent {
     32                 HarvestCircleTheme(AppearanceState(theme = preference), systemDark = systemDark) {
     33                     Box(
     34                         Modifier
     35                             .size(32.dp)
     36                             .background(DesignTheme.foundation.colors.surface.canvas)
     37                             .testTag("theme-render-swatch"),
     38                     )
     39                 }
     40             }
     41 
     42             fun renderedColor() = onNodeWithTag("theme-render-swatch").captureToImage().toPixelMap()[16, 16]
     43 
     44             val explicitLight = renderedColor()
     45             preference = ThemePreference.Dark
     46             waitForIdle()
     47             val explicitDark = renderedColor()
     48             preference = ThemePreference.System
     49             systemDark = false
     50             waitForIdle()
     51             val systemLight = renderedColor()
     52             systemDark = true
     53             waitForIdle()
     54             val systemDarkColor = renderedColor()
     55 
     56             assertEquals(explicitLight, systemLight)
     57             assertEquals(explicitDark, systemDarkColor)
     58             assertNotEquals(explicitLight, explicitDark)
     59         }
     60 }