From 796dbfec68173ec68867d5763cfa18e64cd28be4 Mon Sep 17 00:00:00 2001 From: "Viktoria.Shirunova" Date: Thu, 6 Sep 2018 19:20:26 +0300 Subject: [PATCH] [gui-tests] PluginsDialogScenarios: changed all scenarios to use PluginDialogFixture, PluginsDialogModel removed. --- .../InstallPluginGuiTest.kt | 16 +-- .../kotlin/model/KotlinTestProperties.kt | 4 +- .../testGuiFramework/impl/GuiTestCase.kt | 4 + .../util/scenarios/PluginsDialogModel.kt | 124 ------------------ .../util/scenarios/PluginsDialogScenarios.kt | 53 +++++--- .../util/scenarios/WelcomePageModel.kt | 6 +- 6 files changed, 53 insertions(+), 154 deletions(-) delete mode 100644 platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt diff --git a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/InstallPluginGuiTest.kt b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/InstallPluginGuiTest.kt index 713e961eacfb..f39fadb6b16a 100644 --- a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/InstallPluginGuiTest.kt +++ b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/InstallPluginGuiTest.kt @@ -13,17 +13,17 @@ import org.junit.Test class InstallPluginGuiTest : KotlinGuiTestCase() { @Test fun installKotlinPlugin() { - //TODO: uncomment when new design of Plugins dialog is finished -// if (!pluginsDialogScenarios -// .isPluginRequiredVersionInstalled(KOTLIN_PLUGIN_NAME, KotlinTestProperties.kotlin_plugin_version_full)) { + if (pluginsDialogScenarios.isPluginRequiredVersionInstalled( + KOTLIN_PLUGIN_NAME, KotlinTestProperties.kotlin_plugin_version_full + ).not()) { pluginsDialogScenarios.actionAndRestart { pluginsDialogScenarios.installPluginFromDisk(KotlinTestProperties.kotlin_plugin_install_path) } -// assertTrue( -// actual = pluginsDialogScenarios -// .isPluginRequiredVersionInstalled(KOTLIN_PLUGIN_NAME, KotlinTestProperties.kotlin_plugin_version_full), -// message = "Kotlin plugin `${KotlinTestProperties.kotlin_plugin_version_full}` is not installed") -// } + assertTrue( + actual = pluginsDialogScenarios.isPluginRequiredVersionInstalled( + KOTLIN_PLUGIN_NAME, KotlinTestProperties.kotlin_plugin_version_full), + message = "Kotlin plugin `${KotlinTestProperties.kotlin_plugin_version_full}` is not installed") + } } @Test diff --git a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/KotlinTestProperties.kt b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/KotlinTestProperties.kt index a13461df382d..5166a8926f4c 100644 --- a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/KotlinTestProperties.kt +++ b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/KotlinTestProperties.kt @@ -76,10 +76,10 @@ object KotlinTestProperties { get() = getPropertyValue("kotlin.plugin.install.path") /** - * @return Kotlin plugin version with IDE marker, e.g. `1.2.41-release-IJ2018.2-1`. This value is shown in Plugins dialog. + * @return Kotlin plugin version with IDE marker, e.g. `v1.2.41-release-IJ2018.2-1`. This value is shown in Plugins dialog. */ val kotlin_plugin_version_full: String - get() = getPropertyValue("kotlin.plugin.version.full") + get() = "v${getPropertyValue("kotlin.plugin.version.full")}" /** * @return path where the Java is installed diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt index 8d7353f22231..9e5512bf246e 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt @@ -118,6 +118,10 @@ open class GuiTestCase { if (!needToKeepDialog) pluginDialog.waitTillGone() } + fun pluginDialog(timeout: Timeout = Timeouts.defaultTimeout) : PluginDialogFixture{ + return PluginDialogFixture(robot(), findDialog("Plugins", false, timeout)) + } + /** * Waits for a native file chooser, types the path in a textfield and closes it by clicking OK button. Or runs AppleScript if the file chooser * is a Mac native. diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt deleted file mode 100644 index a0ba9da5d55b..000000000000 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.testGuiFramework.util.scenarios - -import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.fixtures.extended.ExtendedButtonFixture -import com.intellij.testGuiFramework.framework.Timeouts -import com.intellij.testGuiFramework.impl.* -import com.intellij.testGuiFramework.util.logInfo -import com.intellij.testGuiFramework.util.logTestStep -import com.intellij.testGuiFramework.util.logUIStep -import com.intellij.testGuiFramework.utils.TestUtilsClass -import com.intellij.testGuiFramework.utils.TestUtilsClassCompanion -import org.fest.swing.exception.WaitTimedOutError -import javax.swing.JDialog - - -class PluginsDialogModel(val testCase: GuiTestCase) : TestUtilsClass(testCase) { - companion object : TestUtilsClassCompanion( - { PluginsDialogModel(it) } - ) -} - -val GuiTestCase.pluginsDialogModel: PluginsDialogModel by PluginsDialogModel - -fun PluginsDialogModel.connectDialog(): JDialogFixture = - testCase.dialog("Plugins", true, Timeouts.defaultTimeout) - -fun PluginsDialogModel.isPluginInstalled(pluginName: String): Boolean { - val result = try { - with(testCase) { - logTestStep("Search `$pluginName` plugin") - val dialog = connectDialog() - dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() - } - true - } - catch (e: Exception) { - testCase.logInfo("No `$pluginName` plugin found") - false - } - return result -} - -fun PluginsDialogModel.isPluginRequiredVersionInstalled(pluginName: String, pluginVersion: String): Boolean = - isPluginInstalled(pluginName) && getPluginVersion(pluginName).contains(pluginVersion) - -fun PluginsDialogModel.getPluginVersion(pluginName: String): String { - val version = try { - with(testCase) { - logTestStep("Search `$pluginName` plugin") - val dialog = connectDialog() - dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() - logUIStep("Get installed version of `$pluginName` plugin") - dialog.label("Version").text()?.removePrefix("version:")?.trim() ?: "" - } - } - catch (e: Exception) { - testCase.logInfo("No `$pluginName` plugin found") - "" - } - testCase.logInfo("Found `$version` version of `$pluginName` plugin") - return version -} - -fun PluginsDialogModel.getPluginButton(pluginName: String, buttonName: String): ExtendedButtonFixture? { - return try { - with(testCase) { - logTestStep("Search `$pluginName` plugin") - val dialog = connectDialog() - dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() - logUIStep("Search `$buttonName` button") - dialog.button(buttonName) - } - } - catch (e: Exception) { - testCase.logInfo("No `$buttonName` found for `$pluginName` plugin") - null - } -} - -fun PluginsDialogModel.getUninstallButton(pluginName: String): ExtendedButtonFixture? = getPluginButton(pluginName, "Uninstall") -fun PluginsDialogModel.getUpdatesButton(pluginName: String): ExtendedButtonFixture? = getPluginButton(pluginName, "Updates") -fun PluginsDialogModel.getRestartButton(pluginName: String): ExtendedButtonFixture? = getPluginButton(pluginName, "Restart IntelliJ IDEA") - -fun PluginsDialogModel.getButton(buttonName: String): ExtendedButtonFixture?{ - return with(testCase) { - connectDialog().button(buttonName) - } -} -fun PluginsDialogModel.pressButton(buttonName: String) { - testCase.logUIStep("Press `$buttonName` button") - getButton(buttonName)?.click() -} - -fun PluginsDialogModel.pressOk(): Unit = pressButton("OK") -fun PluginsDialogModel.pressCancel(): Unit = pressButton("Cancel") - -fun PluginsDialogModel.installPluginFromDisk(pluginFileName: String){ - with(connectDialog()){ - guiTestCase.logUIStep("Press `Install plugin from disk`") - actionButtonByClass("").click() - popupMenu("Install Plugin from Disk...").clickSearchedItem() - guiTestCase.chooseFileInFileChooser(pluginFileName) - pressOk() - ensureButtonOkHasPressed() - } -} - -fun PluginsDialogModel.ensureButtonOkHasPressed() { - val dialogTitle = "Plugins" - try { - testCase.logTestStep("Check that `Plugins` dialog closed") - GuiTestUtilKt.waitUntilGone(robot = testCase.robot(), - timeout = Timeouts.seconds05, - matcher = GuiTestUtilKt.typeMatcher( - JDialog::class.java) { it.isShowing && it.title == dialogTitle }) - } - catch (timeoutError: WaitTimedOutError) { - with(testCase) { - logUIStep("`Plugins` dialog not closed. Press OK again") - getButton("OK")?.clickWhenEnabled() - } - } -} \ No newline at end of file diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt index 2726e8175d1a..a8dc41a2b337 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt @@ -13,6 +13,7 @@ import com.intellij.testGuiFramework.remote.transport.RestartIdeCause import com.intellij.testGuiFramework.remote.transport.TransportMessage import com.intellij.testGuiFramework.util.logInfo import com.intellij.testGuiFramework.util.logTestStep +import com.intellij.testGuiFramework.util.logUIStep import com.intellij.testGuiFramework.utils.TestUtilsClass import com.intellij.testGuiFramework.utils.TestUtilsClassCompanion @@ -27,20 +28,16 @@ val GuiTestCase.pluginsDialogScenarios: PluginsDialogScenarios by PluginsDialogS fun PluginsDialogScenarios.uninstallPlugin(pluginName: String) { with(testCase) { welcomePageDialogModel.openPluginsDialog() - if (pluginsDialogModel.isPluginInstalled(pluginName)) { - val uninstallButton = pluginsDialogModel.getUninstallButton(pluginName) - if (uninstallButton != null) { - logTestStep("Uninstall `$pluginName` plugin") - uninstallButton.click() - pluginsDialogModel.pressOk() + pluginDialog { + pluginDetails(pluginName) { + if (isPluginInstalled()) { + logTestStep("Uninstall `$pluginName` plugin") + uninstall() + } } - else { - pluginsDialogModel.pressCancel() - } - dialog("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } + ok() } - else - pluginsDialogModel.pressCancel() + dialog("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } } } @@ -66,17 +63,39 @@ fun PluginsDialogScenarios.actionAndRestart(actionFunction: () -> Unit) { fun PluginsDialogScenarios.installPluginFromDisk(pluginFileName: String) { with(testCase) { welcomePageDialogModel.openPluginsDialog() - pluginsDialogModel.installPluginFromDisk(pluginFileName) + pluginDialog { + showInstallPluginFromDiskDialog() + installPluginFromDiskDialog { + setPath(pluginFileName) + clickOk() + } + ok() + } dialog("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } } } fun PluginsDialogScenarios.isPluginRequiredVersionInstalled(pluginName: String, pluginVersion: String): Boolean { - var result = false + var version = "" with(testCase) { welcomePageDialogModel.openPluginsDialog() - result = pluginsDialogModel.isPluginRequiredVersionInstalled(pluginName, pluginVersion) - pluginsDialogModel.pressCancel() + pluginDialog { + showInstalledPlugins() + cancel() + } + welcomePageDialogModel.openPluginsDialog() + testCase.logUIStep("Get version of `$pluginName` plugin") + pluginDialog { + if (isPluginInstalled(pluginName)) { + pluginDetails(pluginName) { + version = pluginVersion() + testCase.logInfo("Found `$version` version of `$pluginName` plugin") + } + } + else + testCase.logInfo("No `$pluginName` plugin") + cancel() + } } - return result + return version == pluginVersion } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/WelcomePageModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/WelcomePageModel.kt index a599f20233f0..48e446ff034e 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/WelcomePageModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/WelcomePageModel.kt @@ -1,7 +1,7 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.testGuiFramework.util.scenarios -import com.intellij.testGuiFramework.fixtures.JDialogFixture +import com.intellij.testGuiFramework.fixtures.PluginDialogFixture import com.intellij.testGuiFramework.fixtures.WelcomeFrameFixture import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.util.logTestStep @@ -30,10 +30,10 @@ fun WelcomePageDialogModel.createNewProject() { testCase.newProjectDialogModel.waitLoadingTemplates() } -fun WelcomePageDialogModel.openPluginsDialog():JDialogFixture{ +fun WelcomePageDialogModel.openPluginsDialog(): PluginDialogFixture { with(testCase) { logTestStep("Open `Plugins` dialog") WelcomeFrameFixture.findSimple().openPluginsDialog() - return pluginsDialogModel.connectDialog() + return pluginDialog() } } \ No newline at end of file