From 623b57a2fa3fe5490f06a19ca7cc344de881fba8 Mon Sep 17 00:00:00 2001 From: Sergey Karashevich Date: Fri, 7 Jul 2017 12:16:25 +0300 Subject: [PATCH] [gui-test] project view select & expand fix Due to last changes in project view tree and project view structure we need to change ProjectViewFixture and reduce usage of deprecated methods, convert NodeFixture actions to AbstractTreeBuilder model actions basis. Also added a pause to getLocation() method to wait when appropriate treeNode appears. --- .../fixtures/ProjectViewFixture.java | 42 +++++++++++++------ .../framework/GuiTestUtil.java | 3 +- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.java index 62dca5be9c99..7285208e94bb 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/ProjectViewFixture.java @@ -22,6 +22,7 @@ import com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode; import com.intellij.ide.projectView.impl.nodes.NamedLibraryElement; import com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode; import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode; +import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.ide.util.treeView.AbstractTreeStructure; import com.intellij.ide.util.treeView.PresentableNodeDescriptor; import com.intellij.openapi.application.ReadAction; @@ -38,6 +39,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.ProjectViewTestUtil; import com.intellij.testGuiFramework.fixtures.extended.ExtendedTreeFixture; +import com.intellij.testGuiFramework.framework.GuiTestUtil; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.ui.tree.TreeUtil; import org.fest.swing.core.MouseButton; @@ -54,7 +56,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import java.awt.*; import java.util.ArrayList; @@ -62,6 +63,7 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicReference; +import static com.intellij.ide.projectView.BaseProjectTreeBuilder.getBuilderFor; import static com.intellij.testGuiFramework.framework.GuiTestUtil.SHORT_TIMEOUT; import static org.fest.assertions.Assertions.assertThat; import static org.fest.reflect.core.Reflection.field; @@ -194,9 +196,11 @@ public class ProjectViewFixture extends ToolWindowFixture { public class PaneFixture { @NotNull private final AbstractProjectViewPane myPane; + @NotNull private final AbstractTreeBuilder myBuilder; PaneFixture(@NotNull AbstractProjectViewPane pane) { myPane = pane; + myBuilder = getBuilderFor(myPane.getTree()); } @NotNull @@ -324,6 +328,7 @@ public class ProjectViewFixture extends ToolWindowFixture { @NotNull private final ProjectViewNode myNode; @NotNull private final AbstractTreeStructure myTreeStructure; @NotNull private final AbstractProjectViewPane myPane; + @NotNull private final AbstractTreeBuilder myBuilder; @NotNull private final Object[] myPath; NodeFixture(@NotNull ProjectViewNode node, @NotNull AbstractTreeStructure treeStructure, @NotNull AbstractProjectViewPane pane) { @@ -331,6 +336,7 @@ public class ProjectViewFixture extends ToolWindowFixture { myTreeStructure = treeStructure; myPane = pane; myPath = createPath(treeStructure, node); + myBuilder = getBuilderFor(myPane.getTree()); } @NotNull @@ -350,11 +356,27 @@ public class ProjectViewFixture extends ToolWindowFixture { } public Point getLocation() { + Ref mutableTreeNodeRef = new Ref<>(); + myPane.getTree(); + final JTree tree = myPane.getTree(); + + pause(new Condition("Waiting until default tree node for node: " + myNode.getTitle() + " will be loaded") { + @Override + public boolean test() { + final DefaultMutableTreeNode treeNode = TreeUtil.findNodeWithObject((DefaultMutableTreeNode)tree.getModel().getRoot(), myNode); + if (treeNode == null) { + return false; + } else { + mutableTreeNodeRef.set(treeNode); + return true; + } + } + }, GuiTestUtil.THIRTY_SEC_TIMEOUT); + assertNotNull(mutableTreeNodeRef.get()); + return ReadAction.compute(() -> { - myPane.getTree(); - final JTree tree = myPane.getTree(); - final DefaultMutableTreeNode dmtn = TreeUtil.findNodeWithObject((DefaultMutableTreeNode)tree.getModel().getRoot(), myNode); - final TreePath path = TreeUtil.getPathFromRoot(dmtn); + + final TreePath path = TreeUtil.getPathFromRoot(mutableTreeNodeRef.get()); final Rectangle bounds = tree.getPathBounds(path); assertNotNull(bounds); return new Point(bounds.x + bounds.height / 2, bounds.y + bounds.height / 2); @@ -432,7 +454,7 @@ public class ProjectViewFixture extends ToolWindowFixture { GuiActionRunner.execute(new GuiTask() { @Override protected void executeInEDT() throws Throwable { - myPane.expand(myPath, true); + myBuilder.select(myNode); } }); return this; @@ -443,17 +465,11 @@ public class ProjectViewFixture extends ToolWindowFixture { GuiActionRunner.execute(new GuiTask() { @Override protected void executeInEDT() throws Throwable { - myPane.getTree().scrollRowToVisible(getRow()); + myBuilder.scrollTo(myNode); } }); return this; } - private int getRow() { - TreeNode treeNode = TreeUtil.findNodeWithObject((DefaultMutableTreeNode)myPane.getTree().getModel().getRoot(), myNode); - assert treeNode != null; - TreePath treePath = TreeUtil.getPathFromRoot(treeNode); - return myPane.getTree().getRowForPath(treePath); - } } } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/GuiTestUtil.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/GuiTestUtil.java index a3c4dd7f3fab..4554c92994ba 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/GuiTestUtil.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/framework/GuiTestUtil.java @@ -98,8 +98,7 @@ import static org.fest.util.Strings.quote; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; -public final class -GuiTestUtil { +public final class GuiTestUtil { private static final Logger LOG = Logger.getInstance("#com.intellij.tests.gui.framework.GuiTestUtil");