[gui-tests] PluginsDialogScenarios: changed all scenarios to use PluginDialogFixture, PluginsDialogModel removed.

This commit is contained in:
Viktoria.Shirunova
2018-09-06 23:23:42 +03:00
parent 265a9dea08
commit 796dbfec68
6 changed files with 53 additions and 154 deletions
@@ -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
@@ -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
@@ -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.
@@ -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>(
{ 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()
}
}
}
@@ -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
}
@@ -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()
}
}