diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt index 78a179ea7829394a66f4b71d8c8bcb6ab7f99d69..b7502bb51928b511048c98061c17bde4168fd3f2 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt @@ -42,6 +42,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp import org.briarproject.briar.desktop.expiration.ExpirationUtils.periodicallyCheckIfExpired import org.briarproject.briar.desktop.theme.warningBackground @@ -112,7 +113,7 @@ fun ExpirationBanner( icon = Icons.Filled.Close, contentDescription = i18n("hide"), onClick = hide, - modifier = Modifier.padding(vertical = 4.dp) + modifier = Modifier.padding(vertical = 4.dp).testTag("close_expiration") ) } } diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt index 44dc403110fff81ff35e95df42266ab08fc81037..2c1fb6164aecb1e7f6dc3bcf376dd6e952ccd11a 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt @@ -35,7 +35,6 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.toAwtImage import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.platform.LocalLocalization import androidx.compose.ui.platform.PlatformLocalization import androidx.compose.ui.res.painterResource import androidx.compose.ui.window.FrameWindowScope @@ -78,6 +77,9 @@ interface BriarUi { fun start(onClose: () -> Unit) fun stop() + + @Composable + fun test() } val LocalWindowScope = staticCompositionLocalOf<FrameWindowScope?> { null } @@ -178,29 +180,34 @@ constructor( } window.minimumSize = Dimension(800, 600) - CompositionLocalProvider( - LocalWindowScope provides this, - LocalWindowFocusState provides focusState, - LocalViewModelProvider provides viewModelProvider, - LocalConfiguration provides configuration, - LocalLocalization provides platformLocalization, - ) { - // invalidate whole application window in case the theme or language setting is changed - configuration.invalidateScreen.react { - window.title = i18n("main.title") - return@CompositionLocalProvider - } - val isDarkTheme = configuration.theme == DARK || - (configuration.theme == AUTO && isSystemInDarkTheme()) - BriarTheme(isDarkTheme) { - Column(Modifier.fillMaxSize()) { - ExpirationBanner { screenState = EXPIRED; stop() } - when (screenState) { - STARTUP -> StartupScreen() - MAIN -> MainScreen() - EXPIRED -> ErrorScreen(i18n("startup.failed.expired")) - } + } + } + + @Composable + override fun test() { + CompositionLocalProvider( + //LocalWindowScope provides this, + //LocalWindowFocusState provides focusState, + LocalViewModelProvider provides viewModelProvider, + LocalConfiguration provides configuration, + //LocalLocalization provides platformLocalization, + ) { + // invalidate whole application window in case the theme or language setting is changed + configuration.invalidateScreen.react { + //window.title = i18n("main.title") + return@CompositionLocalProvider + } + + val isDarkTheme = configuration.theme == DARK || + (configuration.theme == AUTO && isSystemInDarkTheme()) + BriarTheme(isDarkTheme) { + Column(Modifier.fillMaxSize()) { + ExpirationBanner { screenState = EXPIRED; stop() } + when (screenState) { + STARTUP -> StartupScreen() + MAIN -> MainScreen() + EXPIRED -> ErrorScreen(i18n("startup.failed.expired")) } } } diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/ScreenshotTest.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/ScreenshotTest.kt index 3586e47adb9faec3fb8f34869598768308ba8505..dc6901e09c6b7cd6f849c544fb321d8f2e60694b 100644 --- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/ScreenshotTest.kt +++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/ScreenshotTest.kt @@ -18,22 +18,16 @@ package org.briarproject.briar.desktop -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.padding -import androidx.compose.material.Button -import androidx.compose.material.Text -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier import androidx.compose.ui.test.InternalTestApi import androidx.compose.ui.test.junit4.DesktopComposeTestRule import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.performClick -import androidx.compose.ui.unit.dp +import org.briarproject.bramble.BrambleCoreEagerSingletons +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT +import org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT +import org.briarproject.briar.BriarCoreEagerSingletons +import org.briarproject.briar.desktop.TestUtils.getDataDir import org.jetbrains.skia.Color import org.jetbrains.skia.Image import org.jetbrains.skia.Surface @@ -50,24 +44,24 @@ class ScreenshotTest { @Test fun makeScreenshot() { + val dataDir = getDataDir() + val app = + DaggerBriarDesktopTestApp.builder().desktopCoreModule( + DesktopCoreModule(dataDir, DEFAULT_SOCKS_PORT, DEFAULT_CONTROL_PORT) + ).build() + // We need to load the eager singletons directly after making the + // dependency graphs + BrambleCoreEagerSingletons.Helper.injectEagerSingletons(app) + BriarCoreEagerSingletons.Helper.injectEagerSingletons(app) + + val ui = app.getBriarUi() + rule.setContent { - Column( - verticalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier.padding(16.dp), - ) { - var greetingVisible by remember { mutableStateOf(false) } - if (greetingVisible) { - Text("Hello!") - } - Button(onClick = { greetingVisible = true }) { - Text("Show greeting") - } - } + ui.test() } rule.takeScreenshot("before-click.png") - rule - .onNodeWithText("Show greeting") - .performClick() + rule.onNodeWithTag("close_expiration").performClick() + rule.waitForIdle() rule.takeScreenshot("after-click.png") } }