From 047d7c9ec72db55f059f24e71df18bbc340b85a0 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer Date: Wed, 2 May 2018 17:34:31 +0200 Subject: Add support for high-DPI aware GUI-tests (HighDpiAwareApplicationTest) --- .../util/HighDpiAwareApplicationTest.java | 23 +++++++++++++++ .../assignment/groupphase/util/ScaledBounds.java | 33 ++++++++++++++++++++++ 2 files changed, 56 insertions(+) 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/ac/tuwien/sepm/assignment/groupphase/util') 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 From 8f741b60910ff19daa21ecce800a4f628c7057ab Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer Date: Wed, 2 May 2018 21:59:48 +0200 Subject: Run maven fmt:format to reformat code --- .../controller/CreateNewEmployeeController.java | 5 ++--- .../groupphase/util/HighDpiAwareApplicationTest.java | 15 ++++++++------- .../sepm/assignment/groupphase/util/ScaledBounds.java | 11 ++++++----- 3 files changed, 16 insertions(+), 15 deletions(-) (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java index d7f1a73..5906692 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java @@ -60,7 +60,7 @@ public class CreateNewEmployeeController { @FXML public void onCancelClicked() { - ((Stage)inputQualification.getScene().getWindow()).close(); + ((Stage) inputQualification.getScene().getWindow()).close(); } @FXML @@ -112,7 +112,6 @@ public class CreateNewEmployeeController { if (inputQualification.getSelectionModel().getSelectedItem() == null) { return EducationLevel.RS; } - return EducationLevel.valueOf( - inputQualification.getSelectionModel().getSelectedItem()); + return EducationLevel.valueOf(inputQualification.getSelectionModel().getSelectedItem()); } } 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 index 1a765d3..c9816a1 100644 --- 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 @@ -11,13 +11,14 @@ 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); - } - }); + 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 index 78578d1..02c15c4 100644 --- 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 @@ -10,11 +10,12 @@ public class ScaledBounds extends BoundingBox { static { scale = - 1 / GraphicsEnvironment.getLocalGraphicsEnvironment() - .getDefaultScreenDevice() - .getDefaultConfiguration() - .getDefaultTransform() - .getScaleX(); + 1 + / GraphicsEnvironment.getLocalGraphicsEnvironment() + .getDefaultScreenDevice() + .getDefaultConfiguration() + .getDefaultTransform() + .getScaleX(); } public static ScaledBounds wrap(Bounds bounds) { -- cgit v1.2.3-70-g09d2 From e5b471c46f616e035d87a310265df1a5d2031292 Mon Sep 17 00:00:00 2001 From: Martin Weick Date: Fri, 4 May 2018 21:04:22 +0200 Subject: Refactor getTopModalStage to Helper --- .../employee/CreateNewEmployeeControllerTest.java | 28 ++++------------------ .../sepm/assignment/groupphase/util/Helper.java | 28 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util') 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 da8a6ac..eb1a728 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 @@ -6,15 +6,11 @@ import static org.mockito.Mockito.when; 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.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.Helper; import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import javafx.scene.control.DialogPane; import javafx.scene.input.MouseButton; -import javafx.stage.Modality; import javafx.stage.Stage; -import javafx.stage.Window; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -48,7 +44,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest write("Name"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); Assert.assertNotNull(alertDialog); DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); @@ -63,7 +59,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest moveTo("#inputName"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); Assert.assertNotNull(alertDialog); DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); @@ -80,26 +76,10 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest write("Test"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); Assert.assertNotNull(alertDialog); DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); Assert.assertEquals("Speicherfehler", dialogPane.getHeaderText()); } - - private Stage getTopModalStage() { - - List allWindows = new ArrayList<>(robotContext().getWindowFinder().listWindows()); - Collections.reverse(allWindows); - return (Stage) - allWindows - .stream() - .filter(window -> window instanceof Stage) - .filter( - window -> - ((Stage) window).getModality() - == Modality.APPLICATION_MODAL) - .findFirst() - .orElse(null); - } } diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java new file mode 100644 index 0000000..b808206 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java @@ -0,0 +1,28 @@ +package at.ac.tuwien.sepm.assignment.groupphase.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.Window; +import org.testfx.api.FxRobotContext; + +public class Helper { + + public static Stage getTopModalStage(FxRobotContext robotContext) { + + List allWindows = new ArrayList<>(robotContext.getWindowFinder().listWindows()); + Collections.reverse(allWindows); + return (Stage) + allWindows + .stream() + .filter(window -> window instanceof Stage) + .filter( + window -> + ((Stage) window).getModality() + == Modality.APPLICATION_MODAL) + .findFirst() + .orElse(null); + } +} -- cgit v1.2.3-70-g09d2