From dbef3be4662f2587455c2436e4b73fb42187016b Mon Sep 17 00:00:00 2001 From: "Viktoria.Shirunova" Date: Fri, 3 Aug 2018 13:41:09 +0300 Subject: [PATCH] [gui-test] unified using of timeouts --- .../installKotlinPlugin/CreateSdksGuiTest.kt | 5 +- .../kotlin/model/ActionsInProjectStructure.kt | 5 +- .../kotlin/model/ProjectsWithKotlin.kt | 5 +- .../community/CommunityProjectCreator.kt | 3 +- .../tests/community/IdeaUpdateGuiTest.kt | 3 +- .../tests/community/focus/FocusIssuesUtil.kt | 2 +- .../focus/InputMethodJapaneseFocusTest.kt | 2 +- .../driver/ExtendedJTreeDriver.kt | 5 +- .../fixtures/ActionButtonFixture.java | 8 +- .../fixtures/ActionLinkFixture.java | 6 +- .../fixtures/AsyncProcessIconFixture.kt | 5 +- .../fixtures/ComboBoxActionFixture.java | 6 +- .../fixtures/ComboBoxFixture.kt | 12 +-- .../ConfigureProjectSubsetDialogFixture.java | 3 +- .../fixtures/CustomToolWindowFixture.kt | 15 ++-- .../fixtures/EditorFixture.java | 8 +- .../EditorNotificationPanelFixture.kt | 6 +- .../fixtures/EditorTabsFixture.kt | 4 +- .../fixtures/FileChooserDialogFixture.kt | 7 +- .../fixtures/FileEditorFixture.java | 8 +- .../fixtures/FileFixture.java | 8 +- .../fixtures/IdeFrameFixture.java | 11 +-- .../fixtures/InplaceButtonFixture.kt | 12 +-- .../fixtures/JBPopupMenuFixture.java | 5 +- .../fixtures/JDialogFixture.java | 4 +- .../testGuiFramework/fixtures/MenuFixture.kt | 5 +- .../fixtures/MessageDialogFixture.java | 5 +- .../fixtures/MessagesFixture.java | 9 +- .../fixtures/PluginDialogFixture.kt | 30 +++---- .../fixtures/PluginTableFixture.kt | 4 +- .../fixtures/ProjectViewFixture.kt | 9 +- .../fixtures/RunConfigurationListFixture.kt | 6 +- .../fixtures/SelectSdkDialogFixture.java | 5 +- .../fixtures/TerminalFixture.kt | 10 ++- .../fixtures/ToolWindowFixture.java | 14 +-- .../fixtures/WelcomeFrameFixture.kt | 4 +- .../extended/ExtendedButtonFixture.kt | 13 +-- .../extended/ExtendedJTreePathFixture.kt | 3 +- .../NewProjectWizardFixture.java | 7 +- .../testGuiFramework/framework/GuiTestUtil.kt | 55 ++++-------- .../testGuiFramework/framework/Timeouts.kt | 26 ++++++ .../impl/ComponentFixtureUtils.kt | 88 +++++++++---------- .../testGuiFramework/impl/FirstStart.kt | 41 ++++----- .../testGuiFramework/impl/GuiTestCase.kt | 28 +++--- .../testGuiFramework/impl/GuiTestCaseExt.kt | 14 ++- .../testGuiFramework/impl/GuiTestRule.kt | 7 +- .../testGuiFramework/impl/GuiTestUtilKt.kt | 30 ++++--- .../testCases/PluginTestCase.kt | 9 +- .../testCases/SystemPropertiesTestCase.kt | 3 +- .../scenarios/EnvironmentVariablesModel.kt | 4 +- .../util/scenarios/NewProjectDialogModel.kt | 6 +- .../util/scenarios/PluginsDialogModel.kt | 14 +-- .../util/scenarios/PluginsDialogScenarios.kt | 7 +- .../scenarios/ProjectStructureDialogModel.kt | 2 +- .../util/scenarios/RunConfigurationModel.kt | 12 +-- .../scenarios/RunConfigurationScenarios.kt | 6 +- 56 files changed, 341 insertions(+), 293 deletions(-) create mode 100644 platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/Timeouts.kt diff --git a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/CreateSdksGuiTest.kt b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/CreateSdksGuiTest.kt index 336da4b513e3..f13952bfe4e5 100644 --- a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/CreateSdksGuiTest.kt +++ b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/installKotlinPlugin/CreateSdksGuiTest.kt @@ -3,6 +3,7 @@ package com.intellij.ide.projectWizard.kotlin.installKotlinPlugin import com.intellij.ide.projectWizard.kotlin.model.KotlinGuiTestCase import com.intellij.ide.projectWizard.kotlin.model.KotlinTestProperties +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.logInfo import com.intellij.testGuiFramework.util.logTestStep @@ -50,7 +51,7 @@ class CreateSdksGuiTest : KotlinGuiTestCase() { jList("SDKs").clickItem("SDKs") val kotlinSdk = "Kotlin SDK" try{ - jTree(kotlinSdk, timeout = 1L) + jTree(kotlinSdk, timeout = Timeouts.noTimeout) logInfo("$kotlinSdk exists") } catch (e: ComponentLookupException){ @@ -58,7 +59,7 @@ class CreateSdksGuiTest : KotlinGuiTestCase() { actionButton("Add New SDK").click() popupMenu(kotlinSdk).clickSearchedItem() logUIStep("Going to check whether $kotlinSdk created") - jTree(kotlinSdk, timeout = 1L) + jTree(kotlinSdk, timeout = Timeouts.seconds05) } finally { logUIStep("Close `$dialogName` dialog with OK") diff --git a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ActionsInProjectStructure.kt b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ActionsInProjectStructure.kt index f4ea4cf2f5d1..d2fe7b53a6ed 100644 --- a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ActionsInProjectStructure.kt +++ b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ActionsInProjectStructure.kt @@ -1,21 +1,20 @@ // 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.ide.projectWizard.kotlin.model +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.jTree import com.intellij.testGuiFramework.impl.selectWithKeyboard import com.intellij.testGuiFramework.util.logError import com.intellij.testGuiFramework.util.logUIStep import com.intellij.testGuiFramework.util.scenarios.* -const val localTimeout = 2L // default timeout is 2 minutes and it's too big for most of tasks here - // Attention: it's supposed that Project Structure dialog is open both before the function // executed and after fun ProjectStructureDialogModel.checkFacetInOneModule(expectedFacet: FacetStructure, vararg path: String) { checkModule { with(guiTestCase) { try { - jTree(path[0], timeout = localTimeout).selectWithKeyboard(this, *path) + jTree(path[0], timeout = Timeouts.seconds05).selectWithKeyboard(this, *path) logUIStep("Check facet for module `${path.joinToString(" -> ")}`") (this as KotlinGuiTestCase).checkFacetState(expectedFacet) } diff --git a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ProjectsWithKotlin.kt b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ProjectsWithKotlin.kt index ea8803777e6f..ed9586dc3dbc 100644 --- a/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ProjectsWithKotlin.kt +++ b/community-guitests/testSrc/com/intellij/ide/projectWizard/kotlin/model/ProjectsWithKotlin.kt @@ -3,13 +3,14 @@ package com.intellij.ide.projectWizard.kotlin.model import com.intellij.openapi.application.PathManager import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts.defaultTimeout import com.intellij.testGuiFramework.framework.GuiTestUtil.fileSearchAndReplace import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import com.intellij.testGuiFramework.util.* import com.intellij.testGuiFramework.util.scenarios.* import org.fest.swing.exception.ComponentLookupException +import org.fest.swing.timing.Timeout import java.io.File import java.nio.file.Path import java.nio.file.Paths @@ -618,7 +619,7 @@ fun KotlinGuiTestCase.checkFacetState(facet: FacetStructure) { // TODO: remove it after GUI-59 fixing fun KotlinGuiTestCase.dialogWithoutClosing(title: String? = null, ignoreCaseTitle: Boolean = false, - timeout: Long = defaultTimeout, + timeout: Timeout = defaultTimeout, func: JDialogFixture.() -> Unit) { val dialog = dialog(title, ignoreCaseTitle, timeout) func(dialog) diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/CommunityProjectCreator.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/CommunityProjectCreator.kt index 19a5ddce6a4a..f9211d18403d 100644 --- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/CommunityProjectCreator.kt +++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/CommunityProjectCreator.kt @@ -3,6 +3,7 @@ package com.intellij.testGuiFramework.tests.community import com.intellij.ide.IdeBundle import com.intellij.openapi.diagnostic.Logger +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.Key.A import com.intellij.testGuiFramework.util.Key.V @@ -53,7 +54,7 @@ class CommunityProjectCreator(guiTestCase: GuiTestCase) : TestUtilsClass(guiTest private fun GuiTestCase.checkFileAlreadyExistsDialog() { try { - val dialogFixture = dialog(IdeBundle.message("title.file.already.exists"), false, 10L) + val dialogFixture = dialog(IdeBundle.message("title.file.already.exists"), false, Timeouts.seconds10) dialogFixture.button("Yes").click() } catch (cle: ComponentLookupException) { /*do nothing here */ } } diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/IdeaUpdateGuiTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/IdeaUpdateGuiTest.kt index 8917105a68bf..6ddcb550e304 100644 --- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/IdeaUpdateGuiTest.kt +++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/IdeaUpdateGuiTest.kt @@ -2,6 +2,7 @@ package com.intellij.testGuiFramework.tests.community import com.intellij.testGuiFramework.framework.RunWithIde +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt.typeMatcher import com.intellij.testGuiFramework.impl.actionLink import com.intellij.testGuiFramework.impl.button @@ -24,7 +25,7 @@ class IdeaUpdateGuiTest : SystemPropertiesTestCase() { @Test fun testIdeaUpdate() { restartIdeWithSystemProperties(arrayOf(Pair("idea.updates.url", customUpdatesXml.toString()))) - welcomeFrame { actionLink("Events", timeout = 60).click() } + welcomeFrame { actionLink("Events", timeout = Timeouts.minutes01).click() } clickTextInJEditorPane() dialog("IDE and Plugin Updates") { button("Remind Me Later").click() } } diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/FocusIssuesUtil.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/FocusIssuesUtil.kt index b587ba37a313..f40755d72af9 100644 --- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/FocusIssuesUtil.kt +++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/FocusIssuesUtil.kt @@ -2,7 +2,7 @@ package com.intellij.testGuiFramework.tests.community.focus import com.intellij.ide.actions.searcheverywhere.SearchEverywhereUI -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts.defaultTimeout import com.intellij.testGuiFramework.framework.GuiTestUtil.textfield import com.intellij.testGuiFramework.impl.GuiRobotHolder import com.intellij.testGuiFramework.impl.GuiTestUtilKt diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/InputMethodJapaneseFocusTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/InputMethodJapaneseFocusTest.kt index 5f5c0d574dcd..40238324561f 100644 --- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/InputMethodJapaneseFocusTest.kt +++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/InputMethodJapaneseFocusTest.kt @@ -6,7 +6,7 @@ import com.intellij.testGuiFramework.fixtures.IdeFrameFixture import com.intellij.testGuiFramework.framework.GuiTestUtil.textfield import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.impl.GuiTestUtilKt -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts.defaultTimeout import com.intellij.testGuiFramework.tests.community.CommunityProjectCreator import com.intellij.testGuiFramework.util.Key.ESCAPE import org.fest.swing.core.SmartWaitRobot diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/driver/ExtendedJTreeDriver.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/driver/ExtendedJTreeDriver.kt index c60b98cc6701..4ac586664bc4 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/driver/ExtendedJTreeDriver.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/driver/ExtendedJTreeDriver.kt @@ -18,6 +18,7 @@ import org.fest.swing.driver.JTreeLocation import org.fest.swing.exception.ActionFailedException import org.fest.swing.exception.LocationUnavailableException import org.fest.swing.exception.WaitTimedOutError +import org.fest.swing.timing.Timeout import org.fest.swing.util.Pair import org.fest.swing.util.Triple import java.awt.Point @@ -109,9 +110,9 @@ open class ExtendedJTreeDriver(robot: Robot = GuiRobotHolder.robot) : JTreeDrive } private fun JTree.waitForChildrenToShowUp(path: TreePath) { - val timeoutInSeconds = robot.settings().timeoutToBeVisible() * 1000 // convert ms to s try { - GuiTestUtilKt.waitUntil("Waiting for children are shown up", timeoutInSeconds) { this.childCount(path) != 0 } + GuiTestUtilKt.waitUntil( "Waiting for children are shown up", + Timeout.timeout(robot.settings().timeoutToBeVisible().toLong())) { this.childCount(path) != 0 } } catch (waitTimedOutError: WaitTimedOutError) { throw LocationUnavailableException(waitTimedOutError.message!!) diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ActionButtonFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ActionButtonFixture.java index e4a18ec71fed..639953d13c95 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ActionButtonFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ActionButtonFixture.java @@ -19,7 +19,7 @@ import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.impl.ActionButton; import com.intellij.openapi.util.Ref; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; import org.fest.swing.edt.GuiQuery; @@ -102,7 +102,7 @@ public class ActionButtonFixture extends JComponentFixture(AsyncProcessIconFixture::class.java, robot, target) { - fun waitUntilStop(timeoutInSeconds: Int) { - GuiTestUtilKt.waitUntil("async process icon will stop", timeoutInSeconds) { !target().isRunning } + fun waitUntilStop(timeout: Timeout) { + GuiTestUtilKt.waitUntil("async process icon will stop", timeout) { !target().isRunning } } } \ No newline at end of file diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxActionFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxActionFixture.java index 848ab6dfdfdb..ff977cc79b37 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxActionFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxActionFixture.java @@ -16,7 +16,7 @@ package com.intellij.testGuiFramework.fixtures; import com.intellij.openapi.actionSystem.ex.ComboBoxAction; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.JBListWithHintProvider; import com.intellij.ui.popup.PopupFactoryImpl; import com.intellij.ui.popup.list.ListPopupModel; @@ -104,7 +104,7 @@ public class ComboBoxActionFixture { } }); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); comboBoxButtonFixture.click(); } @@ -127,7 +127,7 @@ public class ComboBoxActionFixture { } return false; } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); final Integer appIndex = execute(new GuiQuery() { @Override diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxFixture.kt index 9635d27ddc84..ceca8d1dd4ac 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ComboBoxFixture.kt @@ -15,11 +15,13 @@ */ package com.intellij.testGuiFramework.fixtures +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import org.fest.swing.core.Robot import org.fest.swing.exception.ComponentLookupException import org.fest.swing.exception.LocationUnavailableException import org.fest.swing.fixture.JComboBoxFixture +import org.fest.swing.timing.Timeout import javax.swing.JButton import javax.swing.JComboBox @@ -34,23 +36,23 @@ class ComboBoxFixture(robot: Robot, comboBox: JComboBox<*>) : JComboBoxFixture(r } //We are waiting for a item to be shown in dropdown list. It is necessary for a async comboboxes - fun selectItem(itemName: String, timeoutInSeconds: Int = 30): ComboBoxFixture { - waitUntil("item '$itemName' will be appeared in dropdown list", timeoutInSeconds) { + fun selectItem(itemName: String, timeout: Timeout = Timeouts.defaultTimeout): ComboBoxFixture { + waitUntil("item '$itemName' will be appeared in dropdown list", timeout) { doSelectItem { super.selectItem(itemName) } } return this } //We are waiting for a item to be shown in dropdown list. It is necessary for a async comboboxes - fun selectItem(itemIndex: Int, timeoutInSeconds: Int = 30): ComboBoxFixture { - waitUntil("item with index $itemIndex will be appeared in dropdown list", timeoutInSeconds) { + fun selectItem(itemIndex: Int, timeout: Timeout = Timeouts.defaultTimeout): ComboBoxFixture { + waitUntil("item with index $itemIndex will be appeared in dropdown list", timeout) { doSelectItem { super.selectItem(itemIndex) } } return this } override fun selectItem(index: Int): ComboBoxFixture { - return selectItem(index, 30) + return selectItem(index) } /** diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ConfigureProjectSubsetDialogFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ConfigureProjectSubsetDialogFixture.java index bfb3cb2320c8..697f6907d0b9 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ConfigureProjectSubsetDialogFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ConfigureProjectSubsetDialogFixture.java @@ -16,6 +16,7 @@ package com.intellij.testGuiFramework.fixtures; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import org.fest.swing.core.Robot; import org.fest.swing.core.matcher.DialogMatcher; import org.fest.swing.fixture.DialogFixture; @@ -36,7 +37,7 @@ public class ConfigureProjectSubsetDialogFixture { @NotNull public static ConfigureProjectSubsetDialogFixture find(@NotNull Robot robot) { DialogMatcher matcher = withTitle("Select Modules to Include in Project Subset").andShowing(); - DialogFixture dialog = findDialog(matcher).withTimeout(GuiTestUtil.INSTANCE.getSHORT_TIMEOUT().duration()).using(robot); + DialogFixture dialog = findDialog(matcher).withTimeout(Timeouts.INSTANCE.getMinutes02().duration()).using(robot); return new ConfigureProjectSubsetDialogFixture(dialog); } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/CustomToolWindowFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/CustomToolWindowFixture.kt index 8a21fc15b21a..9c68272a416d 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/CustomToolWindowFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/CustomToolWindowFixture.kt @@ -19,6 +19,7 @@ import com.intellij.openapi.actionSystem.impl.ActionButton import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl import com.intellij.openapi.editor.impl.EditorComponentImpl import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt import com.intellij.ui.content.Content import com.intellij.util.ui.UIUtil.findComponentOfType @@ -26,6 +27,7 @@ import com.intellij.util.ui.UIUtil.findComponentsOfType import org.fest.swing.core.GenericTypeMatcher import org.fest.swing.core.Robot import org.fest.swing.exception.ComponentLookupException +import org.fest.swing.timing.Timeout import org.fest.swing.util.TextMatcher import org.junit.Assert.assertNotNull import javax.swing.JComponent @@ -61,14 +63,15 @@ class CustomToolWindowFixture(val toolWindowId: String, val ideFrame: IdeFrameFi return ContentFixture(this, myRobot, content!!) } - private fun findContent(tabName: String, timeoutInSeconds: Int): ContentFixture { - selectContentWithTimeout(tabName, timeoutInSeconds) - val content = getContent(tabName) ?: throw ComponentLookupException("Unable to find content with a tab name: \"$tabName\" for a toolwindow with id: \"$toolWindowId\"") + private fun findContent(tabName: String, timeout: Timeout): ContentFixture { + selectContentWithTimeout(tabName, timeout) + val content = getContent(tabName) ?: throw ComponentLookupException( + "Unable to find content with a tab name: \"$tabName\" for a toolwindow with id: \"$toolWindowId\"") return ContentFixture(this, myRobot, content) } - private fun selectContentWithTimeout(tabName: String, timeoutInSeconds: Int) { - GuiTestUtilKt.waitUntil("content with a tab name '$tabName' is appeared for a toolwindow with id: \"$toolWindowId\"", timeoutInSeconds) { + private fun selectContentWithTimeout(tabName: String, timeout: Timeout) { + GuiTestUtilKt.waitUntil("content with a tab name '$tabName' is appeared for a toolwindow with id: \"$toolWindowId\"", timeout) { try { selectContent(tabName) true @@ -87,7 +90,7 @@ class CustomToolWindowFixture(val toolWindowId: String, val ideFrame: IdeFrameFi /**----------EXTENSION FUNCTIONS FOR GuiTestCase APi----------**/ - fun content(tabName: String, timeoutInSeconds: Int = 30, func: ContentFixture.() -> Unit) { + fun content(tabName: String, timeoutInSeconds: Timeout = Timeouts.seconds30, func: ContentFixture.() -> Unit) { func.invoke(findContent(tabName, timeoutInSeconds)) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorFixture.java index 890b13d388e0..31e82d781a0d 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorFixture.java @@ -21,7 +21,7 @@ import com.intellij.openapi.keymap.Keymap; import com.intellij.openapi.keymap.KeymapManager; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.testGuiFramework.impl.ComponentFixtureUtilsKt; import com.intellij.testGuiFramework.util.Predicate; import org.fest.swing.core.ComponentDragAndDrop; @@ -396,7 +396,7 @@ public class EditorFixture { public boolean test() { return editor.getContentComponent().isShowing(); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); if (editor != null) { JComponent contentComponent = editor.getContentComponent(); @@ -776,13 +776,13 @@ public class EditorFixture { public EditorFixture invokeIntentionAction(@NotNull String labelPrefix) { invokeAction(EditorFixture.EditorAction.SHOW_INTENTION_ACTIONS); ComponentFixtureUtilsKt - .popupMenu(labelPrefix, robot, null, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT(), Predicate.INSTANCE.getEquality()) + .popupMenu(labelPrefix, robot, null, Timeouts.INSTANCE.getMinutes02(), Predicate.INSTANCE.getEquality()) .clickSearchedItem(); return this; } public EditorNotificationPanelFixture notificationPanel() { - return EditorNotificationPanelFixture.Companion.findEditorNotificationPanel(robot, 30); + return EditorNotificationPanelFixture.Companion.findEditorNotificationPanel(robot, Timeouts.INSTANCE.getSeconds30()); } /** diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorNotificationPanelFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorNotificationPanelFixture.kt index cf0d992a36fa..a165ea6ca854 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorNotificationPanelFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorNotificationPanelFixture.kt @@ -15,10 +15,12 @@ */ package com.intellij.testGuiFramework.fixtures +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt import com.intellij.ui.EditorNotificationPanel import com.intellij.ui.HyperlinkLabel import org.fest.swing.core.Robot +import org.fest.swing.timing.Timeout import javax.swing.JLabel class EditorNotificationPanelFixture(val robot: Robot, @@ -52,8 +54,8 @@ class EditorNotificationPanelFixture(val robot: Robot, private fun JLabel.nonNullSize() = this.height > 0 && this.width > 0 companion object { - fun findEditorNotificationPanel(robot: Robot, timeoutInSeconds: Int = 30): EditorNotificationPanelFixture { - val panel = GuiTestUtilKt.withPauseWhenNull(timeoutInSeconds = timeoutInSeconds) { findEditorNotificationPanel(robot) } + fun findEditorNotificationPanel(robot: Robot, timeout: Timeout = Timeouts.seconds30): EditorNotificationPanelFixture { + val panel = GuiTestUtilKt.withPauseWhenNull(timeout = timeout) { findEditorNotificationPanel(robot) } return EditorNotificationPanelFixture(robot, panel) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorTabsFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorTabsFixture.kt index 46de4b2c57ac..16ce0d7410cc 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorTabsFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/EditorTabsFixture.kt @@ -30,6 +30,7 @@ */ package com.intellij.testGuiFramework.fixtures +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.findAllWithBFS import com.intellij.ui.InplaceButton @@ -37,6 +38,7 @@ import com.intellij.ui.SimpleColoredComponent import com.intellij.ui.tabs.impl.JBEditorTabs import com.intellij.ui.tabs.impl.TabLabel import org.fest.swing.core.Robot +import org.fest.swing.timing.Timeout import java.awt.Container import java.awt.Point import java.awt.Rectangle @@ -72,7 +74,7 @@ class EditorTabsFixture(val robot: Robot, val ideFrameFixture: IdeFrameFixture) robot.click(closeButton) } - fun waitTab(tabName: String, timeoutInSeconds: Int = 30): EditorTabsFixture { + fun waitTab(tabName: String, timeoutInSeconds: Timeout = Timeouts.seconds30): EditorTabsFixture { GuiTestUtilKt.waitUntil("editor tab with name '$tabName' has appeared", timeoutInSeconds) { hasTab(tabName) } return this } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileChooserDialogFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileChooserDialogFixture.kt index 3848ca88a843..a60814c7e657 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileChooserDialogFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileChooserDialogFixture.kt @@ -18,8 +18,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.openapi.fileChooser.ex.FileChooserDialogImpl import com.intellij.openapi.fileChooser.ex.FileSystemTreeImpl import com.intellij.openapi.vfs.VirtualFile -import com.intellij.testGuiFramework.framework.GuiTestUtil -import com.intellij.testGuiFramework.framework.GuiTestUtil.SHORT_TIMEOUT +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.framework.GuiTestUtil.findAndClickOkButton import org.fest.reflect.core.Reflection.field import org.fest.swing.core.GenericTypeMatcher @@ -61,7 +60,7 @@ class FileChooserDialogFixture private constructor(robot: Robot, override fun test(): Boolean { return fileSelected.get() } - }, SHORT_TIMEOUT) + }, Timeouts.minutes02) return this } @@ -86,7 +85,7 @@ class FileChooserDialogFixture private constructor(robot: Robot, val text = textFieldFixture.text() return text != null && text.isNotEmpty() } - }, GuiTestUtil.THIRTY_SEC_TIMEOUT) + }, Timeouts.seconds30) return this } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileEditorFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileEditorFixture.java index 9be1ce0aff0d..2111b91792fe 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileEditorFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileEditorFixture.java @@ -12,7 +12,7 @@ import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import org.fest.swing.core.Robot; import org.fest.swing.edt.GuiQuery; import org.fest.swing.edt.GuiTask; @@ -163,7 +163,7 @@ public class FileEditorFixture extends EditorFixture { } }); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); // TODO: Maybe find a better way to keep Documents in sync with their VirtualFiles. invokeActionViaKeystroke("Synchronize"); @@ -275,7 +275,7 @@ public class FileEditorFixture extends EditorFixture { })); return virtualFileReference.get() != null; } - }, GuiTestUtil.INSTANCE.getTHIRTY_SEC_TIMEOUT()); + }, Timeouts.INSTANCE.getSeconds30()); return new FileFixture(myFrame.getProject(), virtualFileReference.get()); } @@ -346,7 +346,7 @@ public class FileEditorFixture extends EditorFixture { * Selects the editor with a given tab name. */ public FileEditorFixture selectTab(@NotNull final String tabName) { - tabs.waitTab(tabName, 5).selectTab(tabName); + tabs.waitTab(tabName, Timeouts.INSTANCE.getSeconds05()).selectTab(tabName); return this; } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileFixture.java index d0b81397cfb9..ac62e95ddfb7 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/FileFixture.java @@ -29,7 +29,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.util.CommonProcessors; import org.fest.swing.edt.GuiQuery; import org.fest.swing.timing.Condition; @@ -73,7 +73,7 @@ public class FileFixture { } }); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); return this; } @@ -111,7 +111,7 @@ public class FileFixture { } }); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); return this; } @@ -168,7 +168,7 @@ public class FileFixture { assertNotNull(highlightInfos); return highlightInfos.size() == expected; } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); return this; } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/IdeFrameFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/IdeFrameFixture.java index 3485e956e56a..a7af7e470445 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/IdeFrameFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/IdeFrameFixture.java @@ -40,6 +40,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeFrame; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.EditorNotificationPanel; import com.intellij.xdebugger.impl.ui.tree.nodes.XDebuggerTreeNode; import org.fest.swing.core.GenericTypeMatcher; @@ -408,7 +409,7 @@ public class IdeFrameFixture extends ComponentFixture, companion object { - fun findInplaceButtonFixture(root: Container, robot: Robot, icon: Icon, timeoutInSeconds: Long): InplaceButtonFixture { - if (timeoutInSeconds < 0L) throw Exception("Unable to wait less than 0 seconds") - val inplaceButton = if (timeoutInSeconds == 0L) { + fun findInplaceButtonFixture(root: Container, robot: Robot, icon: Icon, timeout: Timeout): InplaceButtonFixture { + val inplaceButton = if (timeout.duration() == 0L) { findInplaceButton(root, robot, icon) } else { - GuiTestUtil.waitUntilFound(robot, root, GuiTestUtilKt.typeMatcher(InplaceButton::class.java, { it.icon == icon }), - Timeout.timeout((timeoutInSeconds), TimeUnit.SECONDS)) + GuiTestUtil.waitUntilFound( + robot, + root, + GuiTestUtilKt.typeMatcher(InplaceButton::class.java) { it.icon == icon }, + timeout) } return InplaceButtonFixture(InplaceButtonFixture::class.java, robot, inplaceButton) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/JBPopupMenuFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/JBPopupMenuFixture.java index f9f2c03ca0f2..e7a09a331e6a 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/JBPopupMenuFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/JBPopupMenuFixture.java @@ -19,6 +19,7 @@ import com.intellij.openapi.actionSystem.impl.ActionMenu; import com.intellij.openapi.actionSystem.impl.ActionMenuItem; import com.intellij.openapi.ui.JBPopupMenu; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.util.ArrayUtil; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.MouseButton; @@ -54,7 +55,7 @@ public class JBPopupMenuFixture extends JComponentFixture im @NotNull public static JDialogFixture find(@NotNull Robot robot, String title) { - return find(robot, title, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + return find(robot, title, Timeouts.INSTANCE.getMinutes02()); } @NotNull diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MenuFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MenuFixture.kt index 1e1ac1984e31..414f5c57aad3 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MenuFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MenuFixture.kt @@ -18,8 +18,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.openapi.util.Ref import com.intellij.openapi.wm.impl.IdeFrameImpl import com.intellij.testGuiFramework.framework.GuiTestUtil -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout -import com.intellij.testGuiFramework.framework.GuiTestUtil.toMs +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt.typeMatcher import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import org.fest.assertions.Assertions.assertThat @@ -143,7 +142,7 @@ class MenuFixture internal constructor(private val myRobot: Robot, private val m //wait for component showing on screen, as a workaround for IDEA-195830 class MenuItemFixtureDriver(robot: Robot) : JComponentDriver(robot) { override fun click(jMenuItem: JMenuItem) { - waitForShowing(jMenuItem, defaultTimeout.toMs()) + waitForShowing(jMenuItem, Timeouts.defaultTimeout.duration()) robot.click(jMenuItem) } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java index 0f00240c6de0..70ee960d9960 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java @@ -20,6 +20,7 @@ import com.intellij.openapi.ui.messages.MessageDialog; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; import org.fest.swing.edt.GuiQuery; @@ -34,7 +35,7 @@ public class MessageDialogFixture extends IdeaDialogFixture imple @NotNull static MessageDialogFixture findByTitle(@NotNull Robot robot, @NotNull final String title) { - return findByTitle(robot, title, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return findByTitle(robot, title, Timeouts.INSTANCE.getMinutes05()); } @NotNull @@ -53,7 +54,7 @@ public class MessageDialogFixture extends IdeaDialogFixture imple } static MessageDialogFixture findAny(@NotNull Robot robot) { - return findAny(robot, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return findAny(robot, Timeouts.INSTANCE.getMinutes05()); } static MessageDialogFixture findAny(@NotNull Robot robot, @NotNull Timeout timeout) { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java index f5f5d9f8575e..faec59d4b290 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java @@ -19,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.messages.SheetController; import com.intellij.util.JdomKt; import org.fest.swing.core.GenericTypeMatcher; @@ -61,7 +62,7 @@ public class MessagesFixture { @NotNull public static MessagesFixture findAny(@NotNull Robot robot, @NotNull Container root) { - return findAny(robot, root, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return findAny(robot, root, Timeouts.INSTANCE.getMinutes05()); } @NotNull @@ -124,7 +125,7 @@ public class MessagesFixture { @NotNull static JPanelFixture findMacSheetByTitle(@NotNull Robot robot, @NotNull Container root, @NotNull String title) { - return findMacSheetByTitle(robot, root, title, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return findMacSheetByTitle(robot, root, title, Timeouts.INSTANCE.getMinutes05()); } @NotNull @@ -139,7 +140,7 @@ public class MessagesFixture { private static JPanelFixture findMacSheetAny(@NotNull Robot robot, @NotNull Container root) { - return findMacSheetAny(robot, root, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return findMacSheetAny(robot, root, Timeouts.INSTANCE.getMinutes05()); } private static JPanelFixture findMacSheetAny(@NotNull Robot robot, @NotNull Container root, @NotNull Timeout timeout) { @@ -149,7 +150,7 @@ public class MessagesFixture { @NotNull private static JPanel getSheetPanel(@NotNull Robot robot, @NotNull Container root) { - return getSheetPanel(robot, root, GuiTestUtil.INSTANCE.getLONG_TIMEOUT()); + return getSheetPanel(robot, root, Timeouts.INSTANCE.getMinutes05()); } @NotNull diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginDialogFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginDialogFixture.kt index e57e46a3b620..59cfc6ada42c 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginDialogFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginDialogFixture.kt @@ -6,10 +6,10 @@ import com.intellij.ide.plugins.PluginManagerConfigurableNew.CellPluginComponent import com.intellij.ide.plugins.PluginManagerConfigurableNew.TabHeaderComponent import com.intellij.openapi.actionSystem.impl.ActionButton import com.intellij.openapi.options.ex.ConfigurableCardPanel -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout import com.intellij.testGuiFramework.framework.GuiTestUtil.findAndClickButtonWhenEnabled import com.intellij.testGuiFramework.framework.GuiTestUtil.findAndClickCancelButton import com.intellij.testGuiFramework.framework.GuiTestUtil.findAndClickOkButton +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.ui.components.BasicOptionButtonUI.ArrowButton import com.intellij.ui.components.JBOptionButton @@ -43,14 +43,14 @@ class PluginDialogFixture(robot: Robot, pluginDialog: JDialog): JDialogFixture(r } fun showInstallPluginFromDiskDialog() { - val actionButton: ActionButton = waitUntilFound(findTabHeader(), ActionButton::class.java, defaultTimeout) { true } + val actionButton: ActionButton = waitUntilFound(findTabHeader(), ActionButton::class.java, Timeouts.defaultTimeout) { true } robot().click(actionButton) popupMenu("Install Plugin from Disk...").clickSearchedItem() } fun installPluginFromDiskDialog(func: InstallPluginFromDiskFixture.() -> Unit) { val installPluginFromDiskDialog: JDialog = - waitUntilFound(target(), JDialog::class.java, defaultTimeout) { it.title == "Choose Plugin File" } + waitUntilFound(target(), JDialog::class.java, Timeouts.defaultTimeout) { it.title == "Choose Plugin File" } func(InstallPluginFromDiskFixture(robot(), installPluginFromDiskDialog)) } @@ -59,27 +59,27 @@ class PluginDialogFixture(robot: Robot, pluginDialog: JDialog): JDialogFixture(r fun cancel() = findAndClickCancelButton(this) fun findPluginsAppearedOnTheScreen(): Iterable = - waitUntilFoundList(findPluginCardsPanel(), CellPluginComponent::class.java, defaultTimeout) { it.isShowing }.map { it.pluginDescriptor } + waitUntilFoundList(findPluginCardsPanel(), CellPluginComponent::class.java, Timeouts.defaultTimeout) { it.isShowing }.map { it.pluginDescriptor } private fun findCheckBox(pluginName: String) = - waitUntilFound(findCellPluginComponent(pluginName), JCheckBox::class.java, defaultTimeout) { true } + waitUntilFound(findCellPluginComponent(pluginName), JCheckBox::class.java, Timeouts.defaultTimeout) { true } private fun findTabHeader(): TabHeaderComponent = - waitUntilFound(target(), TabHeaderComponent::class.java, defaultTimeout) { true } + waitUntilFound(target(), TabHeaderComponent::class.java, Timeouts.defaultTimeout) { true } private fun findPluginCardsPanel(): ConfigurableCardPanel = - waitUntilFound(target(), ConfigurableCardPanel::class.java, defaultTimeout) { true } + waitUntilFound(target(), ConfigurableCardPanel::class.java, Timeouts.defaultTimeout) { true } private fun findCellPluginComponent(pluginName: String): CellPluginComponent = - waitUntilFound(findPluginCardsPanel(), CellPluginComponent::class.java, defaultTimeout) { it.isShowing && it.pluginDescriptor.name == pluginName } + waitUntilFound(findPluginCardsPanel(), CellPluginComponent::class.java, Timeouts.defaultTimeout) { it.isShowing && it.pluginDescriptor.name == pluginName } private fun findPluginDetailsLink(pluginName: String): JLabel = - waitUntilFound(findCellPluginComponent(pluginName), JLabel::class.java, defaultTimeout) { it.text == pluginName } + waitUntilFound(findCellPluginComponent(pluginName), JLabel::class.java, Timeouts.defaultTimeout) { it.text == pluginName } class PluginDetailsFixture(robot: Robot, dialog: JDialog): JDialogFixture(robot, dialog) { fun pluginVersion(): String = - waitUntilFound(target(), JTextField::class.java, defaultTimeout) { it.text.startsWith("v") || it.text == "bundled" }.text + waitUntilFound(target(), JTextField::class.java, Timeouts.defaultTimeout) { it.text.startsWith("v") || it.text == "bundled" }.text fun isPluginEnabled(): Boolean = findEnableDisableButton().text == "Disable" @@ -105,22 +105,22 @@ class PluginDialogFixture(robot: Robot, pluginDialog: JDialog): JDialogFixture(r } fun uninstall() { - val arrowButton: ArrowButton = waitUntilFound(target(), ArrowButton::class.java, defaultTimeout) { true } + val arrowButton: ArrowButton = waitUntilFound(target(), ArrowButton::class.java, Timeouts.defaultTimeout) { true } robot().click(arrowButton) - val list : JList<*> = waitUntilFound(target(), JList::class.java, defaultTimeout) { + val list : JList<*> = waitUntilFound(target(), JList::class.java, Timeouts.defaultTimeout) { it.isShowing && it.isVisible && getUninstallItemIndex(it) != -1 } robot().click(list, list.indexToLocation(getUninstallItemIndex(list))) } fun back() { - val backButton: JButton = waitUntilFound(target(), JButton::class.java, defaultTimeout) { it.text == "Plugins" } + val backButton: JButton = waitUntilFound(target(), JButton::class.java, Timeouts.defaultTimeout) { it.text == "Plugins" } robot().click(backButton) } private fun findEnableDisableButton(): JButton = - waitUntilFound(target(), JButton::class.java, defaultTimeout) { it !is JBOptionButton && (it.text == "Enable" || it.text == "Disable") } + waitUntilFound(target(), JButton::class.java, Timeouts.defaultTimeout) { it !is JBOptionButton && (it.text == "Enable" || it.text == "Disable") } private fun getUninstallItemIndex(list: JList<*>): Int = list.getNextMatch("Uninstall", 0, Position.Bias.Forward) } @@ -129,7 +129,7 @@ class PluginDialogFixture(robot: Robot, pluginDialog: JDialog): JDialogFixture(r ContainerFixture { fun setPath(pluginPath: String) { val pluginPathTextField: JTextField = - waitUntilFound(target(), JTextField::class.java, defaultTimeout) { true } + waitUntilFound(target(), JTextField::class.java, Timeouts.defaultTimeout) { true } pluginPathTextField.text = pluginPath } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginTableFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginTableFixture.kt index 33af4c5661a8..59be3883738b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginTableFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/PluginTableFixture.kt @@ -16,7 +16,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.ide.plugins.PluginTable -import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import org.fest.swing.core.GenericTypeMatcher import org.fest.swing.core.Robot import org.fest.swing.timing.Condition @@ -53,7 +53,7 @@ class PluginTableFixture(robot: Robot, pluginTable: PluginTable) : ComponentFixt val pluginTable = this.target() Pause.pause(object: Condition("wait until row appeared") { override fun test() = (findRow(pluginName) != null) - }, GuiTestUtil.SHORT_TIMEOUT) + }, Timeouts.minutes02) val cellRect = pluginTable.getCellRect(findRow(pluginName)!!, 0, false) robot().click(pluginTable, Point(cellRect.centerX.toInt(), cellRect.centerY.toInt())) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.kt index 75b03a43135d..9ce56d8688b6 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.kt @@ -28,6 +28,7 @@ import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.util.Ref import com.intellij.openapi.util.text.StringUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.computeOnEdt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.runOnEdt @@ -65,7 +66,7 @@ class ProjectViewFixture internal constructor(project: Project, robot: Robot) : } private fun assertProjectViewIsInitialized(projectView: ProjectView) { - GuiTestUtilKt.waitUntil("Project view is initialized", 120) { + GuiTestUtilKt.waitUntil("Project view is initialized", Timeouts.defaultTimeout) { field("isInitialized").ofType(Boolean::class.javaPrimitiveType!!).`in`(projectView).get() ?: throw Exception( "Unable to get 'isInitialized' field from projectView") } @@ -88,7 +89,7 @@ class ProjectViewFixture internal constructor(project: Project, robot: Robot) : private fun getNodeFixture(pathTo: Array): NodeFixture? { return try { - withPauseWhenNull(timeoutInSeconds = 30) { + withPauseWhenNull(timeout = Timeouts.seconds30) { try { getNodeFixtureByPath(pathTo as Array) } @@ -136,7 +137,7 @@ class ProjectViewFixture internal constructor(project: Project, robot: Robot) : if (childCount == 0) throw Exception("${pathItem} node has no more children") if (childCount == 1 && children[0] is LoadingNode) { runOnEdt { TreeUtil.selectPath(tree, TreeUtil.getPathFromRoot(children[0]!!)) } - waitUntil("children will be loaded", 30) { + waitUntil("children will be loaded", Timeouts.seconds30) { val updatedChildrenAndCount = getChildrenAndCountOnEdt(tree, pivotRoot) childCount = updatedChildrenAndCount.first children = updatedChildrenAndCount.second @@ -177,7 +178,7 @@ class ProjectViewFixture internal constructor(project: Project, robot: Robot) : get() { val tree = myPane.tree val boundsRef = Ref() - waitUntil("bounds of tree node with a tree path $myTreePath will be not null", 120) { + waitUntil("bounds of tree node with a tree path $myTreePath will be not null", Timeouts.defaultTimeout) { return@waitUntil computeOnEdt { val bounds = tree.getPathBounds(myTreePath) if (bounds != null) boundsRef.set(bounds) diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/RunConfigurationListFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/RunConfigurationListFixture.kt index 24afdf7a044d..182b71971f24 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/RunConfigurationListFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/RunConfigurationListFixture.kt @@ -2,7 +2,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl -import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.popupMenu import com.intellij.ui.popup.PopupFactoryImpl import org.fest.swing.core.Robot @@ -43,7 +43,7 @@ class RunConfigurationListFixture(val myRobot: Robot, val myIde: IdeFrameFixture */ fun configuration(name: String): RunActionFixture { showPopup() - myIde.popupMenu(name, GuiTestUtil.SHORT_TIMEOUT).clickSearchedItem() + myIde.popupMenu(name, Timeouts.minutes02).clickSearchedItem() return RunActionFixture() } @@ -63,7 +63,7 @@ class RunConfigurationListFixture(val myRobot: Robot, val myIde: IdeFrameFixture //Close popup showPopup() } - myIde.popupMenu(EDIT_CONFIGURATIONS, GuiTestUtil.SHORT_TIMEOUT).clickSearchedItem() + myIde.popupMenu(EDIT_CONFIGURATIONS, Timeouts.minutes02).clickSearchedItem() } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/SelectSdkDialogFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/SelectSdkDialogFixture.java index 2432fa8d08c1..38a9d4f3717b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/SelectSdkDialogFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/SelectSdkDialogFixture.java @@ -18,6 +18,7 @@ package com.intellij.testGuiFramework.fixtures; import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.openapi.project.ProjectBundle; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.treeStructure.Tree; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; @@ -77,7 +78,7 @@ public class SelectSdkDialogFixture implements ContainerFixture{ } }); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); return this; } @@ -88,7 +89,7 @@ public class SelectSdkDialogFixture implements ContainerFixture{ JButton button = GuiTestUtil.INSTANCE.findButton(SelectSdkDialogFixture.this, "OK", myRobot); return button.isEnabled(); } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); GuiTestUtil.INSTANCE.findAndClickOkButton(this); } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/TerminalFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/TerminalFixture.kt index c9b60aff0f96..e8284186a039 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/TerminalFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/TerminalFixture.kt @@ -18,6 +18,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.terminal.JBTerminalPanel +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestUtilKt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import com.intellij.ui.content.Content @@ -25,6 +26,7 @@ import com.jediterm.terminal.model.TerminalTextBuffer import org.fest.swing.core.Robot import org.fest.swing.exception.ComponentLookupException import org.fest.swing.exception.WaitTimedOutError +import org.fest.swing.timing.Timeout class TerminalFixture(project: Project, robot: Robot, toolWindowId: String) : ToolWindowFixture(toolWindowId, project, robot) { @@ -54,9 +56,9 @@ class TerminalFixture(project: Project, robot: Robot, toolWindowId: String) : To return terminalTextBuffer.getLine(lastLineIndex).text } - fun waitUntilTextAppeared(text: String, timeoutInSeconds: Int = 60) { + fun waitUntilTextAppeared(text: String, timeout: Timeout = Timeouts.defaultTimeout) { try { - waitUntil(condition = "'$text' appeared in terminal", timeoutInSeconds = timeoutInSeconds) { + waitUntil(condition = "'$text' appeared in terminal", timeout = timeout) { terminalTextBuffer.screenLines.contains(text) } } @@ -67,8 +69,8 @@ class TerminalFixture(project: Project, robot: Robot, toolWindowId: String) : To } - fun waitUntilRegExAppeared(regex: Regex, timeoutInSeconds: Int = 60) { - waitUntil(condition = "'$regex' appeared in terminal", timeoutInSeconds = timeoutInSeconds) { + fun waitUntilRegExAppeared(regex: Regex, timeout: Timeout = Timeouts.defaultTimeout) { + waitUntil(condition = "'$regex' appeared in terminal", timeout = timeout) { terminalTextBuffer.screenLines.contains(regex) } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ToolWindowFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ToolWindowFixture.java index d2839143ff11..70eac76750b3 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ToolWindowFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ToolWindowFixture.java @@ -22,7 +22,7 @@ import com.intellij.openapi.wm.StatusBarWidget; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.impl.StripeButton; -import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.content.Content; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; @@ -62,7 +62,7 @@ public abstract class ToolWindowFixture { toolWindowRef.set(toolWindow); return toolWindow != null; } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); myRobot = robot; myToolWindow = toolWindowRef.get(); } @@ -84,7 +84,7 @@ public abstract class ToolWindowFixture { } return false; } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); } catch (WaitTimedOutError e) { throw new ComponentLookupException("Cannot find content with " + displayName); } @@ -123,7 +123,7 @@ public abstract class ToolWindowFixture { @Nullable protected Content getContent(@NotNull final TextMatcher displayNameMatcher) { - return getContent(displayNameMatcher, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + return getContent(displayNameMatcher, Timeouts.INSTANCE.getMinutes02()); } @Nullable @@ -152,7 +152,7 @@ public abstract class ToolWindowFixture { } private void activateAndWaitUntilIsVisible() { - activateAndWaitUntilIsVisible(GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + activateAndWaitUntilIsVisible(Timeouts.INSTANCE.getMinutes02()); } private void activateAndWaitUntilIsVisible(@NotNull Timeout timeout) { @@ -196,11 +196,11 @@ public abstract class ToolWindowFixture { public boolean test() { return callback.finished; } - }, GuiTestUtil.INSTANCE.getSHORT_TIMEOUT()); + }, Timeouts.INSTANCE.getMinutes02()); } protected void waitUntilIsVisible() { - waitUntilIsVisible(GuiTestUtil.INSTANCE.getTHIRTY_SEC_TIMEOUT()); + waitUntilIsVisible(Timeouts.INSTANCE.getSeconds30()); } protected void waitUntilIsVisible(@NotNull Timeout timeout) { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/WelcomeFrameFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/WelcomeFrameFixture.kt index cc694f54df9f..d1dc184e473a 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/WelcomeFrameFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/WelcomeFrameFixture.kt @@ -2,7 +2,7 @@ package com.intellij.testGuiFramework.fixtures import com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrame -import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import org.fest.swing.core.Robot import org.fest.swing.exception.ComponentLookupException @@ -55,7 +55,7 @@ class WelcomeFrameFixture private constructor(robot: Robot, } return false } - }, GuiTestUtil.LONG_TIMEOUT) + }, Timeouts.minutes05) for (frame in Frame.getFrames()) { if (frame is FlatWelcomeFrame && frame.isShowing()) { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedButtonFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedButtonFixture.kt index e12efc949916..9853cd6e7cad 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedButtonFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedButtonFixture.kt @@ -15,21 +15,24 @@ */ package com.intellij.testGuiFramework.fixtures.extended +import com.intellij.testGuiFramework.framework.Timeouts +import com.intellij.testGuiFramework.framework.toSec import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import org.fest.swing.core.Robot import org.fest.swing.fixture.JButtonFixture +import org.fest.swing.timing.Timeout import javax.swing.JButton class ExtendedButtonFixture(robot: Robot, button: JButton) : JButtonFixture(robot, button) { - fun waitEnabled(timeoutInSeconds: Int = 30): ExtendedButtonFixture { - waitUntil("Waiting $timeoutInSeconds sec until button with text ${target().text} will be enabled", - timeoutInSeconds = timeoutInSeconds) { isEnabled } + fun waitEnabled(timeout: Timeout = Timeouts.seconds30): ExtendedButtonFixture { + waitUntil("Waiting ${timeout.toSec()} sec until button with text ${target().text} will be enabled", + timeout = timeout) { isEnabled } return this } - fun clickWhenEnabled(timeoutInSeconds: Int = 30) { - waitEnabled(timeoutInSeconds) + fun clickWhenEnabled(timeout: Timeout = Timeouts.seconds30) { + waitEnabled(timeout) super.click() } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedJTreePathFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedJTreePathFixture.kt index 9ebbfb980af9..726376b1d45b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedJTreePathFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/extended/ExtendedJTreePathFixture.kt @@ -4,6 +4,7 @@ package com.intellij.testGuiFramework.fixtures.extended import com.intellij.openapi.externalSystem.service.execution.NotSupportedException import com.intellij.testGuiFramework.driver.ExtendedJTreeDriver import com.intellij.testGuiFramework.driver.ExtendedJTreePathFinder +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.util.FinderPredicate import com.intellij.testGuiFramework.impl.GuiRobotHolder import com.intellij.testGuiFramework.impl.GuiTestUtilKt @@ -97,7 +98,7 @@ open class ExtendedJTreePathFixture( if (!cachePaths.containsKey(stringPath)){ var partialPath: TreePath? = null for (partialList in stringPath.list2tree()) { - GuiTestUtilKt.waitUntil(condition = "correct path to click is found", timeoutInSeconds = 2) { + GuiTestUtilKt.waitUntil(condition = "correct path to click is found", timeout = Timeouts.seconds02) { try { partialPath = ExtendedJTreePathFinder(tree) .findMatchingPathByPredicate(predicate = predicate, pathStrings = *partialList.toTypedArray()) diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/newProjectWizard/NewProjectWizardFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/newProjectWizard/NewProjectWizardFixture.java index 902dbf63cfd3..a7f8a317de86 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/newProjectWizard/NewProjectWizardFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/newProjectWizard/NewProjectWizardFixture.java @@ -20,6 +20,7 @@ import com.intellij.openapi.roots.ui.configuration.JdkComboBox; import com.intellij.testGuiFramework.fixtures.FrameworksTreeFixture; import com.intellij.testGuiFramework.fixtures.SelectSdkDialogFixture; import com.intellij.testGuiFramework.framework.GuiTestUtil; +import com.intellij.testGuiFramework.framework.Timeouts; import com.intellij.ui.components.JBList; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; @@ -49,7 +50,7 @@ public class NewProjectWizardFixture extends AbstractWizardFixture(JButton::class.java) { override fun isMatching(button: JButton): Boolean { @@ -312,7 +295,7 @@ object GuiTestUtil { val dialogName = ApplicationBundle.message("title.complete.installation") try { val completeInstallationDialog = findDialog(dialogName) - .withTimeout(THIRTY_SEC_TIMEOUT.duration()).using(robot) + .withTimeout(Timeouts.seconds30.duration()).using(robot) completeInstallationDialog.button("OK").click() } catch (we: WaitTimedOutError) { @@ -325,7 +308,7 @@ object GuiTestUtil { val dialogName = ApplicationNamesInfo.getInstance().fullProductName + " License Activation" try { val completeInstallationDialog = findDialog(dialogName) - .withTimeout(THIRTY_SEC_TIMEOUT.duration()).using(robot) + .withTimeout(Timeouts.seconds30.duration()).using(robot) completeInstallationDialog.button("Evaluate for free for 30 days").click() } catch (we: WaitTimedOutError) { @@ -338,7 +321,7 @@ object GuiTestUtil { val dialogName = "License Agreement for" + ApplicationInfoImpl.getShadowInstance().fullApplicationName try { val completeInstallationDialog = findDialog(dialogName) - .withTimeout(THIRTY_SEC_TIMEOUT.duration()).using(robot) + .withTimeout(Timeouts.seconds30.duration()).using(robot) completeInstallationDialog.button("Evaluate for free for 30 days").click() } @@ -352,7 +335,7 @@ object GuiTestUtil { val dialogName = "Customize " + ApplicationNamesInfo.getInstance().fullProductName try { val completeInstallationDialog = findDialog(dialogName) - .withTimeout(THIRTY_SEC_TIMEOUT.duration()).using(robot) + .withTimeout(Timeouts.seconds30.duration()).using(robot) completeInstallationDialog.button("Skip All and Set Defaults").click() } @@ -432,7 +415,7 @@ object GuiTestUtil { override fun test(): Boolean { return button.isEnabled && button.isVisible && button.isShowing } - }, SHORT_TIMEOUT) + }, Timeouts.minutes02) robot.click(button) } @@ -510,7 +493,7 @@ object GuiTestUtil { val buttons = robot.finder().findAll(matcher) return !buttons.isEmpty() } - }, SHORT_TIMEOUT) + }, Timeouts.minutes02) return robot.finder().find(container.target(), matcher) } @@ -541,7 +524,7 @@ object GuiTestUtil { fun waitUntilFound(robot: Robot, root: Container?, matcher: GenericTypeMatcher): T { - return waitUntilFound(robot, root, matcher, SHORT_TIMEOUT) + return waitUntilFound(robot, root, matcher, Timeouts.minutes02) } /** @@ -609,21 +592,21 @@ object GuiTestUtil { val allFound = if (root == null) GuiRobotHolder.robot.finder().findAll(matcher) else GuiRobotHolder.robot.finder().findAll(root, matcher) return allFound.isEmpty() } - }, SHORT_TIMEOUT) + }, Timeouts.minutes02) } /** * Waits until no components match the given criteria under the given root */ fun waitUntilGone(root: Container?, - timeoutInSeconds: Int, + timeout: Timeout, matcher: GenericTypeMatcher) { Pause.pause(object : Condition("Find component using " + matcher.toString()) { override fun test(): Boolean { val allFound = if (root == null) GuiRobotHolder.robot.finder().findAll(matcher) else GuiRobotHolder.robot.finder().findAll(root, matcher) return allFound.isEmpty() } - }, timeout(timeoutInSeconds.toLong(), SECONDS)) + }, timeout) } @@ -680,7 +663,7 @@ object GuiTestUtil { override fun isMatching(@Nonnull button: JRadioButton): Boolean { return button.text != null && button.text == text } - }, SHORT_TIMEOUT) + }, Timeouts.minutes02) return RadioButtonFixture(GuiRobotHolder.robot, radioButton) } @@ -719,7 +702,7 @@ object GuiTestUtil { return (list as JList).cellRenderer.getListCellRendererComponent(list, value, index, true, true) } - fun textfield(textLabel: String?, container: Container, timeout: Long): JTextComponentFixture { + fun textfield(textLabel: String?, container: Container, timeout: Timeout): JTextComponentFixture { if (textLabel.isNullOrEmpty()) { val jTextField = com.intellij.testGuiFramework.impl.waitUntilFound(container, JTextField::class.java, timeout) { jTextField -> jTextField.isShowing } @@ -734,20 +717,20 @@ object GuiTestUtil { } fun jTreeComponent(container: Container, - timeout: Long, + timeout: Timeout, vararg pathStrings: String, predicate: FinderPredicate = Predicate.equality): JTree { val myTree: JTree? try { myTree = if (pathStrings.isEmpty()) { - waitUntilFound(GuiRobotHolder.robot, container, GuiTestUtilKt.typeMatcher(JTree::class.java) { true }, timeout.toFestTimeout()) + waitUntilFound(GuiRobotHolder.robot, container, GuiTestUtilKt.typeMatcher(JTree::class.java) { true }, timeout) } else { waitUntilFound(GuiRobotHolder.robot, container, GuiTestUtilKt.typeMatcher(JTree::class.java) { ExtendedJTreePathFixture(it, pathStrings.toList(), predicate).hasPath() }, - timeout.toFestTimeout()) + timeout) } } catch (e: WaitTimedOutError) { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/Timeouts.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/Timeouts.kt new file mode 100644 index 000000000000..a14782db4fa7 --- /dev/null +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/Timeouts.kt @@ -0,0 +1,26 @@ +// 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.framework + +import org.fest.swing.timing.Timeout +import java.util.concurrent.TimeUnit + +object Timeouts { + val defaultTimeout = Timeout.timeout(2, TimeUnit.MINUTES) + val noTimeout = Timeout.timeout(0, TimeUnit.SECONDS) + + val seconds01 = Timeout.timeout(1, TimeUnit.SECONDS) + val seconds02 = Timeout.timeout(2, TimeUnit.SECONDS) + val seconds03 = Timeout.timeout(3, TimeUnit.SECONDS) + val seconds05 = Timeout.timeout(5, TimeUnit.SECONDS) + val seconds10 = Timeout.timeout(10, TimeUnit.SECONDS) + val seconds30 = Timeout.timeout(30, TimeUnit.SECONDS) + val minutes01 = Timeout.timeout(1, TimeUnit.MINUTES) + val minutes02 = Timeout.timeout(2, TimeUnit.MINUTES) + val minutes05 = Timeout.timeout(5, TimeUnit.MINUTES) + val minutes10 = Timeout.timeout(10, TimeUnit.MINUTES) + val minutes15 = Timeout.timeout(15, TimeUnit.MINUTES) + val hours01 = Timeout.timeout(1, TimeUnit.HOURS) + +} + +fun Timeout.toSec(): Long = duration() / 1000 diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/ComponentFixtureUtils.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/ComponentFixtureUtils.kt index d80e8d483eaf..8e8d33b32f8b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/ComponentFixtureUtils.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/ComponentFixtureUtils.kt @@ -11,7 +11,7 @@ import com.intellij.testGuiFramework.fixtures.extended.ExtendedButtonFixture import com.intellij.testGuiFramework.fixtures.extended.ExtendedJTreePathFixture import com.intellij.testGuiFramework.fixtures.extended.ExtendedTableFixture import com.intellij.testGuiFramework.framework.GuiTestUtil -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts.defaultTimeout import com.intellij.testGuiFramework.util.Predicate import com.intellij.ui.CheckboxTree import com.intellij.ui.HyperlinkLabel @@ -42,7 +42,7 @@ import javax.swing.* * @timeout in seconds to find JList component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.jList(containingItem: String? = null, timeout: Long = defaultTimeout): JListFixture = +fun ComponentFixture.jList(containingItem: String? = null, timeout: Timeout = defaultTimeout): JListFixture = if (target() is Container) { val extCellReader = ExtendedJListCellReader() val myJList = waitUntilFound(target() as Container, JList::class.java, timeout) { jList: JList<*> -> @@ -64,7 +64,7 @@ fun ComponentFixture.jList(containingItem: String? = nu * @timeout in seconds to find JButton component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.button(name: String, timeout: Long = defaultTimeout): ExtendedButtonFixture = +fun ComponentFixture.button(name: String, timeout: Timeout = defaultTimeout): ExtendedButtonFixture = if (target() is Container) { val jButton = waitUntilFound(target() as Container, JButton::class.java, timeout) { it.isShowing && it.isVisible && it.text == name @@ -81,7 +81,7 @@ fun ComponentFixture.button(name: String, timeout: Long * @throws ComponentLookupException if no component has not been found or timeout exceeded * @return list of JButton components sorted by locationOnScreen (left to right, top to down) */ -fun ComponentFixture.buttons(name: String, timeout: Long = defaultTimeout): List = +fun ComponentFixture.buttons(name: String, timeout: Timeout = defaultTimeout): List = if (target() is Container) { val jButtons = waitUntilFoundList(target() as Container, JButton::class.java, timeout) { it.isShowing && it.isVisible && it.text == name @@ -94,7 +94,7 @@ fun ComponentFixture.buttons(name: String, timeout: Lon else throw unableToFindComponent("""JButton named by $name""") fun ComponentFixture.componentWithBrowseButton(boundedLabelText: String, - timeout: Long = defaultTimeout): ComponentWithBrowseButtonFixture { + timeout: Timeout = defaultTimeout): ComponentWithBrowseButtonFixture { if (target() is Container) { val boundedLabel = waitUntilFound(target() as Container, JLabel::class.java, timeout) { it.text == boundedLabelText && it.isShowing @@ -107,11 +107,11 @@ fun ComponentFixture.componentWithBrowseButton(boundedL throw unableToFindComponent("ComponentWithBrowseButton with labelFor=$boundedLabelText") } -fun ComponentFixture.treeTable(timeout: Long = defaultTimeout): TreeTableFixture { +fun ComponentFixture.treeTable(timeout: Timeout = defaultTimeout): TreeTableFixture { if (target() is Container) { val table = GuiTestUtil.waitUntilFound(robot(), target() as Container, GuiTestUtilKt.typeMatcher(TreeTable::class.java) { true }, - timeout.toFestTimeout() + timeout ) return TreeTableFixture(robot(), table) } @@ -119,7 +119,7 @@ fun ComponentFixture.treeTable(timeout: Long = defaultT "Sorry, unable to find inspections tree with ${target()} as a Container") } -fun ComponentFixture.spinner(boundedLabelText: String, timeout: Long = defaultTimeout): JSpinnerFixture { +fun ComponentFixture.spinner(boundedLabelText: String, timeout: Timeout = defaultTimeout): JSpinnerFixture { if (target() is Container) { val boundedLabel = waitUntilFound(target() as Container, JLabel::class.java, timeout) { it.text == boundedLabelText } val component = boundedLabel.labelFor @@ -135,7 +135,7 @@ fun ComponentFixture.spinner(boundedLabelText: String, * @timeout in seconds to find JComboBox component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.combobox(labelText: String, timeout: Long = defaultTimeout): ComboBoxFixture = +fun ComponentFixture.combobox(labelText: String, timeout: Timeout = defaultTimeout): ComboBoxFixture = if (target() is Container) { val comboBox = GuiTestUtilKt.findBoundedComponentByText(robot(), target() as Container, labelText, JComboBox::class.java) val comboboxFixture = ComboBoxFixture(robot(), comboBox) @@ -151,7 +151,7 @@ fun ComponentFixture.combobox(labelText: String, timeou * @timeout in seconds to find JCheckBox component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.checkbox(labelText: String, timeout: Long = defaultTimeout): CheckBoxFixture = +fun ComponentFixture.checkbox(labelText: String, timeout: Timeout = defaultTimeout): CheckBoxFixture = if (target() is Container) { val jCheckBox = waitUntilFound(target() as Container, JCheckBox::class.java, timeout) { it.isShowing && it.isVisible && it.text == labelText @@ -166,9 +166,9 @@ fun ComponentFixture.checkbox(labelText: String, timeou * @timeout in seconds to find ActionLink component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.actionLink(name: String, timeout: Long = defaultTimeout): ActionLinkFixture = +fun ComponentFixture.actionLink(name: String, timeout: Timeout = defaultTimeout): ActionLinkFixture = if (target() is Container) { - ActionLinkFixture.findActionLinkByName(name, robot(), target() as Container, timeout.toFestTimeout()) + ActionLinkFixture.findActionLinkByName(name, robot(), target() as Container, timeout) } else throw unableToFindComponent("""ActionLink by name "$name"""") @@ -179,13 +179,13 @@ fun ComponentFixture.actionLink(name: String, timeout: * @timeout in seconds to find ActionButton component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.actionButton(actionName: String, timeout: Long = defaultTimeout): ActionButtonFixture = +fun ComponentFixture.actionButton(actionName: String, timeout: Timeout = defaultTimeout): ActionButtonFixture = if (target() is Container) { try { - ActionButtonFixture.findByText(actionName, robot(), target() as Container, timeout.toFestTimeout()) + ActionButtonFixture.findByText(actionName, robot(), target() as Container, timeout) } catch (componentLookupException: ComponentLookupException) { - ActionButtonFixture.findByActionId(actionName, robot(), target() as Container, timeout.toFestTimeout()) + ActionButtonFixture.findByActionId(actionName, robot(), target() as Container, timeout) } } else throw unableToFindComponent("""ActionButton by action name "$actionName"""") @@ -198,7 +198,7 @@ fun ComponentFixture.actionButton(actionName: String, t * @timeout in seconds to find InplaceButton component. It is better to use static cached icons from (@see com.intellij.openapi.util.IconLoader.AllIcons) * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.inplaceButton(icon: Icon, timeout: Long = defaultTimeout): InplaceButtonFixture { +fun ComponentFixture.inplaceButton(icon: Icon, timeout: Timeout = defaultTimeout): InplaceButtonFixture { val target = target() return if (target is Container) { InplaceButtonFixture.findInplaceButtonFixture(target, robot(), icon, timeout) @@ -214,9 +214,9 @@ fun ComponentFixture.inplaceButton(icon: Icon, timeout: * @throws ComponentLookupException if component has not been found or timeout exceeded */ fun ComponentFixture.actionButtonByClass(actionClassName: String, - timeout: Long = defaultTimeout): ActionButtonFixture = + timeout: Timeout = defaultTimeout): ActionButtonFixture = if (target() is Container) { - ActionButtonFixture.findByActionClassName(actionClassName, robot(), target() as Container, timeout.toFestTimeout()) + ActionButtonFixture.findByActionClassName(actionClassName, robot(), target() as Container, timeout) } else throw unableToFindComponent("""ActionButton by action class name "$actionClassName"""") @@ -226,8 +226,8 @@ fun ComponentFixture.actionButtonByClass(actionClassNam * @timeout in seconds to find JRadioButton component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.radioButton(textLabel: String, timeout: Long = defaultTimeout): RadioButtonFixture = - if (target() is Container) GuiTestUtil.findRadioButton(target() as Container, textLabel, timeout.toFestTimeout()) +fun ComponentFixture.radioButton(textLabel: String, timeout: Timeout = defaultTimeout): RadioButtonFixture = + if (target() is Container) GuiTestUtil.findRadioButton(target() as Container, textLabel, timeout) else throw unableToFindComponent("""RadioButton by label "$textLabel"""") /** @@ -237,7 +237,7 @@ fun ComponentFixture.radioButton(textLabel: String, tim * @timeout in seconds to find JTextComponent component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.textfield(textLabel: String?, timeout: Long = defaultTimeout): JTextComponentFixture { +fun ComponentFixture.textfield(textLabel: String?, timeout: Timeout = defaultTimeout): JTextComponentFixture { val target = target() if (target is Container) { return GuiTestUtil.textfield(textLabel, target, timeout) @@ -254,7 +254,7 @@ fun ComponentFixture.textfield(textLabel: String?, time */ fun ComponentFixture.jTree( vararg pathStrings: String, - timeout: Long = defaultTimeout, + timeout: Timeout = defaultTimeout, predicate: FinderPredicate = Predicate.equality ): ExtendedJTreePathFixture = if (target() is Container) ExtendedJTreePathFixture(GuiTestUtil.jTreeComponent( @@ -274,7 +274,7 @@ fun ComponentFixture.jTree( */ fun ComponentFixture.checkboxTree( vararg pathStrings: String, - timeout: Long = defaultTimeout, + timeout: Timeout = defaultTimeout, predicate: FinderPredicate = Predicate.equality ): CheckboxTreeFixture = if (target() is Container) { @@ -294,7 +294,7 @@ fun ComponentFixture.checkboxTree( * @timeout in seconds to find JTable component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.table(cellText: String, timeout: Long = defaultTimeout): ExtendedTableFixture = +fun ComponentFixture.table(cellText: String, timeout: Timeout = defaultTimeout): ExtendedTableFixture = if (target() is Container) { var tableFixture: ExtendedTableFixture? = null waitUntilFound(target() as Container, JTable::class.java, timeout) { @@ -315,7 +315,7 @@ fun popupMenu( item: String, robot: Robot, root: Container? = null, - timeout: Timeout = GuiTestUtil.defaultTimeout.toFestTimeout(), + timeout: Timeout = defaultTimeout, predicate: FinderPredicate = Predicate.equality ): JBListPopupFixture{ val jbList = GuiTestUtil.waitUntilFound( @@ -333,7 +333,7 @@ fun popupMenu( fun ComponentFixture.popupMenu( item: String, - timeout: Timeout = GuiTestUtil.defaultTimeout.toFestTimeout(), + timeout: Timeout = defaultTimeout, predicate: FinderPredicate = Predicate.equality ): JBListPopupFixture { if (target() is Container) { @@ -351,23 +351,23 @@ fun ComponentFixture.popupMenu( * @timeout in seconds to find LinkLabel component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.linkLabel(linkName: String, timeout: Long = defaultTimeout) = +fun ComponentFixture.linkLabel(linkName: String, timeout: Timeout = defaultTimeout) = if (target() is Container) { val myLinkLabel = GuiTestUtil.waitUntilFound( robot(), target() as Container, GuiTestUtilKt.typeMatcher(LinkLabel::class.java) { it.isShowing && (it.text == linkName) }, - timeout.toFestTimeout()) + timeout) ComponentFixture(ComponentFixture::class.java, robot(), myLinkLabel) } else throw unableToFindComponent("LinkLabel") -fun ComponentFixture.hyperlinkLabel(labelText: String, timeout: Long = defaultTimeout): HyperlinkLabelFixture = +fun ComponentFixture.hyperlinkLabel(labelText: String, timeout: Timeout = defaultTimeout): HyperlinkLabelFixture = if (target() is Container) { val hyperlinkLabel = GuiTestUtil.waitUntilFound(robot(), target() as Container, GuiTestUtilKt.typeMatcher(HyperlinkLabel::class.java) { it.isShowing && (it.text == labelText) - }, timeout.toFestTimeout()) + }, timeout) HyperlinkLabelFixture(robot(), hyperlinkLabel) } else throw unableToFindComponent("""HyperlinkLabel by label text: "$labelText"""") @@ -378,8 +378,8 @@ fun ComponentFixture.hyperlinkLabel(labelText: String, * @timeout in seconds to find table of plugins component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.pluginTable(timeout: Long = defaultTimeout) = - if (target() is Container) PluginTableFixture.find(robot(), target() as Container, timeout.toFestTimeout()) +fun ComponentFixture.pluginTable(timeout: Timeout = defaultTimeout) = + if (target() is Container) PluginTableFixture.find(robot(), target() as Container, timeout) else throw unableToFindComponent("PluginTable") /** @@ -388,8 +388,8 @@ fun ComponentFixture.pluginTable(timeout: Long = defaul * @timeout in seconds to find component for Message * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.message(title: String, timeout: Long = defaultTimeout) = - if (target() is Container) MessagesFixture.findByTitle(robot(), target() as Container, title, timeout.toFestTimeout()) +fun ComponentFixture.message(title: String, timeout: Timeout = defaultTimeout) = + if (target() is Container) MessagesFixture.findByTitle(robot(), target() as Container, title, timeout) else throw unableToFindComponent("Message") @@ -399,8 +399,8 @@ fun ComponentFixture.message(title: String, timeout: Lo * @timeout in seconds to find component for Message * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.message(title: String, timeout: Long = defaultTimeout, func: MessagesFixture.() -> Unit) { - if (target() is Container) func(MessagesFixture.findByTitle(robot(), target() as Container, title, timeout.toFestTimeout())) +fun ComponentFixture.message(title: String, timeout: Timeout = defaultTimeout, func: MessagesFixture.() -> Unit) { + if (target() is Container) func(MessagesFixture.findByTitle(robot(), target() as Container, title, timeout)) else throw unableToFindComponent("Message") } @@ -410,12 +410,12 @@ fun ComponentFixture.message(title: String, timeout: Lo * @timeout in seconds to find JBLabel component * @throws ComponentLookupException if component has not been found or timeout exceeded */ -fun ComponentFixture.label(labelName: String, timeout: Long = defaultTimeout): JLabelFixture = +fun ComponentFixture.label(labelName: String, timeout: Timeout = defaultTimeout): JLabelFixture = if (target() is Container) { val jbLabel = GuiTestUtil.waitUntilFound( robot(), target() as Container, GuiTestUtilKt.typeMatcher(JBLabel::class.java) { it.isShowing && (it.text == labelName || labelName in it.text) }, - timeout.toFestTimeout()) + timeout) JLabelFixture(robot(), jbLabel) } else throw unableToFindComponent("JBLabel") @@ -429,7 +429,7 @@ private fun ComponentFixture.unableToFindComponent(comp * * @timeout timeout in seconds to find AsyncProcessIcon */ -fun ComponentFixture.asyncProcessIcon(timeout: Long = defaultTimeout): AsyncProcessIconFixture { +fun ComponentFixture.asyncProcessIcon(timeout: Timeout = defaultTimeout): AsyncProcessIconFixture { val indexingProcessIconTooltipText = ActionsBundle.message("action.ShowProcessWindow.double.click") val asyncProcessIcon = GuiTestUtil.waitUntilFound( robot(), @@ -439,7 +439,7 @@ fun ComponentFixture.asyncProcessIcon(timeout: Long = d it.isVisible && it.toolTipText != indexingProcessIconTooltipText }, - timeout.toFestTimeout()) + timeout) return AsyncProcessIconFixture(robot(), asyncProcessIcon) } @@ -448,15 +448,15 @@ else Timeout.timeout(this, TimeUnit.SECONDS) fun waitUntilFound(container: Container?, componentClass: Class, - timeout: Long, + timeout: Timeout, matcher: (ComponentType) -> Boolean): ComponentType { return GuiTestUtil.waitUntilFound(GuiRobotHolder.robot, container, GuiTestUtilKt.typeMatcher(componentClass) { matcher(it) }, - timeout.toFestTimeout()) + timeout) } fun waitUntilFoundList(container: Container?, componentClass: Class, - timeout: Long, + timeout: Timeout, matcher: (ComponentType) -> Boolean): List { - return GuiTestUtil.waitUntilFoundList(container, timeout.toFestTimeout(), GuiTestUtilKt.typeMatcher(componentClass) { matcher(it) }) + return GuiTestUtil.waitUntilFoundList(container, timeout, GuiTestUtilKt.typeMatcher(componentClass) { matcher(it) }) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/FirstStart.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/FirstStart.kt index a0f22c2e4057..b8738004ed4b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/FirstStart.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/FirstStart.kt @@ -8,7 +8,7 @@ import com.intellij.openapi.application.PathManager import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.SystemInfo import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.FirstStart.Utils.button import com.intellij.testGuiFramework.impl.FirstStart.Utils.dialog import com.intellij.testGuiFramework.impl.FirstStart.Utils.radioButton @@ -31,7 +31,6 @@ import java.awt.Component import java.awt.Container import java.awt.Frame import java.io.File -import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicReference import javax.swing.* import kotlin.concurrent.thread @@ -90,10 +89,6 @@ abstract class FirstStart(val ideType: IdeType) { robotThread.start() } - companion object { - var DEFAULT_TIMEOUT: Long = defaultTimeout - } - // In case we found WelcomeFrame we don't need to make completeInstallation. private fun completeFirstStart() { @@ -125,7 +120,7 @@ abstract class FirstStart(val ideType: IdeType) { private fun findPrivacyPolicyDialogOrLicenseAgreement(): JDialog { - return GuiTestUtilKt.withPauseWhenNull(timeoutInSeconds = 120) { + return GuiTestUtilKt.withPauseWhenNull(timeout = Timeouts.defaultTimeout) { try { myRobot.finder().find { it is JDialog && (it.title.contains("License Agreement") || it.title.contains("Privacy Policy")) @@ -181,7 +176,7 @@ abstract class FirstStart(val ideType: IdeType) { LOG.info("Accepting Data Sharing") val title = "Data Sharing" try { - dialog(title, timeoutSeconds = 5) + dialog(title, timeout = Timeouts.seconds05) button("Send Usage Statistics").click() LOG.info("Data sharing accepted") } @@ -216,7 +211,7 @@ abstract class FirstStart(val ideType: IdeType) { LOG.info("Click '${evaluateButton.text()}'") evaluateButton.click() - dialog(10) { it.startsWith("License Agreement for") } + dialog(timeout = Timeouts.seconds10) { it.startsWith("License Agreement for") } button("Accept").click() } catch (waitTimedOutError: WaitTimedOutError) { @@ -239,55 +234,55 @@ abstract class FirstStart(val ideType: IdeType) { } object Utils { - fun Robot.dialog(title: String? = null, timeoutSeconds: Long = DEFAULT_TIMEOUT): JDialogFixture { - val jDialog = waitUntilFound(this, null, JDialog::class.java, timeoutSeconds) { dialog -> + fun Robot.dialog(title: String? = null, timeout: Timeout = Timeouts.defaultTimeout): JDialogFixture { + val jDialog = waitUntilFound(this, null, JDialog::class.java, timeout) { dialog -> if (title != null) dialog.title == title else true } return JDialogFixture(this, jDialog) } - fun Robot.dialog(timeoutSeconds: Long = DEFAULT_TIMEOUT, titleMatcher: (String) -> Boolean): JDialogFixture { - val jDialog = waitUntilFound(this, null, JDialog::class.java, timeoutSeconds) { dialog -> + fun Robot.dialog(timeout: Timeout = Timeouts.defaultTimeout, titleMatcher: (String) -> Boolean): JDialogFixture { + val jDialog = waitUntilFound(this, null, JDialog::class.java, timeout) { dialog -> titleMatcher(dialog.title) } return JDialogFixture(this, jDialog) } - fun Robot.radioButton(text: String, timeoutSeconds: Long = DEFAULT_TIMEOUT): JRadioButtonFixture { - val jRadioButton = waitUntilFound(this, null, JRadioButton::class.java, timeoutSeconds) { radioButton -> + fun Robot.radioButton(text: String, timeout: Timeout = Timeouts.defaultTimeout): JRadioButtonFixture { + val jRadioButton = waitUntilFound(this, null, JRadioButton::class.java, timeout) { radioButton -> radioButton.text == text && radioButton.isShowing && radioButton.isEnabled } return JRadioButtonFixture(this, jRadioButton) } - fun Robot.button(text: String, timeoutSeconds: Long = DEFAULT_TIMEOUT): JButtonFixture { - val jButton = waitUntilFound(this, null, JButton::class.java, timeoutSeconds) { button -> + fun Robot.button(text: String, timeout: Timeout = Timeouts.defaultTimeout): JButtonFixture { + val jButton = waitUntilFound(this, null, JButton::class.java, timeout) { button -> button.isShowing && button.text == text } return JButtonFixture(this, jButton) } - fun Robot.checkbox(text: String, timeoutSeconds: Long = DEFAULT_TIMEOUT): JCheckBoxFixture { - val jCheckBox = waitUntilFound(this, null, JCheckBox::class.java, timeoutSeconds) { checkBox -> + fun Robot.checkbox(text: String, timeout: Timeout = Timeouts.defaultTimeout): JCheckBoxFixture { + val jCheckBox = waitUntilFound(this, null, JCheckBox::class.java, timeout) { checkBox -> checkBox.text == text && checkBox.isShowing && checkBox.isEnabled } return JCheckBoxFixture(this, jCheckBox) } - fun Robot.waitFrame(title: String, timeoutInSeconds: Int = 10, titleMatching: (String?) -> Boolean) { + fun Robot.waitFrame(title: String, timeout: Timeout = Timeouts.seconds30, titleMatching: (String?) -> Boolean) { GuiTestUtilKt.waitUntil("frame with title '$title' will appear", - timeoutInSeconds) { this.hierarchy().roots().any { it is JFrame && titleMatching(it.title) } } + timeout) { this.hierarchy().roots().any { it is JFrame && titleMatching(it.title) } } } fun waitUntilFound(myRobot: Robot, container: Container?, componentClass: Class, - timeoutSeconds: Long, + timeout: Timeout, matcher: (ComponentType) -> Boolean): ComponentType { return waitUntilFound(myRobot, container, object : GenericTypeMatcher(componentClass) { override fun isMatching(cmp: ComponentType): Boolean = matcher(cmp) - }, Timeout.timeout(timeoutSeconds, TimeUnit.SECONDS)) + }, timeout) } fun waitUntilFound(robot: Robot, diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt index 4b5bdcad9ad1..b96311f7d8ee 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCase.kt @@ -23,8 +23,9 @@ import com.intellij.testGuiFramework.fixtures.extended.RowFixture import com.intellij.testGuiFramework.fixtures.newProjectWizard.NewProjectWizardFixture import com.intellij.testGuiFramework.framework.GuiTestLocalRunner import com.intellij.testGuiFramework.framework.GuiTestUtil -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout import com.intellij.testGuiFramework.framework.IdeTestApplication.getTestScreenshotDirPath +import com.intellij.testGuiFramework.framework.Timeouts +import com.intellij.testGuiFramework.framework.toSec import com.intellij.testGuiFramework.impl.GuiTestUtilKt.typeMatcher import com.intellij.testGuiFramework.launcher.system.SystemInfo import com.intellij.testGuiFramework.launcher.system.SystemInfo.isMac @@ -39,6 +40,7 @@ import org.fest.swing.fixture.JTableFixture import org.fest.swing.image.ScreenshotTaker import org.fest.swing.timing.Condition import org.fest.swing.timing.Pause +import org.fest.swing.timing.Timeout import org.junit.Rule import org.junit.runner.RunWith import java.awt.Component @@ -114,7 +116,7 @@ open class GuiTestCase { */ fun dialog(title: String? = null, ignoreCaseTitle: Boolean = false, - timeout: Long = defaultTimeout, + timeout: Timeout = Timeouts.defaultTimeout, needToKeepDialog: Boolean = false, func: JDialogFixture.() -> Unit) { val dialog = dialog(title, ignoreCaseTitle, timeout) @@ -122,7 +124,7 @@ open class GuiTestCase { if (!needToKeepDialog) dialog.waitTillGone() } - fun pluginDialog(timeout: Long = defaultTimeout, needToKeepDialog: Boolean = false, func: PluginDialogFixture.() -> Unit) { + fun pluginDialog(timeout: Timeout = Timeouts.defaultTimeout, needToKeepDialog: Boolean = false, func: PluginDialogFixture.() -> Unit) { val pluginDialog = PluginDialogFixture(robot(), findDialog("Plugins", false, timeout)) func(pluginDialog) if (!needToKeepDialog) pluginDialog.waitTillGone() @@ -132,7 +134,7 @@ open class GuiTestCase { * 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. */ - fun chooseFileInFileChooser(path: String, timeout: Long = defaultTimeout) { + fun chooseFileInFileChooser(path: String, timeout: Timeout = Timeouts.defaultTimeout) { val macNativeFileChooser = SystemInfo.isMac() && (System.getProperty("ide.mac.file.chooser.native", "true").toLowerCase() == "false") if (macNativeFileChooser) { MacFileChooserDialogFixture(robot()).selectByPath(path) @@ -140,7 +142,7 @@ open class GuiTestCase { else { val fileChooserDialog: JDialog try { - fileChooserDialog = GuiTestUtilKt.withPauseWhenNull(timeoutInSeconds = timeout.toInt()) { + fileChooserDialog = GuiTestUtilKt.withPauseWhenNull(timeout = timeout) { robot().finder() .findAll(GuiTestUtilKt.typeMatcher(JDialog::class.java) { true }) .firstOrNull { @@ -151,11 +153,11 @@ open class GuiTestCase { } } catch (timeoutError: WaitTimedOutError) { - throw ComponentLookupException("Unable to find file chooser dialog in ${timeout.toInt()} seconds") + throw ComponentLookupException("Unable to find file chooser dialog in ${timeout.toSec()} seconds") } val dialogFixture = JDialogFixture(robot(), fileChooserDialog) with(dialogFixture) { - asyncProcessIcon().waitUntilStop(20) + asyncProcessIcon().waitUntilStop(Timeouts.seconds30) textfield("") invokeAction("\$SelectAll") typeText(path) @@ -313,14 +315,14 @@ open class GuiTestCase { /** * Finds JDialog with a specific title (if title is null showing dialog should be only one) and returns created JDialogFixture */ - fun dialog(title: String? = null, ignoreCaseTitle: Boolean, timeoutInSeconds: Long): JDialogFixture { + fun dialog(title: String? = null, ignoreCaseTitle: Boolean, timeout: Timeout = Timeouts.defaultTimeout): JDialogFixture { if (title == null) { - val jDialog = waitUntilFound(null, JDialog::class.java, timeoutInSeconds) { true } + val jDialog = waitUntilFound(null, JDialog::class.java, timeout) { true } return JDialogFixture(robot(), jDialog) } else { try { - val dialog = GuiTestUtilKt.withPauseWhenNull(timeoutInSeconds = timeoutInSeconds.toInt()) { + val dialog = GuiTestUtilKt.withPauseWhenNull(timeout = timeout) { val allMatchedDialogs = robot().finder().findAll(typeMatcher(JDialog::class.java) { if (ignoreCaseTitle) it.title.toLowerCase() == title.toLowerCase() else it.title == title }).filter { it.isShowing && it.isEnabled && it.isVisible } @@ -331,7 +333,7 @@ open class GuiTestCase { return JDialogFixture(robot(), dialog) } catch (timeoutError: WaitTimedOutError) { - throw ComponentLookupException("Timeout error for finding JDialog by title \"$title\" for $timeoutInSeconds seconds") + throw ComponentLookupException("Timeout error for finding JDialog by title \"$title\" for ${timeout.toSec()} seconds") } } } @@ -339,8 +341,8 @@ open class GuiTestCase { /** * Finds JDialog with a specific title (if title is null showing dialog should be only one) */ - private fun findDialog(title: String?, ignoreCaseTitle: Boolean, timeoutInSeconds: Long): JDialog = - waitUntilFound(null, JDialog::class.java, timeoutInSeconds) { + private fun findDialog(title: String?, ignoreCaseTitle: Boolean, timeout: Timeout): JDialog = + waitUntilFound(null, JDialog::class.java, timeout) { title?.equals(it.title, ignoreCaseTitle)?.and(it.isShowing && it.isEnabled && it.isVisible) ?: true } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCaseExt.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCaseExt.kt index f55a4150e1a7..8e29fc877abe 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCaseExt.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestCaseExt.kt @@ -2,10 +2,10 @@ package com.intellij.testGuiFramework.impl import com.intellij.testGuiFramework.fixtures.GutterFixture -import com.intellij.testGuiFramework.fixtures.JDialogFixture import com.intellij.testGuiFramework.fixtures.extended.ExtendedJTreePathFixture +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.util.* -import org.fest.swing.exception.ComponentLookupException +import org.fest.swing.timing.Condition import org.fest.swing.timing.Pause import org.hamcrest.Matcher import org.junit.After @@ -152,7 +152,15 @@ fun GuiTestCase.mavenReimport() { ideFrame { toolwindow(id = "Maven") { content(tabName = "") { - actionButton("Reimport All Maven Projects").click() + val button = actionButton("Reimport All Maven Projects") + Pause.pause(object : Condition("Wait for button Reimport All Maven Projects to be enabled.") { + override fun test(): Boolean { + return button.isEnabled + } + }, Timeouts.minutes02) + robot().waitForIdle() + button.click() + robot().waitForIdle() } } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestRule.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestRule.kt index 1bc706622e05..8277969b6011 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestRule.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestRule.kt @@ -22,6 +22,7 @@ import com.intellij.testGuiFramework.fixtures.IdeFrameFixture import com.intellij.testGuiFramework.fixtures.WelcomeFrameFixture import com.intellij.testGuiFramework.fixtures.newProjectWizard.NewProjectWizardFixture import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.framework.IdeTestApplication.getFailedTestVideoDirPath import com.intellij.testGuiFramework.impl.GuiTestUtilKt.computeOnEdt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.runOnEdt @@ -232,7 +233,7 @@ class GuiTestRule : TestRule { // We close all modal dialogs left over, because they block the AWT thread and could trigger a deadlock in the next test. val closedModalDialogSet = hashSetOf() try { - waitUntil("all modal dialogs will be closed", timeoutInSeconds = 10) { + waitUntil("all modal dialogs will be closed", timeout = Timeouts.seconds10) { val modalDialog: Dialog = getActiveModalDialog() ?: return@waitUntil true if (closedModalDialogSet.contains(modalDialog)) { //wait a second to let a dialog be closed @@ -319,7 +320,7 @@ class GuiTestRule : TestRule { } fun closeAllProjects() { - waitUntil("close all projects", 120) { + waitUntil("close all projects", Timeouts.defaultTimeout) { val openProjects = ProjectManager.getInstance().openProjects runOnEdt { TransactionGuard.submitTransaction(ApplicationManager.getApplication(), Runnable { @@ -346,7 +347,7 @@ class GuiTestRule : TestRule { } ?: false if (welcomeFrameShown) { - waitUntil("Welcome frame to show up", 120) { + waitUntil("Welcome frame to show up", Timeouts.defaultTimeout) { Frame.getFrames().any { it === WelcomeFrame.getInstance() && it.isShowing } } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestUtilKt.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestUtilKt.kt index 18495521662d..fa508b4791cb 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestUtilKt.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/impl/GuiTestUtilKt.kt @@ -4,6 +4,8 @@ package com.intellij.testGuiFramework.impl import com.intellij.diagnostic.MessagePool import com.intellij.openapi.progress.ProgressManager import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts +import com.intellij.testGuiFramework.framework.toSec import com.intellij.ui.EngravedLabel import org.fest.swing.core.ComponentMatcher import org.fest.swing.core.GenericTypeMatcher @@ -196,21 +198,21 @@ object GuiTestUtilKt { /** * waits for 30 sec timeout when functionProbeToNull() not return null * - * @throws WaitTimedOutError with the text: "Timed out waiting for $timeoutInSeconds second(s) until {@code conditionText} will be not null" + * @throws WaitTimedOutError with the text: "Timed out waiting for $timeout second(s) until {@code conditionText} will be not null" */ - fun withPauseWhenNull(conditionText: String = "function to probe will", timeoutInSeconds: Int = 30, functionProbeToNull: () -> ReturnType?): ReturnType { + fun withPauseWhenNull(conditionText: String = "function to probe will", timeout: Timeout = Timeouts.defaultTimeout, functionProbeToNull: () -> ReturnType?): ReturnType { var result: ReturnType? = null - waitUntil("$conditionText will be not null", timeoutInSeconds) { + waitUntil("$conditionText will be not null", timeout) { result = functionProbeToNull() result != null } return result!! } - fun waitUntil(condition: String, timeoutInSeconds: Int = 60, conditionalFunction: () -> Boolean) { - Pause.pause(object : Condition("$timeoutInSeconds second(s) until $condition") { + fun waitUntil(condition: String, timeout: Timeout = Timeouts.defaultTimeout, conditionalFunction: () -> Boolean) { + Pause.pause(object : Condition("${timeout.toSec()} second(s) until $condition") { override fun test() = conditionalFunction() - }, Timeout.timeout(timeoutInSeconds.toLong(), TimeUnit.SECONDS)) + }, timeout) } fun silentWaitUntil(condition: String, timeoutInSeconds: Int = 60, conditionalFunction: () -> Boolean) { @@ -244,24 +246,24 @@ object GuiTestUtilKt { } fun waitUntilGone(robot: Robot, - timeoutInSeconds: Int = 30, + timeout: Timeout = Timeouts.seconds30, root: Container? = null, matcher: GenericTypeMatcher) { - return GuiTestUtil.waitUntilGone(root, timeoutInSeconds, matcher) + return GuiTestUtil.waitUntilGone(root, timeout, matcher) } - fun GuiTestCase.waitProgressDialogUntilGone(dialogTitle: String, timeoutToAppearInSeconds: Int = 5, timeoutToGoneInSeconds: Int = 60) { - waitProgressDialogUntilGone(this.robot(), dialogTitle, timeoutToAppearInSeconds, timeoutToGoneInSeconds) + fun GuiTestCase.waitProgressDialogUntilGone(dialogTitle: String, timeoutToAppear: Timeout = Timeouts.seconds05, timeoutToGone: Timeout = Timeouts.defaultTimeout) { + waitProgressDialogUntilGone(this.robot(), dialogTitle, timeoutToAppear, timeoutToGone) } fun waitProgressDialogUntilGone(robot: Robot, progressTitle: String, - timeoutToAppearInSeconds: Int = 5, - timeoutToGoneInSeconds: Int = 60) { + timeoutToAppear: Timeout = Timeouts.seconds30, + timeoutToGone: Timeout = Timeouts.defaultTimeout) { //wait dialog appearance. In a bad case we could pass dialog appearance. var dialog: JDialog? = null try { - waitUntil("progress dialog with title $progressTitle will appear", timeoutToAppearInSeconds) { + waitUntil("progress dialog with title $progressTitle will appear", timeoutToAppear) { dialog = findProgressDialog(robot, progressTitle) dialog != null } @@ -269,7 +271,7 @@ object GuiTestUtilKt { catch (timeoutError: WaitTimedOutError) { return } - waitUntil("progress dialog with title $progressTitle will gone", timeoutToGoneInSeconds) { dialog == null || !dialog!!.isShowing } + waitUntil("progress dialog with title $progressTitle will gone", timeoutToGone) { dialog == null || !dialog!!.isShowing } } fun findProgressDialog(robot: Robot, progressTitle: String): JDialog? { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/PluginTestCase.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/PluginTestCase.kt index 9f86097bd1e5..baa32369406c 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/PluginTestCase.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/PluginTestCase.kt @@ -16,6 +16,7 @@ package com.intellij.testGuiFramework.testCases import com.intellij.testGuiFramework.fixtures.JDialogFixture +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitProgressDialogUntilGone import com.intellij.testGuiFramework.launcher.GuiTestOptions @@ -51,7 +52,7 @@ open class PluginTestCase : GuiTestCase() { GuiTestThread.client?.send(TransportMessage(MessageType.RESTART_IDE_AND_RESUME, RestartIdeAndResumeContainer(RestartIdeCause.PLUGIN_INSTALLED))) ?: throw Exception( "Unable to get the client instance to send message.") //wait until IDE is going to restart - GuiTestUtilKt.waitUntil("IDE will be closed", timeoutInSeconds = 120) { false } + GuiTestUtilKt.waitUntil("IDE will be closed", timeout = Timeouts.defaultTimeout) { false } } } @@ -81,7 +82,7 @@ open class PluginTestCase : GuiTestCase() { dialog("Plugins") { //Check if plugin has already been installed try { - table(pluginName, timeout = 1L).cell(pluginName).click() + table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() button("OK").click() ensureButtonOkHasPressed(this@PluginTestCase) } @@ -93,7 +94,7 @@ open class PluginTestCase : GuiTestCase() { } } try { - message("IDE and Plugin Updates", timeout = 5L) { + message("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } } @@ -106,7 +107,7 @@ open class PluginTestCase : GuiTestCase() { val dialogTitle = "Plugins" try { GuiTestUtilKt.waitUntilGone(robot = guiTestCase.robot(), - timeoutInSeconds = 2, + timeout = Timeouts.seconds05, matcher = GuiTestUtilKt.typeMatcher( JDialog::class.java) { it.isShowing && it.title == dialogTitle }) } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/SystemPropertiesTestCase.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/SystemPropertiesTestCase.kt index baa7c22321a5..73c14a2d99fd 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/SystemPropertiesTestCase.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/testCases/SystemPropertiesTestCase.kt @@ -1,6 +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.testCases +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.impl.GuiTestThread import com.intellij.testGuiFramework.impl.GuiTestUtilKt @@ -27,7 +28,7 @@ open class SystemPropertiesTestCase : GuiTestCase() { setUpBlock(systemProperties) GuiTestThread.client?.send(createTransportMessage(systemProperties)) ?: throw Exception( "Unable to get the client instance to send message.") - GuiTestUtilKt.waitUntil("IDE will be closed", timeoutInSeconds = 120) { false } + GuiTestUtilKt.waitUntil("IDE will be closed", timeout = Timeouts.minutes02) { false } } private fun createTransportMessage(systemProperties: Array>) = diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/EnvironmentVariablesModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/EnvironmentVariablesModel.kt index 6874b530f1ce..cf1f412ca0ab 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/EnvironmentVariablesModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/EnvironmentVariablesModel.kt @@ -2,7 +2,7 @@ package com.intellij.testGuiFramework.util.scenarios import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.impl.actionButton import com.intellij.testGuiFramework.impl.button @@ -32,7 +32,7 @@ class EnvironmentVariablesModel(val testCase: GuiTestCase) : TestUtilsClass(test val GuiTestCase.envVarsModel by EnvironmentVariablesModel fun EnvironmentVariablesModel.connectDialog(): JDialogFixture = - testCase.dialog(EnvironmentVariablesModel.Constants.envVarsTitle, true, GuiTestUtil.defaultTimeout) + testCase.dialog(EnvironmentVariablesModel.Constants.envVarsTitle, true, Timeouts.defaultTimeout) fun EnvironmentVariablesModel.paste(property: String) { assert(property.contains(EnvironmentVariablesModel.Constants.pattern)) diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/NewProjectDialogModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/NewProjectDialogModel.kt index 706e4b1bd870..91064c3bfc26 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/NewProjectDialogModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/NewProjectDialogModel.kt @@ -2,8 +2,8 @@ package com.intellij.testGuiFramework.util.scenarios import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout import com.intellij.testGuiFramework.framework.GuiTestUtil.typeText +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.* import com.intellij.testGuiFramework.util.scenarios.NewProjectDialogModel.Constants.buttonCancel @@ -194,7 +194,7 @@ class NewProjectDialogModel(val testCase: GuiTestCase) : TestUtilsClass(testCase val GuiTestCase.newProjectDialogModel by NewProjectDialogModel fun NewProjectDialogModel.connectDialog(): JDialogFixture = - testCase.dialog(NewProjectDialogModel.Constants.newProjectTitle, true, defaultTimeout) + testCase.dialog(NewProjectDialogModel.Constants.newProjectTitle, true, Timeouts.defaultTimeout) typealias LibrariesSet = Set fun LibrariesSet.isSetEmpty() = isEmpty() || all { it.isEmpty() } @@ -470,7 +470,7 @@ fun NewProjectDialogModel.assertGroupPresent(group: NewProjectDialogModel.Groups with(guiTestCase) { with(connectDialog()) { // Group `Java` always exists - val list: JListFixture = jList(groupJava, timeout = 2L) + val list: JListFixture = jList(groupJava, timeout = Timeouts.seconds05) logTestStep("Check ${group} is present in the New Project dialog") assert(list.contents().contains(group.toString())) { "${group} group is absent (may be plugin not installed or Community edition runs instead of Ultimate)" diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt index 8d1c494cb794..a0ba9da5d55b 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogModel.kt @@ -3,7 +3,7 @@ package com.intellij.testGuiFramework.util.scenarios import com.intellij.testGuiFramework.fixtures.JDialogFixture import com.intellij.testGuiFramework.fixtures.extended.ExtendedButtonFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.logInfo import com.intellij.testGuiFramework.util.logTestStep @@ -23,14 +23,14 @@ class PluginsDialogModel(val testCase: GuiTestCase) : TestUtilsClass(testCase) { val GuiTestCase.pluginsDialogModel: PluginsDialogModel by PluginsDialogModel fun PluginsDialogModel.connectDialog(): JDialogFixture = - testCase.dialog("Plugins", true, defaultTimeout) + 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 = 1L).cell(pluginName).click() + dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() } true } @@ -49,7 +49,7 @@ fun PluginsDialogModel.getPluginVersion(pluginName: String): String { with(testCase) { logTestStep("Search `$pluginName` plugin") val dialog = connectDialog() - dialog.table(pluginName, timeout = 1L).cell(pluginName).click() + dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() logUIStep("Get installed version of `$pluginName` plugin") dialog.label("Version").text()?.removePrefix("version:")?.trim() ?: "" } @@ -67,7 +67,7 @@ fun PluginsDialogModel.getPluginButton(pluginName: String, buttonName: String): with(testCase) { logTestStep("Search `$pluginName` plugin") val dialog = connectDialog() - dialog.table(pluginName, timeout = 1L).cell(pluginName).click() + dialog.table(pluginName, timeout = Timeouts.seconds05).cell(pluginName).click() logUIStep("Search `$buttonName` button") dialog.button(buttonName) } @@ -111,8 +111,8 @@ fun PluginsDialogModel.ensureButtonOkHasPressed() { try { testCase.logTestStep("Check that `Plugins` dialog closed") GuiTestUtilKt.waitUntilGone(robot = testCase.robot(), - timeoutInSeconds = 2, - matcher = GuiTestUtilKt.typeMatcher( + timeout = Timeouts.seconds05, + matcher = GuiTestUtilKt.typeMatcher( JDialog::class.java) { it.isShowing && it.title == dialogTitle }) } catch (timeoutError: WaitTimedOutError) { 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 656270d39844..01ceed753ea7 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/PluginsDialogScenarios.kt @@ -1,6 +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.framework.Timeouts import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.impl.GuiTestThread import com.intellij.testGuiFramework.impl.GuiTestUtilKt @@ -36,7 +37,7 @@ fun PluginsDialogScenarios.uninstallPlugin(pluginName: String) { else { pluginsDialogModel.pressCancel() } - dialog("IDE and Plugin Updates", timeout = 5L) { button("Postpone").click() } + dialog("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } } else pluginsDialogModel.pressCancel() @@ -58,7 +59,7 @@ fun PluginsDialogScenarios.actionAndRestart(actionFunction: () -> Unit) { RestartIdeCause.PLUGIN_INSTALLED))) ?: throw Exception( "Unable to get the client instance to send message.") //wait until IDE is going to restart - GuiTestUtilKt.waitUntil("IDE will be closed", timeoutInSeconds = 120) { false } + GuiTestUtilKt.waitUntil("IDE will be closed", timeout = Timeouts.defaultTimeout) { false } } } @@ -66,7 +67,7 @@ fun PluginsDialogScenarios.installPluginFromDisk(pluginFileName: String) { with(testCase) { welcomePageDialogModel.openPluginsDialog() pluginsDialogModel.installPluginFromDisk(pluginFileName) - dialog("IDE and Plugin Updates", timeout = 5L) { button("Postpone").click() } + dialog("IDE and Plugin Updates", timeout = Timeouts.seconds05) { button("Postpone").click() } } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/ProjectStructureDialogModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/ProjectStructureDialogModel.kt index 9aae7725e977..65f65fcd0755 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/ProjectStructureDialogModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/ProjectStructureDialogModel.kt @@ -2,7 +2,7 @@ package com.intellij.testGuiFramework.util.scenarios import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil.defaultTimeout +import com.intellij.testGuiFramework.framework.Timeouts.defaultTimeout import com.intellij.testGuiFramework.impl.GuiTestCase import com.intellij.testGuiFramework.impl.button import com.intellij.testGuiFramework.impl.jList diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationModel.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationModel.kt index 0e36e0168e7d..d6b8375ebcf2 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationModel.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationModel.kt @@ -3,7 +3,7 @@ package com.intellij.testGuiFramework.util.scenarios import com.intellij.testGuiFramework.util.FinderPredicate import com.intellij.testGuiFramework.fixtures.JDialogFixture -import com.intellij.testGuiFramework.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.Predicate import com.intellij.testGuiFramework.util.logTestStep @@ -35,7 +35,7 @@ class RunConfigurationModel(testCase: GuiTestCase) : TestUtilsClass(testCase) { val envVarsField = CustomConfigurationField( actionIsPresent = { model: RunConfigurationModel, title: String -> with(model.connectDialog()) { - model.guiTestCase.exists { textfield(title, timeout = 1) } + model.guiTestCase.exists { textfield(title, timeout = Timeouts.noTimeout) } } }, actionSetValue = { model, title: String, value: String -> @@ -74,12 +74,12 @@ class RunConfigurationModel(testCase: GuiTestCase) : TestUtilsClass(testCase) { fun RunConfigurationModel.isFieldPresent(): Boolean { with(connectDialog()) { return when (kind) { - RunConfigurationModel.FieldKind.Text -> guiTestCase.exists { textfield(title, timeout = 1) } - RunConfigurationModel.FieldKind.Check -> guiTestCase.exists { checkbox(title, timeout = 1) } + RunConfigurationModel.FieldKind.Text -> guiTestCase.exists { textfield(title, timeout = Timeouts.noTimeout) } + RunConfigurationModel.FieldKind.Check -> guiTestCase.exists { checkbox(title, timeout = Timeouts.noTimeout) } RunConfigurationModel.FieldKind.Choice -> TODO() RunConfigurationModel.FieldKind.List -> TODO() RunConfigurationModel.FieldKind.Tree -> TODO() - RunConfigurationModel.FieldKind.Combo -> guiTestCase.exists { combobox(title, timeout = 1) } + RunConfigurationModel.FieldKind.Combo -> guiTestCase.exists { combobox(title, timeout = Timeouts.noTimeout) } RunConfigurationModel.FieldKind.Custom -> custom?.actionIsPresent?.invoke(this@isFieldPresent, title) ?: throw IllegalStateException( "Handler for field '$title' not set") @@ -162,7 +162,7 @@ class RunConfigurationModel(testCase: GuiTestCase) : TestUtilsClass(testCase) { val GuiTestCase.runConfigModel by RunConfigurationModel fun RunConfigurationModel.connectDialog(): JDialogFixture = - guiTestCase.dialog(RunConfigurationModel.Constants.runConfigTitle, true, GuiTestUtil.defaultTimeout) + guiTestCase.dialog(RunConfigurationModel.Constants.runConfigTitle, true, Timeouts.defaultTimeout) fun RunConfigurationModel.checkConfigurationExistsAndSelect(vararg configuration: String) { with(connectDialog()) { diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationScenarios.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationScenarios.kt index 7e29a3ee589d..d536253398dc 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationScenarios.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/util/scenarios/RunConfigurationScenarios.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.framework.GuiTestUtil +import com.intellij.testGuiFramework.framework.Timeouts import com.intellij.testGuiFramework.impl.* import com.intellij.testGuiFramework.util.Key import com.intellij.testGuiFramework.util.logTestStep @@ -28,10 +28,10 @@ fun RunConfigurationScenarios.openRunConfiguration(vararg configuration: String) navigationBar { assert(exists { button(configurationName) }) { "Button `$configurationName` not found on Navigation bar" } } - GuiTestUtilKt.waitUntil("Menu item '${RunConfigurationScenarios.Constants.editConfigurationMenuItem}' is enabled", GuiTestUtil.LONG_TIMEOUT.duration().toInt()){ + GuiTestUtilKt.waitUntil("Menu item '${RunConfigurationScenarios.Constants.editConfigurationMenuItem}' is enabled", Timeouts.minutes05){ shortcut(Key.ESCAPE) button(configurationName).click() - popupMenu(RunConfigurationScenarios.Constants.editConfigurationMenuItem, GuiTestUtil.NO_TIMEOUT).isSearchedItemEnable() + popupMenu(RunConfigurationScenarios.Constants.editConfigurationMenuItem, Timeouts.noTimeout).isSearchedItemEnable() } popupMenu(RunConfigurationScenarios.Constants.editConfigurationMenuItem).clickSearchedItem() }