diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java index 3f391b788268..2446a8c6bb76 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessageDialogFixture.java @@ -40,20 +40,35 @@ class MessageDialogFixture extends IdeaDialogFixture implements M if (!title.equals(dialog.getTitle()) || !dialog.isShowing()) { return false; } - DialogWrapper wrapper = getDialogWrapperFrom(dialog, DialogWrapper.class); - if (wrapper != null) { - String typeName = Messages.class.getName() + "$MessageDialog"; - if (typeName.equals(wrapper.getClass().getName())) { - wrapperRef.set(wrapper); - return true; - } - } - return false; + return isMessageDialog(dialog, wrapperRef); } }, LONG_TIMEOUT); return new MessageDialogFixture(robot, dialog, wrapperRef.get()); } + static MessageDialogFixture findAny(@NotNull Robot robot) { + final Ref wrapperRef = new Ref(); + JDialog dialog = waitUntilFound(robot, null, new GenericTypeMatcher(JDialog.class) { + @Override + protected boolean isMatching(@NotNull JDialog dialog) { + return isMessageDialog(dialog, wrapperRef); + } + }, LONG_TIMEOUT); + return new MessageDialogFixture(robot, dialog, wrapperRef.get()); + } + + private static boolean isMessageDialog(@NotNull JDialog dialog, Ref wrapperRef) { + DialogWrapper wrapper = getDialogWrapperFrom(dialog, DialogWrapper.class); + if (wrapper != null) { + String typeName = Messages.class.getName() + "$MessageDialog"; + if (typeName.equals(wrapper.getClass().getName())) { + wrapperRef.set(wrapper); + return true; + } + } + return false; + } + private MessageDialogFixture(@NotNull Robot robot, @NotNull JDialog target, @NotNull DialogWrapper dialogWrapper) { super(robot, target, dialogWrapper); } diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java index 59010b486c9d..4fd7748d7b38 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/MessagesFixture.java @@ -42,13 +42,33 @@ public class MessagesFixture { @NotNull public static MessagesFixture findByTitle(@NotNull Robot robot, @NotNull Container root, @NotNull String title) { + if (Messages.canShowMacSheetPanel()) { + return new MessagesFixture(findMacSheetByTitle(robot, root, title)); + } + MessageDialogFixture dialog = MessageDialogFixture.findByTitle(robot, title); + return new MessagesFixture(dialog); + } + + @NotNull + public static MessagesFixture findAny(@NotNull Robot robot, @NotNull Container root) { if (Messages.canShowMacSheetPanel()) { - return new MessagesFixture(findMacSheetByTitle(robot, root, title)); + return new MessagesFixture(findMacSheetAny(robot, root)); } - MessageDialogFixture dialog = MessageDialogFixture.findByTitle(robot, title); + MessageDialogFixture dialog = MessageDialogFixture.findAny(robot); return new MessagesFixture(dialog); } + + + public static boolean exists(@NotNull Robot robot, @NotNull Container root, @NotNull String title) { + try{ + findByTitle(robot, root, title); + return true; + } catch (AssertionError ae) { + return false; + } + } + private MessagesFixture(@NotNull ContainerFixture delegate) { myDelegate = delegate; } @@ -60,7 +80,6 @@ public class MessagesFixture { } - @NotNull public MessagesFixture clickYes() { return click("Yes"); @@ -85,19 +104,7 @@ public class MessagesFixture { @NotNull static JPanelFixture findMacSheetByTitle(@NotNull Robot robot, @NotNull Container root, @NotNull String title) { - JPanel sheetPanel = GuiTestUtil.waitUntilFound(robot, root, new GenericTypeMatcher(JPanel.class) { - @Override - protected boolean isMatching(@NotNull JPanel panel) { - if (panel.getClass().getName().startsWith(SheetController.class.getName()) && panel.isShowing()) { - SheetController controller = findSheetController(panel); - JPanel sheetPanel = field("mySheetPanel").ofType(JPanel.class).in(controller).get(); - if (sheetPanel == panel) { - return true; - } - } - return false; - } - }, GuiTestUtil.LONG_TIMEOUT); + JPanel sheetPanel = getSheetPanel(robot, root); String sheetTitle = getTitle(sheetPanel, robot); assertThat(sheetTitle).as("Sheet title").isEqualTo(title); @@ -105,6 +112,35 @@ public class MessagesFixture { return new MacSheetPanelFixture(robot, sheetPanel); } + private static JPanelFixture findMacSheetAny(@NotNull Robot robot, @NotNull Container root) { + JPanel sheetPanel = getSheetPanel(robot, root); + + return new MacSheetPanelFixture(robot, sheetPanel); + } + + @NotNull + private static JPanel getSheetPanel(@NotNull Robot robot, @NotNull Container root) { + return GuiTestUtil.waitUntilFound(robot, root, new GenericTypeMatcher(JPanel.class) { + @Override + protected boolean isMatching(@NotNull JPanel panel) { + if (panel.getClass().getName().startsWith(SheetController.class.getName()) && panel.isShowing()) { + SheetController controller = findSheetController(panel); + JPanel sheetPanel1 = field("mySheetPanel").ofType(JPanel.class).in(controller).get(); + if (sheetPanel1 == panel) { + return true; + } + } + return false; + } + }, GuiTestUtil.LONG_TIMEOUT); + } + + @Nullable + public String getTitle() { + if (myDelegate instanceof MacSheetPanelFixture) return ((MacSheetPanelFixture)myDelegate).getTitle(); + return ((MessageDialogFixture)myDelegate).target().getTitle(); + } + @Nullable private static String getTitle(@NotNull JPanel sheetPanel, @NotNull Robot robot) { final JEditorPane messageTextPane = getMessageTextPane(sheetPanel); @@ -133,6 +169,21 @@ public class MessagesFixture { super(robot, target); } + + @Nullable + public String getTitle(){ + final JEditorPane messageTextPane = getMessageTextPane(target()); + + JEditorPane titleTextPane = robot().finder().find(target(), new GenericTypeMatcher(JEditorPane.class) { + @Override + protected boolean isMatching(@NotNull JEditorPane editorPane) { + return editorPane != messageTextPane; + } + }); + + return getHtmlBody(titleTextPane.getText()); + } + @Override @NotNull public String getMessage() {