From 6ddf70b998a05ce01b3d58f04553548ba5ff767f Mon Sep 17 00:00:00 2001 From: "Dmitry.Yudin" Date: Mon, 24 Feb 2025 01:00:37 +0100 Subject: [PATCH] [remote-driver] Refactor licensing UI tests for free mode and exit handling Refactored licensing UI tests to support free mode and introduced conditional exit/restart dialogs. GitOrigin-RevId: c2689d6f015ab535f2535673bdb1b37fde91da7b --- .../common/dialogs/LicenseDialogUi.kt | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/LicenseDialogUi.kt b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/LicenseDialogUi.kt index f716f70b561a..670b0e48b9b0 100644 --- a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/LicenseDialogUi.kt +++ b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/common/dialogs/LicenseDialogUi.kt @@ -5,19 +5,16 @@ import com.intellij.driver.sdk.application.fullProductName import com.intellij.driver.sdk.ui.Finder import com.intellij.driver.sdk.ui.components.ComponentData import com.intellij.driver.sdk.ui.components.UiComponent -import com.intellij.driver.sdk.ui.components.elements.list import com.intellij.driver.sdk.ui.components.elements.radioButton import com.intellij.driver.sdk.ui.ui -import javax.swing.JList -fun Finder.licenseDialog(action: LicenseDialogUi.() -> Unit) { +private fun Finder.licenseDialog(action: LicenseDialogUi.() -> Unit) { x("//div[@title='Manage Licenses']", LicenseDialogUi::class.java).action() } fun Driver.licenseDialog(action: LicenseDialogUi.() -> Unit = {}) = this.ui.licenseDialog(action) class LicenseDialogUi(data: ComponentData) : UiComponent(data) { - val productsList = list { byType(JList::class.java) } val licenseServerRadioButton = radioButton { byAccessibleName("License server") } val licenseServerTextField = x { byClass("JBTextField") } val activationCodeRadioButton = radioButton { byAccessibleName("Activation code") } @@ -29,10 +26,13 @@ class LicenseDialogUi(data: ComponentData) : UiComponent(data) { val startTrialTab = x { and(byClass("SegmentedButton"), byAccessibleName("Start trial")) } val startTrialButton = x("//div[@class!='SegmentedButton' and @accessiblename='Start Free 30-Day Trial']") val continueButton = x { byAccessibleName("Continue") } - val deactivateLicenseButton = x { contains(byAccessibleName("Deactivate License")) } + val removeLicenseButton: UiComponent = x { contains(byAccessibleName("Remove License")) } val closeButton = x { byAccessibleName("Close") } - val exitButton = x("//div[@accessiblename='Quit ${driver.fullProductName}']") val optionsButton = x { byAccessibleName("Options") } + + //Depend on the free mode support (restart if IDE supports free mode) + val exitButton: UiComponent = x { byAccessibleName("Quit ${driver.fullProductName}") } + val restartButton: UiComponent = x { byAccessibleName("Restart Unsubscribed") } } val Finder.tokenAuthDialog get() = x("//div[@title='${driver.fullProductName}']", TokenAuthDialogUi::class.java) @@ -62,4 +62,27 @@ class EducationalLicenseExpirationDialogUi(data: ComponentData) : UiComponent(da val renewLicenseButton = x { contains(byText("Renew license")) } val dismissButton = x { byText("Dismiss") } val discountLink get() = x { contains(byVisibleText("40%")) }.getAllTexts { it.text.contains("40%") }[0] +} + +fun LicenseDialogUi.exitConfirmationDialog(action: ExitConfirmationDialogUi.() -> Unit) { + x("//div[@title='Confirm Exit']", ExitConfirmationDialogUiCommonImpl::class.java).action() +} + +fun LicenseDialogUi.restartToFreeModeConfirmationDialog(action: ExitConfirmationDialogUi.() -> Unit) { + x("//div[@title='Confirm Restart']", RestartToFreeModeConfirmationDialogUi::class.java).action() +} + +abstract class ExitConfirmationDialogUi(data: ComponentData): UiComponent(data) { + abstract val exitConfirmButton: UiComponent + abstract val cancelButton: UiComponent +} + +private class ExitConfirmationDialogUiCommonImpl(data: ComponentData): ExitConfirmationDialogUi(data) { + override val exitConfirmButton: UiComponent = x { byAccessibleName("Exit") } + override val cancelButton: UiComponent = x { byAccessibleName("Back to Activation") } +} + +private class RestartToFreeModeConfirmationDialogUi(data: ComponentData): ExitConfirmationDialogUi(data) { + override val exitConfirmButton: UiComponent = x { byAccessibleName("Restart") } + override val cancelButton: UiComponent = x { byAccessibleName("Back to Subscriptions") } } \ No newline at end of file