import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.event.InputEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * Simple standalone AWT robot test.
 */
public class SimpleAWTRobotTest {

    private boolean clicked = false;

    public void initGUI() {
        JFrame frame = new JFrame("Simple AWT Robot Test");
        frame.setLayout(new BorderLayout());
        frame.setUndecorated(true);
        frame.setLocation(300, 300);

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setPreferredSize(new Dimension(100, 100));
        frame.add(panel);

        JButton button = new JButton("Click me");
        button.addActionListener(e -> clicked = true);
        panel.add(button, BorderLayout.CENTER);

        frame.pack();
        frame.setVisible(true);
    }

    public void test() throws Exception {
        final Robot robot = new Robot();

        SwingUtilities.invokeAndWait(() -> {
            this.initGUI();
        });
        SwingUtilities.invokeAndWait(() -> {
            //robot.mouseMove(0, 0);
            robot.mouseMove(350, 350);
        });
        Thread.sleep(500);
        SwingUtilities.invokeAndWait(() -> {
            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        });
        Thread.sleep(500);
        SwingUtilities.invokeAndWait(() -> {
            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        });
        Thread.sleep(500);
        if (clicked) {
            System.out.println("PASSED");
        } else {
            System.out.println("*** FAILED");
        }
        System.exit(0);
    }

    public static void main(String[] args) throws Exception {
        new SimpleAWTRobotTest().test();
    }
    
}