Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FindActivePopup does not work for cascade JPopupMenu with JMenu cascading items #6

Open
DaveBrad opened this issue Jan 30, 2013 · 0 comments

Comments

@DaveBrad
Copy link

When I test using findActivePopup I found that JPopupMenu with a cascade menu fails to found a popup.

On investigation (using FEST-Swing source code and debug via eclipse) the method private JPopupMenu activePopupMenu() of BasicRobot.java was doing a finder action and the found List structure had more than one item (JPopupMenu, JMenu). Thus the test for found.size() == 1 was failing. Changing the test to >= 1 resolved the problem.

Any chance this can be put into the new release of FEST-Swing?

Below is the code and a JUnit test for testing with a cascade.

BasicRobot.java

@RunsInEDT
private JPopupMenu activePopupMenu() {
List found = new ArrayList(finder().findAll(POPUP_MATCHER));
if (found.size() == 1) return (JPopupMenu)found.get(0);
return null;
}

advise to change to >= from == as the finder seems to find additional cascade jmenu in the array too

@RunsInEDT
private JPopupMenu activePopupMenu() {
List found = new ArrayList(finder().findAll(POPUP_MATCHER));
if (found.size() >= 1) return (JPopupMenu)found.get(0);
return null;
}

BasicRobot_findActivePopupMenu_Test.java

@RunsInEDT
final JPopupMenu addPopupMenuToTextFieldWithCascade() {
return createAndSetPopupMenuWithCascade(window.textField, "Luke", "Leia");
}

@RunsInEDT
public static JPopupMenu createAndSetPopupMenuWithCascade(final JComponent c, final String...items) {
return execute(new GuiQuery() {
@OverRide protected JPopupMenu executeInEDT() {
JPopupMenu popupMenu = new JPopupMenu();

      JMenu menu2 = new JMenu("cascade test");
      menu2.add(new JMenuItem("cascade line 1"));
      menu2.add(new JMenuItem("cascade line 2"));

      popupMenu.add(menu2);
      popupMenu.add(new JMenuItem(items[0]));
      popupMenu.add(menu2);
      popupMenu.add(new JMenuItem(items[1]));

      c.setComponentPopupMenu(popupMenu); // causes popup-menu to display
      return popupMenu;
    }
  });
}

@test
public void should_return_active_popupMenu_cascadingPopup() {
addPopupMenuToTextFieldWithCascade();
robot.showPopupMenu(window.textField);

// wait for 2nd cascade menu to show
pause(1000);

JPopupMenu found = robot.findActivePopupMenu();
MenuElement[] meArr = found.getSubElements();

Component comp = meArr[0].getComponent();

assertThat("cascade line 1").isEqualTo(((JMenuItem)comp).getText());

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant