package cn.com.jautoitx; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import org.junit.Assert; import org.junit.Test; import org.omg.CORBA.IntHolder; import cn.com.jautoitx.Mouse.MouseButton; import cn.com.jautoitx.Mouse.MouseCursor; import cn.com.jautoitx.Mouse.MouseWheelDirection; public class MouseTest extends BaseTest { @Test public void click() { JFrame frame = new JFrame("click - " + System.currentTimeMillis()); JButton button = new JButton("Click Me"); frame.getContentPane().add(button); frame.setBounds(0, 0, 400, 300); // add click listener to textArea final IntHolder leftMouseClickCount = new IntHolder(); final IntHolder middleMouseClickCount = new IntHolder(); final IntHolder rightMouseClickCount = new IntHolder(); button.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { leftMouseClickCount.value++; } else if (SwingUtilities.isMiddleMouseButton(e)) { middleMouseClickCount.value++; } else if (SwingUtilities.isRightMouseButton(e)) { rightMouseClickCount.value++; } } }); // show frame frame.setVisible(true); // move mouse to the button Mouse.move(200, 150); try { // left mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.click(MouseButton.LEFT, 200, 150); sleep(200); Assert.assertEquals(i + 1, leftMouseClickCount.value); Assert.assertEquals(0, middleMouseClickCount.value); Assert.assertEquals(0, rightMouseClickCount.value); } // middle mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.click(MouseButton.MIDDLE); sleep(200); Assert.assertEquals(4, leftMouseClickCount.value); Assert.assertEquals(i + 1, middleMouseClickCount.value); Assert.assertEquals(0, rightMouseClickCount.value); } // right mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.click(MouseButton.RIGHT); sleep(200); Assert.assertEquals(4, leftMouseClickCount.value); Assert.assertEquals(4, middleMouseClickCount.value); Assert.assertEquals(i + 1, rightMouseClickCount.value); } Assert.assertTrue(Mouse.click("left", 200, 150, 2)); sleep(200); Assert.assertEquals(6, leftMouseClickCount.value); Assert.assertEquals(4, middleMouseClickCount.value); Assert.assertEquals(4, rightMouseClickCount.value); Assert.assertTrue(Mouse.click("middle", 200, 150, 3, 20)); sleep(200); Assert.assertEquals(6, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(4, rightMouseClickCount.value); Assert.assertTrue(Mouse.click("right", 200, 150, 4, 0)); sleep(200); Assert.assertEquals(6, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); Mouse.click(); sleep(200); Assert.assertEquals(7, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); Assert.assertTrue(Mouse.click((String) null)); sleep(200); Assert.assertEquals(8, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); Assert.assertTrue(Mouse.click("")); sleep(200); Assert.assertEquals(9, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); Assert.assertFalse(Mouse.click(" ")); sleep(200); Assert.assertEquals(9, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); Assert.assertFalse(Mouse.click("xxxx", 200, 150, 4, 0)); sleep(200); Assert.assertEquals(9, leftMouseClickCount.value); Assert.assertEquals(7, middleMouseClickCount.value); Assert.assertEquals(8, rightMouseClickCount.value); } finally { // destroy frame frame.setVisible(false); } } @Test public void clickDrag() { String title = "clickDrag - " + System.currentTimeMillis(); JFrame frame = new JFrame(title); frame.setSize(400, 300); try { // show frame frame.setVisible(true); Assert.assertTrue(Win.wait(title, 3)); Assert.assertTrue(Mouse.clickDrag(50, 60, 70, 80)); Assert.assertTrue(Mouse.clickDrag(MouseButton.LEFT, 50, 60, 70, 80)); Assert.assertTrue(Mouse.clickDrag("left", 50, 60, 70, 80)); Assert.assertTrue(Mouse.clickDrag((String) null, 50, 60, 70, 80)); Assert.assertFalse(Mouse.clickDrag("xxx", 50, 60, 70, 80)); } finally { // destroy frame destroyFrame(frame); } } @Test public void down() { JFrame frame = new JFrame("down - " + System.currentTimeMillis()); JButton button = new JButton("Click Me"); frame.getContentPane().add(button); frame.setBounds(0, 0, 400, 300); // add click listener to textArea final IntHolder leftMouseUpCount = new IntHolder(); final IntHolder leftMouseDownCount = new IntHolder(); final IntHolder middleMouseUpCount = new IntHolder(); final IntHolder middleMouseDownCount = new IntHolder(); final IntHolder rightMouseUpCount = new IntHolder(); final IntHolder rightMouseDownCount = new IntHolder(); button.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { leftMouseDownCount.value++; } else if (SwingUtilities.isMiddleMouseButton(e)) { middleMouseDownCount.value++; } else if (SwingUtilities.isRightMouseButton(e)) { rightMouseDownCount.value++; } } public void mouseReleased(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { leftMouseUpCount.value++; } else if (SwingUtilities.isMiddleMouseButton(e)) { middleMouseUpCount.value++; } else if (SwingUtilities.isRightMouseButton(e)) { rightMouseUpCount.value++; } } }); // show frame frame.setVisible(true); // move mouse to the button Mouse.move(200, 150); try { // left mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down("left"); sleep(200); Assert.assertEquals(i, leftMouseUpCount.value); Assert.assertEquals(i + 1, leftMouseDownCount.value); Assert.assertEquals(0, middleMouseUpCount.value); Assert.assertEquals(0, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); Mouse.up("left"); sleep(200); Assert.assertEquals(i + 1, leftMouseUpCount.value); Assert.assertEquals(i + 1, leftMouseDownCount.value); Assert.assertEquals(0, middleMouseUpCount.value); Assert.assertEquals(0, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); } // middle mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down("middle"); sleep(200); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(i, middleMouseUpCount.value); Assert.assertEquals(i + 1, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); Mouse.up("middle"); sleep(200); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(i + 1, middleMouseUpCount.value); Assert.assertEquals(i + 1, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); } // right mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down("right"); sleep(200); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(4, middleMouseUpCount.value); Assert.assertEquals(4, middleMouseDownCount.value); Assert.assertEquals(i, rightMouseUpCount.value); Assert.assertEquals(i + 1, rightMouseDownCount.value); Mouse.up("right"); sleep(200); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(4, middleMouseUpCount.value); Assert.assertEquals(4, middleMouseDownCount.value); Assert.assertEquals(i + 1, rightMouseUpCount.value); Assert.assertEquals(i + 1, rightMouseDownCount.value); } } finally { // destroy frame frame.setVisible(false); } } @Test public void getCursor() { // TODO: JFrame frame = new JFrame("mouseGetCursor - " + System.currentTimeMillis()); JButton button = new JButton("Click Me"); frame.getContentPane().add(button); frame.setBounds(0, 0, 400, 300); Cursor defaultCursor = button.getCursor(); // show frame frame.setVisible(true); // move mouse to the button Mouse.move(200, 150); try { button.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.CROSS, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.TEXT_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.IBEAM, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.WAIT_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.WAIT, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENESW, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENWSE, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENWSE, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENESW, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENS, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZENS, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZEWE, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZEWE, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.HAND_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.UNKNOWN, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.MOVE_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.SIZEALL, Mouse.getCursor()); button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); sleep(100); Assert.assertEquals(MouseCursor.ARROW, Mouse.getCursor()); // restore button's default cursor button.setCursor(defaultCursor); Assert.assertSame(defaultCursor, button.getCursor()); } finally { // destroy frame frame.setVisible(false); } } @Test public void getX() { Mouse.move(10, 20); Assert.assertEquals(10, Mouse.getPosX()); sleep(100); Mouse.move(100, 200, 0); Assert.assertEquals(100, Mouse.getPosX()); sleep(100); Mouse.move(-100, -200, 50); Assert.assertEquals(0, Mouse.getPosX()); sleep(100); Mouse.move(10000, 20000); Assert.assertEquals(Win.getDesktopWidth() - 1, Mouse.getPosX()); sleep(100); Mouse.move(0, 0); Assert.assertEquals(0, Mouse.getPosX()); } @Test public void getY() { Mouse.move(10, 20); Assert.assertEquals(20, Mouse.getPosY()); sleep(100); Mouse.move(100, 200, 0); Assert.assertEquals(200, Mouse.getPosY()); sleep(100); Mouse.move(-100, -200, 50); Assert.assertEquals(0, Mouse.getPosY()); sleep(100); Mouse.move(10000, 20000); Assert.assertEquals(Win.getDesktopHeight() - 1, Mouse.getPosY()); sleep(100); Mouse.move(0, 0); Assert.assertEquals(0, Mouse.getPosY()); } @Test public void move() { Mouse.move(10, 20); Assert.assertEquals(10, Mouse.getPosX()); Assert.assertEquals(20, Mouse.getPosY()); sleep(100); Mouse.move(100, 200, 0); Assert.assertEquals(100, Mouse.getPosX()); Assert.assertEquals(200, Mouse.getPosY()); sleep(100); Mouse.move(-100, -200, 50); Assert.assertEquals(0, Mouse.getPosX()); Assert.assertEquals(0, Mouse.getPosY()); sleep(100); Mouse.move(10000, 20000); Assert.assertEquals(Win.getDesktopWidth() - 1, Mouse.getPosX()); Assert.assertEquals(Win.getDesktopHeight() - 1, Mouse.getPosY()); sleep(100); Mouse.move(0, 0); Assert.assertEquals(0, Mouse.getPosX()); Assert.assertEquals(0, Mouse.getPosY()); } @Test public void up() { JFrame frame = new JFrame("mouseUp - " + System.currentTimeMillis()); JButton button = new JButton("Click Me"); frame.getContentPane().add(button); frame.setBounds(0, 0, 400, 300); // add click listener to textArea final IntHolder leftMouseUpCount = new IntHolder(); final IntHolder leftMouseDownCount = new IntHolder(); final IntHolder middleMouseUpCount = new IntHolder(); final IntHolder middleMouseDownCount = new IntHolder(); final IntHolder rightMouseUpCount = new IntHolder(); final IntHolder rightMouseDownCount = new IntHolder(); button.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { leftMouseDownCount.value++; } else if (SwingUtilities.isMiddleMouseButton(e)) { middleMouseDownCount.value++; } else if (SwingUtilities.isRightMouseButton(e)) { rightMouseDownCount.value++; } } public void mouseReleased(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { leftMouseUpCount.value++; } else if (SwingUtilities.isMiddleMouseButton(e)) { middleMouseUpCount.value++; } else if (SwingUtilities.isRightMouseButton(e)) { rightMouseUpCount.value++; } } }); // show frame frame.setVisible(true); // move mouse to the button Mouse.move(200, 150); try { // left mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down(MouseButton.LEFT); sleep(500); Assert.assertEquals(i, leftMouseUpCount.value); Assert.assertEquals(i + 1, leftMouseDownCount.value); Assert.assertEquals(0, middleMouseUpCount.value); Assert.assertEquals(0, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); Mouse.up(MouseButton.LEFT); sleep(500); Assert.assertEquals(i + 1, leftMouseUpCount.value); Assert.assertEquals(i + 1, leftMouseDownCount.value); Assert.assertEquals(0, middleMouseUpCount.value); Assert.assertEquals(0, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); } // middle mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down(MouseButton.MIDDLE); sleep(500); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(i, middleMouseUpCount.value); Assert.assertEquals(i + 1, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); Mouse.up(MouseButton.MIDDLE); sleep(500); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(i + 1, middleMouseUpCount.value); Assert.assertEquals(i + 1, middleMouseDownCount.value); Assert.assertEquals(0, rightMouseUpCount.value); Assert.assertEquals(0, rightMouseDownCount.value); } // right mouse click 4 times for (int i = 0; i < 4; i++) { Mouse.down(MouseButton.RIGHT); sleep(500); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(4, middleMouseUpCount.value); Assert.assertEquals(4, middleMouseDownCount.value); Assert.assertEquals(i, rightMouseUpCount.value); Assert.assertEquals(i + 1, rightMouseDownCount.value); Mouse.up(MouseButton.RIGHT); sleep(500); Assert.assertEquals(4, leftMouseUpCount.value); Assert.assertEquals(4, leftMouseDownCount.value); Assert.assertEquals(4, middleMouseUpCount.value); Assert.assertEquals(4, middleMouseDownCount.value); Assert.assertEquals(i + 1, rightMouseUpCount.value); Assert.assertEquals(i + 1, rightMouseDownCount.value); } } finally { // destroy frame frame.setVisible(false); } } @Test public void wheel() { JFrame frame = new JFrame("wheel - " + System.currentTimeMillis()); JTextArea textArea = new JTextArea(); // set textArea's text to a long String so it can scroll StringBuilder text = new StringBuilder(); for (int i = 0; i < 50; i++) { text.append(i).append("\n"); } textArea.setText(text.toString()); JScrollPane scrollPane = new JScrollPane(textArea); frame.getContentPane().add(scrollPane); frame.setBounds(0, 0, 400, 300); // add mouse wheel listener to textArea final IntHolder wheelCount = new IntHolder(); final IntHolder wheelUpCount = new IntHolder(); final IntHolder wheelDownCount = new IntHolder(); textArea.addMouseWheelListener(new MouseWheelListener() { public void mouseWheelMoved(MouseWheelEvent e) { wheelCount.value++; if (e.getWheelRotation() < 0) { wheelUpCount.value++; } else { wheelDownCount.value++; } } }); // show frame frame.setVisible(true); // move mouse to the center of the frame Mouse.move(200, 150); // focus textArea Mouse.click(MouseButton.LEFT); try { // scroll down 5 times for (int i = 0; i < 4; i++) { Mouse.wheel(MouseWheelDirection.DOWN); sleep(1000); Assert.assertEquals(i + 1, wheelCount.value); Assert.assertEquals(0, wheelUpCount.value); Assert.assertEquals(i + 1, wheelDownCount.value); } // scroll up 5 times for (int i = 0; i < 4; i++) { Mouse.wheel(MouseWheelDirection.UP); sleep(1000); Assert.assertEquals(4 + (i + 1), wheelCount.value); Assert.assertEquals(i + 1, wheelUpCount.value); Assert.assertEquals(4, wheelDownCount.value); } // scroll down Assert.assertTrue(Mouse.wheel(Mouse.MOUSE_WHEEL_DIRECTION_DOWN)); sleep(1000); Assert.assertEquals(9, wheelCount.value); Assert.assertEquals(4, wheelUpCount.value); Assert.assertEquals(5, wheelDownCount.value); // scroll up Assert.assertTrue(Mouse.wheel(Mouse.MOUSE_WHEEL_DIRECTION_UP)); sleep(1000); Assert.assertEquals(10, wheelCount.value); Assert.assertEquals(5, wheelUpCount.value); Assert.assertEquals(5, wheelDownCount.value); // scroll with invalid direction Assert.assertFalse(Mouse.wheel("left")); sleep(1000); Assert.assertEquals(10, wheelCount.value); Assert.assertEquals(5, wheelUpCount.value); Assert.assertEquals(5, wheelDownCount.value); } finally { // destroy frame frame.setVisible(false); } } }