[gui-test] added findAny(...) to find Message without title; and exists(...) to know about existence of Message with specific title

This commit is contained in:
Sergey Karashevich
2016-11-25 11:41:18 +03:00
parent 113652c018
commit 6c78255a74
2 changed files with 91 additions and 25 deletions
@@ -40,20 +40,35 @@ class MessageDialogFixture extends IdeaDialogFixture<DialogWrapper> 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<DialogWrapper> wrapperRef = new Ref<DialogWrapper>();
JDialog dialog = waitUntilFound(robot, null, new GenericTypeMatcher<JDialog>(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<DialogWrapper> 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);
}
@@ -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<? extends Container> 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>(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>(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>(JEditorPane.class) {
@Override
protected boolean isMatching(@NotNull JEditorPane editorPane) {
return editorPane != messageTextPane;
}
});
return getHtmlBody(titleTextPane.getText());
}
@Override
@NotNull
public String getMessage() {