package edu.kit.pse.ws2013.routekit;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
public class RobotUI {
private static Robot tester;
public static void main(String[] args) throws AWTException {
tester = new Robot();
delay(5000);
System.out.println(MouseInfo.getPointerInfo().getLocation());
focus();
testAbout();
testRoute("49.010628 8.409197", "49.008965 8.412416");
focus();
testRoute2();
exportGPX();
exportHTML();
swap();
swap();
switchOSM();
testOpenAdminMenu();
testZoom();
testDrag();
openMenu('v', 'a');
swap();
delay(1000);
openMenu('v', 'a');
testRoute("49.01u628 8.409197", "49.008965 8.412416");
swap();
swap();
testRoute("90.00000000001 8.409197", "49.008965 8.412416");
swap();
swap();
testImportPrecalcMix();
testZoom2();// for one-way arrows
testProfile();
testHistory();
testRemoveProfileInMap();
deleteProfile();
deleteMap();
delay(5000);
System.out.println(MouseInfo.getPointerInfo().getLocation());
}
private static void testHistory() {
openMenu('r', 'v');
clickAt(535, 573); // Abbrechen
clickAt(135, 141); // Verlauf Button
clickAt(441, 567); // OK ohne selection
clickAt(377, 147); // Selection
clickAt(441, 567); // OK
openMenu('r', 'v');
clickAt(377, 147); // Selection
clickAt(377, 147); // Selection
}
private static void testRemoveProfileInMap() {
openMenu('v', 'k');
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_DOWN);
type(KeyEvent.VK_DOWN);
// type(KeyEvent.VK_DOWN);
clickAt(717, 343); // entfernen
delay(200);
clickAt(665, 527);// ok
delay(6000);
clickAt(447, 419);// yes, I am sure
delay(1000);
}
private static void testProfile() {
openMenu('v', 'p');
delay(1000);
clickAt(721, 193);
type("testprofile1");
type(KeyEvent.VK_ENTER);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_SPACE);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_SPACE);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_SPACE);
type(KeyEvent.VK_TAB);
type(KeyEvent.VK_SPACE);
type(KeyEvent.VK_TAB);
selectAll();
type("400");
type(KeyEvent.VK_TAB);
selectAll();
type("300");
type(KeyEvent.VK_TAB);
selectAll();
type("50000");
type(KeyEvent.VK_TAB);
selectAll();
type("1");
type(KeyEvent.VK_TAB);
selectAll();
type("1"); //
clickAt(672, 530); // ok
openMenu('v', 'p');
type(KeyEvent.VK_DOWN);
type(KeyEvent.VK_UP);
type(KeyEvent.VK_TAB);
tester.keyPress(KeyEvent.VK_SHIFT);
delay(200);
type(KeyEvent.VK_TAB);
delay(200);
tester.keyRelease(KeyEvent.VK_SHIFT);
type(KeyEvent.VK_DOWN);
type(KeyEvent.VK_DOWN);
type(KeyEvent.VK_TAB);
clickAt(672, 530); // ok
openMenu('v', 'k');
clickAt(717, 314); // hinzufügen
delay(500);
type(KeyEvent.VK_ENTER);
delay(500);
clickAt(665, 527);// ok
delay(6000);
clickAt(449, 396);// yes, I am sure
delay(3000);
waitForColor();
}
private static void testImportPrecalcMix() {
clickAt(479, 74);
clickAt(263, 234);// Imporieren
delay(300);
type(KeyEvent.VK_ESCAPE);
delay(300);
clickAt(263, 234);// Imporieren
delay(300);
type(KeyEvent.VK_TAB);
delay(300);
type(KeyEvent.VK_TAB);
delay(300);
type(KeyEvent.VK_TAB);
delay(300);
type(Resources.getKarlsruheBigLocation());
type(KeyEvent.VK_TAB);
type("testkarte");
type(KeyEvent.VK_ENTER);
delay(300);
clickAt(664, 529);// ok
delay(6000);
clickAt(449, 396);// yes, I am sure
delay(4000);
precalc();
openMenu('v', 'p');
delay(500);
type(KeyEvent.VK_DOWN);
type(KeyEvent.VK_UP);
type(KeyEvent.VK_ENTER);
type(KeyEvent.VK_ENTER);
delay(500);
precalc();
}
private static void precalc() {
assertColor(589, 378, Color.RED);
clickAt(589, 378);// precalc
waitForColor();
}
private static void deleteProfile() {
openMenu('v', 'p');
delay(500);
clickAt(665, 196);
delay(300);
clickAt(664, 529);// ok
delay(500);
type(KeyEvent.VK_TAB); // Ja ich will Vorber. loesch.
type(KeyEvent.VK_SPACE);
delay(3000);
}
private static void deleteMap() {
openMenu('v', 'k');
delay(500);
clickAt(453, 235);
delay(300);
clickAt(664, 529);// ok
delay(6000);
clickAt(449, 442);// yes, I am sure
delay(2000);
waitForColor();
}
private static void testOpenAdminMenu() {
openMenu('v', 'k');
// type(KeyEvent.VK_ESCAPE);
clickAt(762, 529); // TODO?
delay(500);
openMenu('v', 'p');
type(KeyEvent.VK_ESCAPE);
delay(500);
}
private static void testDrag() {
tester.mouseMove(700, 300);
delay(500);
tester.mousePress(InputEvent.BUTTON1_DOWN_MASK);
delay(500);
tester.mouseMove(800, 350);
delay(500);
tester.mouseMove(700, 300);
delay(500);
tester.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
delay(500);
}
private static void testZoom2() {
tester.mouseMove(700, 300);
tester.mouseWheel(-1);
delay(400);
tester.mouseWheel(-1);
delay(400);
testRoute("49.008312 8.407717", "49.00843 8.407524");
delay(1000);
swap();
tester.mouseWheel(1);
delay(400);
tester.mouseWheel(1);
delay(400);
}
private static void testZoom() {
clickAt(958, 118);
clickAt(958, 148);
tester.mouseMove(700, 300);
tester.mouseWheel(1);
delay(200);
tester.mouseWheel(-1);
delay(200);
tester.mouseWheel(1);
delay(200);
tester.mousePress(InputEvent.BUTTON1_DOWN_MASK);
delay(10);
tester.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
tester.mousePress(InputEvent.BUTTON1_DOWN_MASK);
delay(10);
tester.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
delay(300);
}
private static void switchOSM() {
openMenu('v', 'o');
delay(2000);
openMenu('v', 'o');
}
private static void testRoute(String a, String b) {
clickAt(188, 71);
selectAll();
type(a);
clickAt(188, 98);
selectAll();
type(b);
type(KeyEvent.VK_ENTER);
}
private static void testRoute2() {
tester.mouseMove(347, 490);
tester.mousePress(MouseEvent.BUTTON3_DOWN_MASK);
delay(100);
tester.mouseRelease(MouseEvent.BUTTON3_DOWN_MASK);
delay(100);
clickAt(360, 500);
delay(100);
tester.mouseMove(976, 453);
tester.mousePress(MouseEvent.BUTTON3_DOWN_MASK);
delay(100);
tester.mouseRelease(MouseEvent.BUTTON3_DOWN_MASK);
delay(100);
clickAt(980, 490);
}
private static void focus() {
clickAt(100, 200);
}
private static void swap() {
clickAt(36, 81);
}
private static void exportHTML() {
openMenu('e', 'h');
delay(1000);
type(KeyEvent.VK_ESCAPE);// CANCEL
delay(1000);
openMenu('e', 'h');
delay(1000);
type("test.html");
type(KeyEvent.VK_ENTER);
delay(1000);
}
private static void exportGPX() {
openMenu('e', 'g');
delay(1000);
type(KeyEvent.VK_ESCAPE);// CANCEL
delay(1000);
openMenu('e', 'g');
delay(1000);
type("test.gpx");
type(KeyEvent.VK_ENTER);
delay(1000);
}
private static void testAbout() {
tester.keyPress(KeyEvent.VK_ALT);
type(KeyEvent.VK_R);
tester.keyRelease(KeyEvent.VK_ALT);
type(KeyEvent.VK_E);
delay(500);
tester.keyPress(KeyEvent.VK_ALT);
type(KeyEvent.VK_F4);
tester.keyRelease(KeyEvent.VK_ALT);
}
// --- Util Functions ---
private static void assertColor(int i, int j, Color toTest) {
Color c = tester.getPixelColor(i, j);
if (!c.equals(toTest)) {
System.out.println(c);
System.out.println("Error");
}
}
private static void selectAll() {
// type(KeyEvent.VK_END);
// delay(500);
// tester.keyPress(KeyEvent.VK_SHIFT);
// System.out.println("HIFT");
// delay(1000);
type(KeyEvent.VK_HOME);
// delay(1000);
// System.out.println("EHS");
// tester.keyRelease(KeyEvent.VK_SHIFT);
// for (int i = 0; i < 30; i++) {
// type(KeyEvent.VK_DELETE);
// }
tester.keyPress(KeyEvent.VK_CONTROL);
delay(100);
type(KeyEvent.VK_A);
delay(100);
tester.keyRelease(KeyEvent.VK_CONTROL);
}
private static void openMenu(char menu, char sub) {
tester.keyPress(KeyEvent.VK_ALT);
type(KeyEvent.VK_A + menu - 'a');
tester.keyRelease(KeyEvent.VK_ALT);
type(KeyEvent.VK_A + sub - 'a');
delay(500);
}
private static void type(String s) {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
type(KeyEvent.VK_0 + c - '0');
} else if (c == ' ') {
type(KeyEvent.VK_SPACE);
} else if (c == '.') {
type(KeyEvent.VK_PERIOD);
} else if (c == '\\' || c == '/') { // do as a /
tester.keyPress(KeyEvent.VK_SHIFT);
type(KeyEvent.VK_7);
tester.keyRelease(KeyEvent.VK_SHIFT);
} else if (c == ':') {
tester.keyPress(KeyEvent.VK_SHIFT);
type(KeyEvent.VK_PERIOD);
tester.keyRelease(KeyEvent.VK_SHIFT);
} else if (c == '_') {
tester.keyPress(KeyEvent.VK_SHIFT);
type(KeyEvent.VK_MINUS);
tester.keyRelease(KeyEvent.VK_SHIFT);
} else if (c >= 'A' && c <= 'Z') {
tester.keyPress(KeyEvent.VK_SHIFT);
type(KeyEvent.VK_A + c - 'A');
tester.keyRelease(KeyEvent.VK_SHIFT);
} else if (c >= 'a' && c <= 'z') {
type(KeyEvent.VK_A + c - 'a');
}
}
}
private static void type(int vkR) {
tester.keyPress(vkR);
delay(50);
tester.keyRelease(vkR);
}
private static void clickAt(int i, int j) {
tester.mouseMove(i, j);
tester.mousePress(InputEvent.BUTTON1_DOWN_MASK);
delay(100);
tester.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
delay(300);
}
private static void delay(int i) {
try {
Thread.sleep(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void waitForColor() {
delay(2000);
while (Color.white.equals(tester.getPixelColor(450, 428))) {
delay(500);
}
}
}