package cn.com.jautoitx;
import org.junit.Assert;
import org.junit.Test;
import cn.com.jautoitx.ControlIdBuilder.By;
import com.sun.jna.platform.win32.WinDef.HWND;
public class ControlIdBuilderTest extends BaseTest {
@Test
public void by() {
Assert.assertEquals("[]", ControlIdBuilder.by());
// by id
Assert.assertEquals("[ID:-1]", ControlIdBuilder.by(By.id(-1)));
Assert.assertEquals("[ID:0]", ControlIdBuilder.by(By.id(0)));
Assert.assertEquals("[ID:1]", ControlIdBuilder.by(By.id(1)));
Assert.assertEquals("[ID:2]", ControlIdBuilder.by(By.id(2)));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.byId(-1));
Assert.assertEquals("[ID:0]", ControlIdBuilder.byId(0));
Assert.assertEquals("[ID:1]", ControlIdBuilder.byId(1));
Assert.assertEquals("[ID:2]", ControlIdBuilder.byId(2));
// by text
Assert.assertEquals("[TEXT:]", ControlIdBuilder.by(By.text(null)));
Assert.assertEquals("[TEXT:]", ControlIdBuilder.by(By.text("")));
Assert.assertEquals("[TEXT:Next]", ControlIdBuilder.by(By.text("Next")));
Assert.assertEquals("[TEXT:Next;;]",
ControlIdBuilder.by(By.text("Next;")));
Assert.assertEquals("[TEXT:]", ControlIdBuilder.byText(null));
Assert.assertEquals("[TEXT:]", ControlIdBuilder.byText(""));
Assert.assertEquals("[TEXT:Next]", ControlIdBuilder.byText("Next"));
Assert.assertEquals("[TEXT:Next;;]", ControlIdBuilder.byText("Next;"));
// by classname
Assert.assertEquals("[CLASS:]", ControlIdBuilder.by(By.className(null)));
Assert.assertEquals("[CLASS:]", ControlIdBuilder.by(By.className("")));
Assert.assertEquals("[CLASS:Edit]",
ControlIdBuilder.by(By.className("Edit")));
Assert.assertEquals("[CLASS:Edit;;]",
ControlIdBuilder.by(By.className("Edit;")));
Assert.assertEquals("[CLASS:]", ControlIdBuilder.byClassName(null));
Assert.assertEquals("[CLASS:]", ControlIdBuilder.byClassName(""));
Assert.assertEquals("[CLASS:Edit]",
ControlIdBuilder.byClassName("Edit"));
Assert.assertEquals("[CLASS:Edit;;]",
ControlIdBuilder.byClassName("Edit;"));
// by ClassnameNN
Assert.assertEquals("[CLASSNN:]",
ControlIdBuilder.by(By.classNameNN(null)));
Assert.assertEquals("[CLASSNN:]",
ControlIdBuilder.by(By.classNameNN("")));
Assert.assertEquals("[CLASSNN:Edit1]",
ControlIdBuilder.by(By.classNameNN("Edit1")));
Assert.assertEquals("[CLASSNN:Edit1;;]",
ControlIdBuilder.by(By.classNameNN("Edit1;")));
Assert.assertEquals("[CLASSNN:]", ControlIdBuilder.byClassNameNN(null));
Assert.assertEquals("[CLASSNN:]", ControlIdBuilder.byClassNameNN(""));
Assert.assertEquals("[CLASSNN:Edit1]",
ControlIdBuilder.byClassNameNN("Edit1"));
Assert.assertEquals("[CLASSNN:Edit1;;]",
ControlIdBuilder.byClassNameNN("Edit1;"));
// by name
Assert.assertEquals("[NAME:]", ControlIdBuilder.by(By.name(null)));
Assert.assertEquals("[NAME:]", ControlIdBuilder.by(By.name("")));
Assert.assertEquals("[NAME:name]", ControlIdBuilder.by(By.name("name")));
Assert.assertEquals("[NAME:name;;]",
ControlIdBuilder.by(By.name("name;")));
Assert.assertEquals("[NAME:]", ControlIdBuilder.byName(null));
Assert.assertEquals("[NAME:]", ControlIdBuilder.byName(""));
Assert.assertEquals("[NAME:name]", ControlIdBuilder.byName("name"));
Assert.assertEquals("[NAME:name;;]", ControlIdBuilder.byName("name;"));
// by regexp classname
Assert.assertEquals("[REGEXPCLASS:]",
ControlIdBuilder.by(By.regexpClassName(null)));
Assert.assertEquals("[REGEXPCLASS:]",
ControlIdBuilder.by(By.regexpClassName("")));
Assert.assertEquals("[REGEXPCLASS:^Button$]",
ControlIdBuilder.by(By.regexpClassName("^Button$")));
Assert.assertEquals("[REGEXPCLASS:^Button;;]",
ControlIdBuilder.by(By.regexpClassName("^Button;")));
Assert.assertEquals("[REGEXPCLASS:]",
ControlIdBuilder.byRegexpClassName(null));
Assert.assertEquals("[REGEXPCLASS:]",
ControlIdBuilder.byRegexpClassName(""));
Assert.assertEquals("[REGEXPCLASS:^Button$]",
ControlIdBuilder.byRegexpClassName("^Button$"));
Assert.assertEquals("[REGEXPCLASS:^Button;;]",
ControlIdBuilder.byRegexpClassName("^Button;"));
// by control position
Assert.assertEquals("[X:10\\Y:20]",
ControlIdBuilder.by(By.position(10, 20)));
Assert.assertEquals("[Y:20]",
ControlIdBuilder.by(By.position(null, 20)));
Assert.assertEquals("[X:10]",
ControlIdBuilder.by(By.position(10, null)));
Assert.assertEquals("[]", ControlIdBuilder.by(By.position(null, null)));
Assert.assertEquals("[X:10\\Y:20]", ControlIdBuilder.byPosition(10, 20));
Assert.assertEquals("[Y:20]", ControlIdBuilder.byPosition(null, 20));
Assert.assertEquals("[X:10]", ControlIdBuilder.byPosition(10, null));
Assert.assertEquals("[]", ControlIdBuilder.byPosition(null, null));
// by control size
Assert.assertEquals("[W:400\\H:300]",
ControlIdBuilder.by(By.size(400, 300)));
Assert.assertEquals("[H:300]", ControlIdBuilder.by(By.size(null, 300)));
Assert.assertEquals("[W:400]", ControlIdBuilder.by(By.size(400, null)));
Assert.assertEquals("[]", ControlIdBuilder.by(By.size(null, null)));
Assert.assertEquals("[W:400\\H:300]", ControlIdBuilder.bySize(400, 300));
Assert.assertEquals("[H:300]", ControlIdBuilder.bySize(null, 300));
Assert.assertEquals("[W:400]", ControlIdBuilder.bySize(400, null));
Assert.assertEquals("[]", ControlIdBuilder.bySize(null, null));
// by control bounds
Assert.assertEquals("[X:10\\Y:20\\W:400\\H:300]",
ControlIdBuilder.by(By.bounds(10, 20, 400, 300)));
Assert.assertEquals("[Y:20\\W:400\\H:300]",
ControlIdBuilder.by(By.bounds(null, 20, 400, 300)));
Assert.assertEquals("[X:10\\W:400\\H:300]",
ControlIdBuilder.by(By.bounds(10, null, 400, 300)));
Assert.assertEquals("[X:10\\Y:20\\H:300]",
ControlIdBuilder.by(By.bounds(10, 20, null, 300)));
Assert.assertEquals("[X:10\\Y:20\\W:400]",
ControlIdBuilder.by(By.bounds(10, 20, 400, null)));
Assert.assertEquals("[X:10\\H:300]",
ControlIdBuilder.by(By.bounds(10, null, null, 300)));
Assert.assertEquals("[X:10]",
ControlIdBuilder.by(By.bounds(10, null, null, null)));
Assert.assertEquals("[]",
ControlIdBuilder.by(By.bounds(null, null, null, null)));
Assert.assertEquals("[X:10\\Y:20\\W:400\\H:300]",
ControlIdBuilder.byBounds(10, 20, 400, 300));
Assert.assertEquals("[Y:20\\W:400\\H:300]",
ControlIdBuilder.byBounds(null, 20, 400, 300));
Assert.assertEquals("[X:10\\W:400\\H:300]",
ControlIdBuilder.byBounds(10, null, 400, 300));
Assert.assertEquals("[X:10\\Y:20\\H:300]",
ControlIdBuilder.byBounds(10, 20, null, 300));
Assert.assertEquals("[X:10\\Y:20\\W:400]",
ControlIdBuilder.byBounds(10, 20, 400, null));
Assert.assertEquals("[X:10\\H:300]",
ControlIdBuilder.byBounds(10, null, null, 300));
Assert.assertEquals("[X:10]",
ControlIdBuilder.byBounds(10, null, null, null));
Assert.assertEquals("[]",
ControlIdBuilder.byBounds(null, null, null, null));
// by 1-based instance when all given properties match
Assert.assertEquals("[INSTANCE:-1]",
ControlIdBuilder.by(By.instance(-1)));
Assert.assertEquals("[INSTANCE:0]", ControlIdBuilder.by(By.instance(0)));
Assert.assertEquals("[INSTANCE:1]", ControlIdBuilder.by(By.instance(1)));
Assert.assertEquals("[INSTANCE:2]", ControlIdBuilder.by(By.instance(2)));
Assert.assertEquals("[INSTANCE:-1]", ControlIdBuilder.byInstance(-1));
Assert.assertEquals("[INSTANCE:0]", ControlIdBuilder.byInstance(0));
Assert.assertEquals("[INSTANCE:1]", ControlIdBuilder.byInstance(1));
Assert.assertEquals("[INSTANCE:2]", ControlIdBuilder.byInstance(2));
// by handle
Assert.assertEquals("[ID:-1]",
ControlIdBuilder.by(By.handle((String) null)));
Assert.assertEquals("[ID:-1]",
ControlIdBuilder.by(By.handle((HWND) null)));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.by(By.handle("")));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.by(By.handle("0")));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.byHandle((String) null));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.byHandle((HWND) null));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.byHandle(""));
Assert.assertEquals("[ID:-1]", ControlIdBuilder.byHandle("0"));
// run notepad
int pid = runNotepad();
String handle = Control.getHandle(NOTEPAD_TITLE, "Edit1");
Assert.assertNotNull(handle);
Assert.assertEquals(handle, Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.id(15), By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(handle, Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.id(15), By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)) + 1,
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertNull(Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)) + 1,
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(handle, Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.instance(1), By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertNull(Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.instance(1), By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)) + 1,
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(handle, Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.id(15))));
Assert.assertEquals(
handle,
Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.className("Edit"))));
Assert.assertEquals(
handle,
Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.classNameNN("Edit1"))));
Assert.assertEquals(
handle,
Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.regexpClassName("^Edit$"))));
Assert.assertEquals(
handle,
Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.position(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(handle, Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.size(
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(handle, Control.getHandle(
NOTEPAD_TITLE,
ControlIdBuilder.by(By.bounds(
Control.getPosX(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getPosY(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getWidth(NOTEPAD_TITLE,
ControlIdBuilder.byId(15)),
Control.getHeight(NOTEPAD_TITLE,
ControlIdBuilder.byId(15))))));
Assert.assertEquals(
handle,
Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.instance(1))));
Assert.assertEquals(
handle,
Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.handle(handle))));
Assert.assertEquals(handle, Control.getHandle(NOTEPAD_TITLE,
ControlIdBuilder.by(By.handle(AutoItX.handleToHwnd(handle)))));
// close notepad
Process.close(pid);
sleep(500);
Assert.assertFalse(Process.exists(pid));
}
}