package cn.com.jautoitx; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Frame; import javax.swing.JFrame; import javax.swing.JTextField; import org.junit.Assert; import org.junit.Test; import org.omg.CORBA.LongHolder; import cn.com.jautoitx.Mouse.MouseButton; import cn.com.jautoitx.Opt.CoordMode; import cn.com.jautoitx.Opt.WinTextMatchMode; import cn.com.jautoitx.Opt.WinTitleMatchMode; public class OptTest extends BaseTest { @Test public void setMouseClickDelay() { String title1 = "setMouseClickDelay - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(0, 0, 400, 300); frame1.setVisible(true); try { long start = System.currentTimeMillis(); Mouse.click(MouseButton.LEFT, 50, 40, 1, 0); long end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= Opt.DEFAULT_MOUSE_CLICK_DELAY); Assert.assertTrue((end - start) < 500); Assert.assertEquals(Opt.DEFAULT_MOUSE_CLICK_DELAY, Opt.setMouseClickDelay(500)); start = System.currentTimeMillis(); Mouse.click(MouseButton.LEFT, 50, 40); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 500); Assert.assertTrue((end - start) < 1000); Assert.assertEquals(500, Opt.setMouseClickDelay(1000)); start = System.currentTimeMillis(); Mouse.click(MouseButton.LEFT, 50, 40); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 1000); Assert.assertTrue((end - start) < 1500); } finally { // destroy frame frame1.setVisible(false); // Restore default mouse click delay Opt.setMouseClickDelay(Opt.DEFAULT_MOUSE_CLICK_DELAY); } } @Test public void setMouseClickDownDelay() { String title1 = "setMouseClickDownDelay - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(0, 0, 400, 300); frame1.setVisible(true); try { Mouse.move(50, 40); long start = System.currentTimeMillis(); Mouse.down(MouseButton.LEFT); long end = System.currentTimeMillis(); Mouse.up(MouseButton.LEFT); Assert.assertTrue(String.format("(%d - %d) >= %d", end, start, Opt.DEFAULT_MOUSE_CLICK_DOWN_DELAY), (end - start) >= Opt.DEFAULT_MOUSE_CLICK_DOWN_DELAY); Assert.assertTrue(String.format("(%d - %d) < %d", end, start, 500), (end - start) < 500); Assert.assertEquals(Opt.DEFAULT_MOUSE_CLICK_DOWN_DELAY, Opt.setMouseClickDownDelay(500)); start = System.currentTimeMillis(); Mouse.down(MouseButton.LEFT); end = System.currentTimeMillis(); Mouse.up(MouseButton.LEFT); Assert.assertTrue( String.format("(%d - %d) >= %d", end, start, 500), (end - start) >= 500); Assert.assertTrue( String.format("(%d - %d) < %d", end, start, 1000), (end - start) < 1000); Assert.assertEquals(500, Opt.setMouseClickDownDelay(1000)); start = System.currentTimeMillis(); Mouse.down(MouseButton.LEFT); end = System.currentTimeMillis(); Mouse.up(MouseButton.LEFT); Assert.assertTrue( String.format("(%d - %d) >= %d", end, start, 500), (end - start) >= 1000); Assert.assertTrue( String.format("(%d - %d) < %d", end, start, 1500), (end - start) < 1500); } finally { // destroy frame frame1.setVisible(false); // Restore default mouse click down delay Opt.setMouseClickDownDelay(Opt.DEFAULT_MOUSE_CLICK_DOWN_DELAY); } } @Test public void setMouseClickDragDelay() { String title1 = "setMouseClickDragDelay - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(0, 0, 400, 300); frame1.setVisible(true); try { Mouse.move(10, 10); long start = System.currentTimeMillis(); Mouse.clickDrag(MouseButton.LEFT, 40, 40, 50, 50, 0); long end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= Opt.DEFAULT_MOUSE_CLICK_DRAG_DELAY); Assert.assertTrue((end - start) < 1000); Assert.assertEquals(Opt.DEFAULT_MOUSE_CLICK_DRAG_DELAY, Opt.setMouseClickDragDelay(500)); Mouse.move(10, 10); start = System.currentTimeMillis(); Mouse.clickDrag(MouseButton.LEFT, 40, 40, 50, 50, 0); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 500); Assert.assertTrue((end - start) < 1500); Assert.assertEquals(500, Opt.setMouseClickDragDelay(1000)); Mouse.move(10, 10); start = System.currentTimeMillis(); Mouse.clickDrag(MouseButton.LEFT, 40, 40, 50, 50, 0); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 1000); Assert.assertTrue((end - start) < 2500); } finally { // destroy frame frame1.setVisible(false); // Restore default mouse click drag delay Opt.setMouseClickDragDelay(Opt.DEFAULT_MOUSE_CLICK_DRAG_DELAY); } } @Test public void setCaretCoordMode() { String title1 = "setCaretCoordMode - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(50, 100, 400, 300); JTextField textField1 = new JTextField(); frame1.getContentPane().add(textField1, BorderLayout.NORTH); frame1.setVisible(true); try { // Activate frame1 Assert.assertTrue(Win.activate(title1)); int x1 = Win.getCaretPosX(); int y1 = Win.getCaretPosY(); Assert.assertTrue(x1 > 0); Assert.assertTrue(y1 > 0); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setCaretCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); int x2 = Win.getCaretPosX(); int y2 = Win.getCaretPosY(); Assert.assertEquals(x2, x1 - 50); Assert.assertEquals(y2, y1 - 100); } finally { // destroy frame frame1.setVisible(false); // Restore caret coord mode Opt.setCaretCoordMode(Opt.DEFAULT_MOUSE_COORD_MODE); } } @Test public void setMouseCoordMode() { String title1 = "setMouseCoordMode 1 - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(0, 0, 400, 300); frame1.setVisible(true); String title2 = "setMouseCoordMode 2 - " + currentTimeMillis; JFrame frame2 = new JFrame(title2); frame2.setBounds(400, 0, 400, 300); frame2.setVisible(true); try { // Activate frame1 Assert.assertTrue(Win.activate(title1)); Mouse.move(40, 50); Assert.assertEquals(40, Mouse.getPosX()); Assert.assertEquals(50, Mouse.getPosY()); Mouse.move(440, 60); Assert.assertEquals(440, Mouse.getPosX()); Assert.assertEquals(60, Mouse.getPosY()); // Activate frame2 Assert.assertTrue(Win.activate(title2)); Mouse.move(40, 50); Assert.assertEquals(40, Mouse.getPosX()); Assert.assertEquals(50, Mouse.getPosY()); Mouse.move(440, 60); Assert.assertEquals(440, Mouse.getPosX()); Assert.assertEquals(60, Mouse.getPosY()); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setMouseCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); // Activate frame1 Assert.assertTrue(Win.activate(title1)); Mouse.move(40, 50); Assert.assertEquals(CoordMode.RELATIVE_TO_ACTIVE_WINDOW, Opt .setMouseCoordMode(CoordMode.ABSOLUTE_SCREEN_COORDINATES)); Assert.assertEquals(40, Mouse.getPosX()); Assert.assertEquals(50, Mouse.getPosY()); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setMouseCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); Mouse.move(440, 60); Assert.assertEquals(CoordMode.RELATIVE_TO_ACTIVE_WINDOW, Opt .setMouseCoordMode(CoordMode.ABSOLUTE_SCREEN_COORDINATES)); Assert.assertEquals(440, Mouse.getPosX()); Assert.assertEquals(60, Mouse.getPosY()); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setMouseCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); // Activate frame2 Assert.assertTrue(Win.activate(title2)); Mouse.move(40, 50); Assert.assertEquals(CoordMode.RELATIVE_TO_ACTIVE_WINDOW, Opt .setMouseCoordMode(CoordMode.ABSOLUTE_SCREEN_COORDINATES)); Assert.assertEquals(440, Mouse.getPosX()); Assert.assertEquals(50, Mouse.getPosY()); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setMouseCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); Mouse.move(440, 60); Assert.assertEquals(CoordMode.RELATIVE_TO_ACTIVE_WINDOW, Opt .setMouseCoordMode(CoordMode.ABSOLUTE_SCREEN_COORDINATES)); Assert.assertEquals(840, Mouse.getPosX()); Assert.assertEquals(60, Mouse.getPosY()); } finally { // destroy frame frame1.setVisible(false); frame2.setVisible(false); // Restore mouse coord mode Opt.setMouseCoordMode(Opt.DEFAULT_MOUSE_COORD_MODE); } } @Test public void setPixelCoordMode() { String title1 = "setPixelCoordMode 1 - " + currentTimeMillis; JFrame frame1 = new JFrame(title1); frame1.setBounds(0, 0, 400, 300); frame1.getContentPane().setBackground(Color.BLACK); frame1.setVisible(true); String title2 = "setPixelCoordMode 2 - " + currentTimeMillis; JFrame frame2 = new JFrame(title2); frame2.setBounds(400, 0, 400, 300); frame2.getContentPane().setBackground(Color.RED); frame2.setVisible(true); try { // Activate frame1 Assert.assertTrue(Win.activate(title1)); sleep(200); Assert.assertEquals(Color.BLACK, Pixel.getColor_(40, 50)); Assert.assertEquals(Color.RED, Pixel.getColor_(440, 50)); // Activate frame2 Assert.assertTrue(Win.activate(title2)); Assert.assertEquals(Color.BLACK, Pixel.getColor_(40, 50)); Assert.assertEquals(Color.RED, Pixel.getColor_(440, 50)); Assert.assertEquals(CoordMode.ABSOLUTE_SCREEN_COORDINATES, Opt.setPixelCoordMode(CoordMode.RELATIVE_TO_ACTIVE_WINDOW)); // Activate frame1 Assert.assertTrue(Win.activate(title1)); Assert.assertEquals(Color.BLACK, Pixel.getColor_(40, 50)); Assert.assertEquals(Color.RED, Pixel.getColor_(440, 50)); // Activate frame2 Assert.assertTrue(Win.activate(title2)); Assert.assertEquals(Color.RED, Pixel.getColor_(40, 50)); } finally { // destroy frame frame1.setVisible(false); frame2.setVisible(false); // Restore pixel coord mode Opt.setPixelCoordMode(Opt.DEFAULT_PIXEL_COORD_MODE); } } @Test public void setSendAttachMode() { // TODO: // int pid = runNotepad(); try { // Assert.assertEquals(1, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{ENTER}"); // Assert.assertEquals(2, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{ENTER}"); // Assert.assertEquals(3, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{ENTER}"); // Assert.assertEquals(4, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // // Keyboard.send("{UP}"); // Assert.assertEquals(3, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{UP}"); // Assert.assertEquals(2, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // // Keyboard.send("{DOWN}"); // Assert.assertEquals(3, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{DOWN}"); // Assert.assertEquals(4, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("^{SPACE}"); // when you specify attach mode=true the Send("{... down/up}") // syntax will not work Assert.assertEquals(Opt.DEFAULT_SEND_ATTACH_MODE, Opt.setSendAttachMode(true)); // Keyboard.send("{a down}"); // Keyboard.send("{a up}"); // Keyboard.send("{UP}"); // Assert.assertEquals(4, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // Keyboard.send("{UP}"); // Assert.assertEquals(4, // Control.getCurrentLine(NOTEPAD_TITLE, "Edit1")); // closeNotepad(pid); Assert.assertTrue(Opt.setSendAttachMode(false)); Assert.assertFalse(Opt.setSendAttachMode(true)); } finally { // restore default send attach mode Opt.setSendAttachMode(Opt.DEFAULT_SEND_ATTACH_MODE); } } @Test public void setSendCapslockMode() { final boolean isCpaslockOn = Win32.isCapslockOn(); try { Win32.setCapslockState(true); Assert.assertTrue(Win32.isCapslockOn()); Assert.assertEquals(Opt.DEFAULT_SEND_CAPSLOCK_MODE, Opt.setSendCapslockMode(true)); Keyboard.send("{CAPSLOCK}"); Assert.assertTrue(Win32.isCapslockOn()); Assert.assertTrue(Opt.setSendCapslockMode(false)); Keyboard.send("{CAPSLOCK}"); Assert.assertFalse(Win32.isCapslockOn()); Assert.assertFalse(Opt.setSendCapslockMode(true)); Keyboard.send("{CAPSLOCK}"); Assert.assertFalse(Win32.isCapslockOn()); Assert.assertTrue(Opt.setSendCapslockMode(false)); Keyboard.send("{CAPSLOCK}"); Assert.assertTrue(Win32.isCapslockOn()); } finally { // restore default capslock Win32.setCapslockState(isCpaslockOn); // restore default capslock mode Opt.setSendCapslockMode(Opt.DEFAULT_SEND_CAPSLOCK_MODE); } } @Test public void setSendKeyDelay() { int pid = runNotepad(); try { long start = System.currentTimeMillis(); Keyboard.send("1"); long end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 0); Assert.assertTrue((end - start) < 500); Assert.assertEquals("1", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(Opt.DEFAULT_SEND_KEY_DELAY, Opt.setSendKeyDelay(500)); start = System.currentTimeMillis(); Keyboard.send("2"); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 500); Assert.assertTrue((end - start) < 2000); Assert.assertEquals("12", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(500, Opt.setSendKeyDelay(1000)); start = System.currentTimeMillis(); Keyboard.send("3"); end = System.currentTimeMillis(); Assert.assertTrue((end - start) >= 1000); Assert.assertTrue((end - start) < 4000); Assert.assertEquals("123", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(1000, Opt.setSendKeyDelay(0)); Assert.assertEquals(1, Opt.setSendKeyDelay(20)); Assert.assertEquals(20, Opt.setSendKeyDelay(-1)); Assert.assertEquals(1, Opt.setSendKeyDelay(50)); } finally { closeNotepad(pid); // restore default send key delay Opt.setSendKeyDelay(Opt.DEFAULT_SEND_KEY_DELAY); } } @Test public void setSendKeyDownDelay() { int pid = runNotepad(); try { long start = System.currentTimeMillis(); Keyboard.send("{1 down}"); long end = System.currentTimeMillis(); Keyboard.send("{1 up}"); Assert.assertTrue(String.format("(%d - %d) >= 0", end, start), (end - start) >= 0); Assert.assertTrue(String.format("(%d - %d) < 500", end, start), (end - start) < 500); Assert.assertEquals("1", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(Opt.DEFAULT_SEND_KEY_DOWN_DELAY, Opt.setSendKeyDownDelay(500)); start = System.currentTimeMillis(); Keyboard.send("{2 down}"); end = System.currentTimeMillis(); Keyboard.send("{2 up}"); Assert.assertTrue(String.format("(%d - %d) >= 500", end, start), (end - start) >= 500); Assert.assertTrue(String.format("(%d - %d) < 1000", end, start), (end - start) < 1000); Assert.assertEquals("12", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(500, Opt.setSendKeyDownDelay(1000)); start = System.currentTimeMillis(); Keyboard.send("{3 down}"); end = System.currentTimeMillis(); Keyboard.send("{3 up}"); Assert.assertTrue(String.format("(%d - %d) >= 1000", end, start), (end - start) >= 1000); Assert.assertTrue(String.format("(%d - %d) < 1500", end, start), (end - start) < 1500); Assert.assertEquals("123", Control.getText(NOTEPAD_TITLE, "Edit1")); Assert.assertEquals(1000, Opt.setSendKeyDownDelay(0)); Assert.assertEquals(0, Opt.setSendKeyDownDelay(20)); Assert.assertEquals(20, Opt.setSendKeyDownDelay(-1)); Assert.assertEquals(-1, Opt.setSendKeyDownDelay(50)); closeNotepad(pid); } finally { // restore default send key down delay Opt.setSendKeyDownDelay(Opt.DEFAULT_SEND_KEY_DOWN_DELAY); } } @Test public void setWinDetectHiddenText() { final Frame frame1 = createTestFrame("setWinDetectHiddenText - detect", "Hello", true); frame1.setVisible(true); final Frame frame2 = createTestFrame( "setWinDetectHiddenText - no detect", "World", false); frame2.setVisible(true); try { Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "")); Assert.assertFalse(Win.exists("setWinDetectHiddenText - detect", "Hello")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "World")); Assert.assertEquals(Opt.DEFAULT_WIN_DETECT_HIDDEN_TEXT, Opt.setWinDetectHiddenText(true)); Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "Hello")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "World")); Assert.assertTrue(Opt.setWinDetectHiddenText(false)); Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "")); Assert.assertFalse(Win.exists("setWinDetectHiddenText - detect", "Hello")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "World")); Assert.assertFalse(Opt.setWinDetectHiddenText(true)); Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - detect", "Hello")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "")); Assert.assertTrue(Win.exists("setWinDetectHiddenText - no detect", "World")); } finally { // destroy frame frame1.setVisible(false); frame2.setVisible(false); // restore default win detect hidden text Opt.setWinDetectHiddenText(Opt.DEFAULT_WIN_DETECT_HIDDEN_TEXT); } } /** * Create frame to test Opt.setWinDetectHiddenText() method. * * @param title * frame title * @param buttonText * button text * @param hideButton * whether or not hidden the button * @return */ private Frame createTestFrame(final String title, final String buttonText, final boolean hideButton) { Frame frame = new Frame(title); final Button button = new Button(buttonText); frame.add(button, BorderLayout.CENTER); if (hideButton) { button.setVisible(false); } frame.setSize(400, 300); return frame; } @Test public void setWinSearchChildren() { try { Assert.assertEquals(Opt.DEFAULT_WIN_SEARCH_CHILDREN, Opt.setWinSearchChildren(true)); Assert.assertTrue(Opt.setWinSearchChildren(false)); Assert.assertFalse(Opt.setWinSearchChildren(true)); Assert.assertTrue(Opt.setWinSearchChildren(false)); Assert.assertFalse(Opt.setWinSearchChildren(true)); } finally { // restore default win search childrenOpt Opt.setWinSearchChildren(Opt.DEFAULT_WIN_SEARCH_CHILDREN); } } @Test public void setWinTextMatchMode() { try { Assert.assertEquals(Opt.DEFAULT_WIN_TEXT_MATCH_MODE, Opt.setWinTextMatchMode(WinTextMatchMode.SLOW)); Assert.assertEquals(WinTextMatchMode.SLOW, Opt.setWinTextMatchMode(WinTextMatchMode.QUICK)); Assert.assertEquals(WinTextMatchMode.QUICK, Opt.setWinTextMatchMode(WinTextMatchMode.SLOW)); Assert.assertEquals(WinTextMatchMode.SLOW, Opt.setWinTextMatchMode(WinTextMatchMode.QUICK)); Assert.assertEquals(WinTextMatchMode.QUICK, Opt.setWinTextMatchMode(WinTextMatchMode.SLOW)); } finally { // restore default win text match mode Opt.setWinTextMatchMode(Opt.DEFAULT_WIN_TEXT_MATCH_MODE); } } @Test public void setWinTitleMatchMode() { try { Assert.assertEquals(Opt.DEFAULT_WIN_TITLE_MATCH_MODE, Opt.setWinTitleMatchMode(WinTitleMatchMode.EXACT)); Assert.assertEquals(WinTitleMatchMode.EXACT, Opt.setWinTitleMatchMode(WinTitleMatchMode.ADVANCED)); Assert.assertEquals(WinTitleMatchMode.ADVANCED, Opt.setWinTitleMatchMode(WinTitleMatchMode.ANY)); Assert.assertEquals(WinTitleMatchMode.ANY, Opt.setWinTitleMatchMode(WinTitleMatchMode.EXACT)); Assert.assertEquals(WinTitleMatchMode.EXACT, Opt.setWinTitleMatchMode(WinTitleMatchMode.ADVANCED)); int pid = runNotepad(); Assert.assertTrue(Win.active(TitleBuilder.byTitle(NOTEPAD_TITLE))); Assert.assertTrue(Win.active(TitleBuilder .byClassName(NOTEPAAD_CLASS_NAME))); Assert.assertTrue(Win.active(NOTEPAD_TITLE)); Assert.assertTrue(Win.active(NOTEPAD_TITLE_START)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_ANY)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_END)); Assert.assertEquals(WinTitleMatchMode.ADVANCED, Opt.setWinTitleMatchMode(WinTitleMatchMode.START)); Assert.assertTrue(Win.active(NOTEPAD_TITLE)); Assert.assertTrue(Win.active(NOTEPAD_TITLE_START)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_ANY)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_END)); Assert.assertEquals(WinTitleMatchMode.START, Opt.setWinTitleMatchMode(WinTitleMatchMode.ANY)); Assert.assertTrue(Win.active(NOTEPAD_TITLE)); Assert.assertTrue(Win.active(NOTEPAD_TITLE_START)); Assert.assertTrue(Win.active(NOTEPAD_TITLE_ANY)); Assert.assertTrue(Win.active(NOTEPAD_TITLE_END)); Assert.assertEquals(WinTitleMatchMode.ANY, Opt.setWinTitleMatchMode(WinTitleMatchMode.EXACT)); Assert.assertTrue(Win.active(NOTEPAD_TITLE)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_START)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_ANY)); Assert.assertFalse(Win.active(NOTEPAD_TITLE_END)); closeNotepad(pid); } finally { // restore default win title match mode Opt.setWinTitleMatchMode(Opt.DEFAULT_WIN_TITLE_MATCH_MODE); } } @Test public void setWinWaitDelay() { try { // delay 5 seconds Assert.assertEquals(Opt.DEFAULT_WIN_WAIT_DELAY, Opt.setWinWaitDelay(3000)); final LongHolder time = new LongHolder(0); Thread thread = new Thread(new Runnable() { public void run() { long start = System.currentTimeMillis(); Win.wait(NOTEPAD_TITLE); long end = System.currentTimeMillis(); time.value = end - start; } }); thread.start(); runNotepad(); sleep(4000); Assert.assertTrue(String.format("%d >= 3000", time.value), time.value >= 3000); Assert.assertTrue(String.format("%d <= 4000", time.value), time.value <= 4000); Assert.assertFalse(thread.isAlive()); Win.close(NOTEPAD_TITLE); // delay 2 seconds Assert.assertEquals(3000, Opt.setWinWaitDelay(2000)); time.value = 0; thread = new Thread(new Runnable() { public void run() { long start = System.currentTimeMillis(); Win.wait(NOTEPAD_TITLE); long end = System.currentTimeMillis(); time.value = end - start; } }); thread.start(); runNotepad(); while (thread.isAlive()) { sleep(100); } Assert.assertTrue(String.format("%d >= 2000", time.value), time.value >= 2000); Assert.assertTrue(String.format("%d <= 3000", time.value), time.value <= 3000); Assert.assertFalse(thread.isAlive()); Win.close(NOTEPAD_TITLE); } finally { // restore default win delay Opt.setWinWaitDelay(Opt.DEFAULT_WIN_WAIT_DELAY); } } }