Код: Выделить всё
package app;
import solution.common.utils.MathConverter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JDropdownButton
extends JButton
implements ActionListener {
private JPopupMenu popupMenu;
public JDropdownButton() {
this(null, null);
}
public JDropdownButton(String text, Icon icon) {
super(text, icon);
super.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (null == popupMenu || null == popupMenu.getSubElements()) {
return;
}
if (!popupMenu.isVisible()) {
Point p = getLocationOnScreen();
popupMenu.setLocation(MathConverter.doubleToInt(p.getX()),
MathConverter.doubleToInt(p.getY()) + getHeight());
popupMenu.setVisible(true);
}
}
public void setDropdownMenu(JPopupMenu menu) {
popupMenu = menu;
if (popupMenu != null) {
popupMenu.setInvoker(this);
}
}
}
Код: Выделить всё
package app;
import org.junit.jupiter.api.Test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
class JDropdownButtonTest {
@Test
void actionPerformed_showsPopup() {
JDropdownButton dropdownButton = new JDropdownButton();
JPopupMenu popupMenu = new JPopupMenu();
dropdownButton.setDropdownMenu(popupMenu);
// JFrame frame = new JFrame();
// frame.add(dropdownButton);
// frame.setVisible(true);
assertFalse(popupMenu.isVisible());
dropdownButton.doClick();
assertTrue(popupMenu.isVisible());
}
}
Код: Выделить всё
java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:2062)
at java.awt.Component.getLocationOnScreen(Component.java:2036)
at app.JDropdownButton.actionPerformed(JDropdownButton.java:50)
Код: Выделить всё
@Test
void actionPerformed_showsPopup() {
JDropdownButton dropdownButton = spy(JDropdownButton.class);
given(dropdownButton.getLocationOnScreen()).willReturn(new Point(0,0));
JPopupMenu popupMenu = new JPopupMenu();
dropdownButton.setDropdownMenu(popupMenu);
// JFrame frame = new JFrame();
// frame.add(dropdownButton);
// frame.setVisible(true);
assertFalse(popupMenu.isVisible());
dropdownButton.doClick();
assertTrue(popupMenu.isVisible());
}
Поэтому мне нужен надежный тест графического пользовательского интерфейса, который можно было бы запустить и в автономной среде.
Как мне это сделать? Является ли обновление образа Docker CI-сервера единственным решением?
Подробнее здесь: https://stackoverflow.com/questions/788 ... nvironment