Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import com.intellij.remoterobot.fixtures.CommonContainerFixture;
import com.intellij.remoterobot.fixtures.DefaultXpath;
import com.intellij.remoterobot.fixtures.FixtureName;
import com.intellij.remoterobot.fixtures.HeavyWeightWindowFixture;
import com.intellij.remoterobot.fixtures.JLabelFixture;
import com.intellij.remoterobot.fixtures.JListFixture;
import com.intellij.remoterobot.fixtures.JPopupMenuFixture;
Expand Down Expand Up @@ -184,7 +183,4 @@ private kotlin.Pair<Boolean, CommonContainerFixture> didProjectSdkListLoadAllIte
});
}

private boolean noHeavyWeightWindowVisible() {
return remoteRobot.findAll(HeavyWeightWindowFixture.class).isEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import com.intellij.remoterobot.fixtures.ComponentFixture;
import com.intellij.remoterobot.fixtures.DefaultXpath;
import com.intellij.remoterobot.fixtures.FixtureName;
import com.intellij.remoterobot.utils.WaitForConditionTimeoutException;
import com.redhat.devtools.intellij.commonuitest.utils.constants.XPathDefinitions;
import org.jetbrains.annotations.NotNull;

Expand All @@ -33,11 +32,9 @@
@DefaultXpath(by = "IdeStatusBarImpl type", xpath = XPathDefinitions.IDE_STATUS_BAR)
@FixtureName(name = "Ide Status Bar")
public class IdeStatusBar extends CommonContainerFixture {
private final RemoteRobot remoteRobot;

public IdeStatusBar(@NotNull RemoteRobot remoteRobot, @NotNull RemoteComponent remoteComponent) {
super(remoteRobot, remoteComponent);
this.remoteRobot = remoteRobot;
}

/**
Expand All @@ -49,13 +46,6 @@ public ComponentFixture inlineProgressPanel() {
return find(ComponentFixture.class, byXpath(XPathDefinitions.INLINE_PROGRESS_PANEL), Duration.ofSeconds(5));
}

/**
* Wait until the project has finished the import
*/
public void waitUntilProjectImportIsComplete() {
waitFor(Duration.ofSeconds(300), Duration.ofSeconds(5), "The project import did not finish in 5 minutes.", this::didProjectImportFinish);
}

/**
* Wait for 5 minutes until all the background tasks finish
*/
Expand All @@ -70,18 +60,9 @@ public void waitUntilAllBgTasksFinish(int timeout) {
waitFor(Duration.ofSeconds(timeout), Duration.ofSeconds(10), "the background tasks to finish in " + timeout + " seconds.", this::didAllBgTasksFinish);
}

private boolean didProjectImportFinish() {
try {
find(ComponentFixture.class, byXpath(XPathDefinitions.ENGRAVED_LABEL), Duration.ofSeconds(10));
} catch (WaitForConditionTimeoutException e) {
return true;
}
return false;
}

private boolean didAllBgTasksFinish() {
if (remoteRobot.find(IdeStatusBar.class).isShowing()) {
return remoteRobot.find(IdeStatusBar.class).inlineProgressPanel().findAllText().isEmpty();
if (isShowing()) {
return inlineProgressPanel().findAllText().isEmpty();
}
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
import com.intellij.remoterobot.data.RemoteComponent;
import com.intellij.remoterobot.fixtures.DefaultXpath;
import com.intellij.remoterobot.fixtures.FixtureName;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.idestatusbar.IdeStatusBar;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.BuildView;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowPane;
import com.redhat.devtools.intellij.commonuitest.utils.constants.XPathDefinitions;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -60,14 +57,34 @@ public void expandAll() {
}
}

private Boolean isTreeExpanded() {
int rows = getBuildTree().collectRows().size();
if (rows == 1) {
expandAll();
return false;
}
return rows > 1;
}

/**
* @param goal name of the build tasks you want to invoke (assemble, build, classes, clean, jar...)
*/
public void buildProject(String goal) {
runGradleTask("build", goal);
}

/**
* Build the project
* @param goal name of the verification tasks you want to invoke (check, test...)
*/
public void buildProject() {
waitFor(Duration.ofSeconds(30), Duration.ofSeconds(2), "the Gradle tree to appear in 30 seconds.", this::isTreeVisible);
public void verifyProject(String goal) {
runGradleTask("verification", goal);
}

private void runGradleTask(String subTask, String goal) {
waitFor(Duration.ofSeconds(30), Duration.ofSeconds(1), "the Gradle tree to appear.", this::isTreeVisible);
expandAll();
getBuildTree().doubleClickPath(new String[]{"Tasks", "build", "build"}, true);
remoteRobot.find(ToolWindowPane.class, Duration.ofSeconds(2)).find(BuildView.class, Duration.ofSeconds(5)).waitUntilBuildHasFinished();
remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(30)).waitUntilAllBgTasksFinish();
waitFor(Duration.ofSeconds(60), Duration.ofSeconds(1), "the Gradle tree to expand.", this::isTreeExpanded);
getBuildTree().doubleClickPath(new String[]{"Tasks", subTask, goal}, true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
import com.intellij.remoterobot.fixtures.DefaultXpath;
import com.intellij.remoterobot.fixtures.FixtureName;
import com.intellij.remoterobot.utils.Keyboard;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.idestatusbar.IdeStatusBar;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.BuildView;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowPane;
import com.redhat.devtools.intellij.commonuitest.utils.constants.XPathDefinitions;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -74,12 +71,9 @@ public void expandAll() {
*/
public void buildProject(String goal, String projectName) {
waitFor(Duration.ofSeconds(30), Duration.ofSeconds(2), "the Maven tree to appear.", this::isTreeVisible);

// below workaround due to https://github.com/JetBrains/intellij-ui-test-robot/issues/459
expandAll();
getBuildTree().doubleClickPath(new String[]{projectName, "Lifecycle", goal}, true);
remoteRobot.find(ToolWindowPane.class, Duration.ofSeconds(2)).find(BuildView.class, Duration.ofSeconds(5)).waitUntilBuildHasFinished();
remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(30)).waitUntilAllBgTasksFinish();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright (c) 2025 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v2.0 which accompanies this distribution,
* and is available at https://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.redhat.devtools.intellij.commonuitest.utils.build;

import com.intellij.remoterobot.RemoteRobot;
import com.redhat.devtools.intellij.commonuitest.exceptions.UITestException;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.idestatusbar.IdeStatusBar;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.BuildView;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowPane;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.buildtoolpane.MavenBuildToolPane;

import java.time.Duration;

/**
* Build project utility class
*/
public final class BuildUtils {

private BuildUtils() {throw new UITestException("Utility class with static methods.");}

/**
* Build a Maven project and wait for the result to be successful
*
* @param remoteRobot reference to the RemoteRobot instance
* @param projectName the name of the project
* @param goal the maven goal
*/
public static void buildMavenProjectAndWaitForFinish(RemoteRobot remoteRobot, String projectName, String goal) {
ToolWindowPane toolWinPane = remoteRobot.find(ToolWindowPane.class, Duration.ofSeconds(10));
toolWinPane.openMavenBuildToolPane();
MavenBuildToolPane mavenBuildToolPane = toolWinPane.find(MavenBuildToolPane.class, Duration.ofSeconds(10));
mavenBuildToolPane.buildProject(goal, projectName);
toolWinPane.find(BuildView.class, Duration.ofSeconds(5)).waitUntilBuildHasFinished();
remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(30)).waitUntilAllBgTasksFinish();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,9 @@ public static void createEmptyProject(RemoteRobot remoteRobot, String projectNam
*/
public static void waitAfterOpeningProject(RemoteRobot remoteRobot) {
IdeStatusBar ideStatusBar = remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(10));
ideStatusBar.waitUntilProjectImportIsComplete();
ideStatusBar.waitUntilAllBgTasksFinish(500);
MainIdeWindow mainIdeWindow = remoteRobot.find(MainIdeWindow.class, Duration.ofSeconds(5));
mainIdeWindow.maximizeIdeWindow();
ideStatusBar.waitUntilAllBgTasksFinish(500);
CodeWithMeDialog.closeCodeWithMePopupIfItAppears(remoteRobot);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,9 @@ static void prepareProject() {

newProjectDialogWizard.finish();
IdeStatusBar ideStatusBar = remoteRobot.find(IdeStatusBar.class, Duration.ofSeconds(10));
ideStatusBar.waitUntilProjectImportIsComplete();
ideStatusBar.waitUntilAllBgTasksFinish();
MainIdeWindow mainIdeWindow = remoteRobot.find(MainIdeWindow.class, Duration.ofSeconds(5));
mainIdeWindow.maximizeIdeWindow();
ideStatusBar.waitUntilAllBgTasksFinish();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,8 @@ void cleanUp() {
if (mainIdeWindow != null) {
// tests ending with opened Main Ide Window needs to close the project and clear workspace
IdeStatusBar ideStatusBar = mainIdeWindow.find(IdeStatusBar.class, Duration.ofSeconds(10));
ideStatusBar.waitUntilProjectImportIsComplete();
mainIdeWindow.maximizeIdeWindow();
ideStatusBar.waitUntilAllBgTasksFinish();
mainIdeWindow.maximizeIdeWindow();
mainIdeWindow.closeProject();
remoteRobot.find(FlatWelcomeFrame.class, Duration.ofSeconds(10)).clearWorkspace();
mainIdeWindow = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,9 @@ void closeCurrentProject() {
@Test
void progressBarTest() {
IdeStatusBar ideStatusBar = waitFor(Duration.ofSeconds(30), Duration.ofMillis(250), "Wait for the appearance of progress bar in the IDE status bar.", "The progress bar in status bar did not appear in 60 seconds.", IdeStatusBarTest::isProgressbarWithLabelVisible);
ideStatusBar.waitUntilProjectImportIsComplete();
ideStatusBar.waitUntilAllBgTasksFinish();
MainIdeWindow mainIdeWindow = remoteRobot.find(MainIdeWindow.class, Duration.ofSeconds(2));
mainIdeWindow.maximizeIdeWindow();
ideStatusBar.waitUntilAllBgTasksFinish();
assertTrue(mainIdeWindow.isShowing(), "The Main IDE Window should be open.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import com.redhat.devtools.intellij.commonuitest.AbstractLibraryBaseTest;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.BuildView;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.ToolWindowPane;
import com.redhat.devtools.intellij.commonuitest.fixtures.mainidewindow.toolwindowspane.buildtoolpane.MavenBuildToolPane;
import com.redhat.devtools.intellij.commonuitest.utils.build.BuildUtils;
import com.redhat.devtools.intellij.commonuitest.utils.project.CreateCloseUtils;
import com.redhat.devtools.intellij.commonuitest.utils.project.NewProjectType;
import org.junit.jupiter.api.AfterAll;
Expand Down Expand Up @@ -45,11 +45,8 @@ static void closeCurrentProject() {
}

@Test
void waitForSuccessfulBuildTest() {
toolWinPane.openMavenBuildToolPane();
MavenBuildToolPane mavenPane = toolWinPane.find(MavenBuildToolPane.class, Duration.ofSeconds(5));
assertTrue(mavenPane.isShowing(), "The maven pane should be opened but is not.");
mavenPane.buildProject("verify", PROJECT_NAME);
void waitForSuccessfulMavenBuildTest() {
BuildUtils.buildMavenProjectAndWaitForFinish(remoteRobot, PROJECT_NAME, "verify");
BuildView buildView = toolWinPane.find(BuildView.class, Duration.ofSeconds(10));
assertTrue(buildView.isBuildSuccessful(), "The build should be successful but is not.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ void createToolWindowsPaneFixture() {
}

@Test
void gradleBuildTest() {
void gradleTest() {
toolWinPane.openGradleBuildToolPane();
GradleBuildToolPane gradleBuildToolPane = toolWinPane.find(GradleBuildToolPane.class, Duration.ofSeconds(10));
gradleBuildToolPane.buildProject();
gradleBuildToolPane.buildProject("build");
BuildView buildView = toolWinPane.find(BuildView.class, Duration.ofSeconds(10));
buildView.waitUntilBuildHasFinished();
assertTrue(buildView.isBuildSuccessful(), "The build should be successful but is not.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ void mavenBuildTest() {
MavenBuildToolPane mavenBuildToolPane = toolWinPane.find(MavenBuildToolPane.class, Duration.ofSeconds(10));
mavenBuildToolPane.buildProject("verify", PROJECT_NAME);
BuildView buildView = toolWinPane.find(BuildView.class, Duration.ofSeconds(10));
buildView.waitUntilBuildHasFinished();
assertTrue(buildView.isBuildSuccessful(), "The build should be successful but is not.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ static void closeCurrentProject() {

@Test
void buildProject() {
gradleBuildToolPane.buildProject();
boolean isBuildSuccessful = toolWinPane.find(BuildView.class, Duration.ofSeconds(10)).isBuildSuccessful();
assertTrue(isBuildSuccessful, "The build should be successful but is not.");
gradleBuildToolPane.buildProject("build");
BuildView buildView = toolWinPane.find(BuildView.class, Duration.ofSeconds(10));
buildView.waitUntilBuildHasFinished();
assertTrue(buildView.isBuildSuccessful(), "The build should be successful but is not.");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,9 @@ static void closeCurrentProject() {
@Test
void buildProject() {
mavenBuildToolPane.buildProject("verify", PROJECT_NAME);
boolean isBuildSuccessful = toolWinPane.find(BuildView.class, Duration.ofSeconds(10)).isBuildSuccessful();
assertTrue(isBuildSuccessful, "The build should be successful but is not.");
BuildView buildView = toolWinPane.find(BuildView.class, Duration.ofSeconds(5));
buildView.waitUntilBuildHasFinished();
assertTrue(buildView.isBuildSuccessful(), "The build should be successful but is not.");
}

@Test
Expand Down
Loading