From 047d7c9ec72db55f059f24e71df18bbc340b85a0 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Wed, 2 May 2018 17:34:31 +0200
Subject: Add support for high-DPI aware GUI-tests
 (HighDpiAwareApplicationTest)

---
 .../employee/CreateNewEmployeeControllerTest.java  |  4 +--
 .../util/HighDpiAwareApplicationTest.java          | 23 +++++++++++++++
 .../assignment/groupphase/util/ScaledBounds.java   | 33 ++++++++++++++++++++++
 3 files changed, 58 insertions(+), 2 deletions(-)
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java

(limited to 'src/test/java/at')

diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
index 58f1394..53dc215 100644
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
@@ -3,6 +3,7 @@ package at.ac.tuwien.sepm.assignment.groupphase.employee;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
+import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
 import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
@@ -19,10 +20,9 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.testfx.api.FxToolkit;
-import org.testfx.framework.junit.ApplicationTest;
 import org.testfx.robot.Motion;
 
-public class CreateNewEmployeeControllerTest extends ApplicationTest {
+public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest {
 
     @Before
     public void setup() throws Exception {
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
new file mode 100644
index 0000000..1a765d3
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
@@ -0,0 +1,23 @@
+package at.ac.tuwien.sepm.assignment.groupphase.util;
+
+import javafx.geometry.Bounds;
+import javafx.scene.Node;
+import org.testfx.api.FxRobotContext;
+import org.testfx.framework.junit.ApplicationTest;
+import org.testfx.service.locator.impl.BoundsLocatorImpl;
+import org.testfx.service.locator.impl.PointLocatorImpl;
+
+public class HighDpiAwareApplicationTest extends ApplicationTest {
+
+    public HighDpiAwareApplicationTest() {
+        FxRobotContext context = robotContext();
+        context.setBoundsLocator(new BoundsLocatorImpl(){
+            @Override
+            public Bounds boundsOnScreenFor(Node node) {
+                Bounds bounds = super.boundsOnScreenFor(node);
+                return ScaledBounds.wrap(bounds);
+            }
+        });
+        robotContext().setPointLocator(new PointLocatorImpl(context.getBoundsLocator()));
+    }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java
new file mode 100644
index 0000000..78578d1
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java
@@ -0,0 +1,33 @@
+package at.ac.tuwien.sepm.assignment.groupphase.util;
+
+import java.awt.GraphicsEnvironment;
+import javafx.geometry.BoundingBox;
+import javafx.geometry.Bounds;
+
+public class ScaledBounds extends BoundingBox {
+
+    private static final double scale;
+
+    static {
+        scale =
+                1 / GraphicsEnvironment.getLocalGraphicsEnvironment()
+                        .getDefaultScreenDevice()
+                        .getDefaultConfiguration()
+                        .getDefaultTransform()
+                        .getScaleX();
+    }
+
+    public static ScaledBounds wrap(Bounds bounds) {
+        return new ScaledBounds(bounds);
+    }
+
+    private ScaledBounds(Bounds wrapped) {
+        super(
+                wrapped.getMinX() * scale,
+                wrapped.getMinY() * scale,
+                wrapped.getMinZ() * scale,
+                wrapped.getWidth() * scale,
+                wrapped.getHeight() * scale,
+                wrapped.getDepth());
+    }
+}
-- 
cgit v1.2.3-70-g09d2