diff --git a/AUTHORS.txt b/AUTHORS.txt index d7c02be..4a3b89d 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -9,4 +9,4 @@ Sakari Hoisko Dockerized linux env with X Juho Lehtonen Optimized docker environment. Juho Saarinen Package improvements, initial monocle support, screenshot bug fix Turo Soisenniemi Initial java agent support -Jari Parviainen Latest Java 8 version changes \ No newline at end of file +Jari Parviainen Latest changes to Java 8 and 11 versions \ No newline at end of file diff --git a/README.md b/README.md index 6d74771..6a073cc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ JavaFXLibrary works with both Jython (local and remote use) and Python (remote only) versions of Robot Framework. This means JavaFXLibrary can be used with Jython incompatible test libraries too by importing it as a remote library. -JavaFXLibrary is tested to work with Java 8 and Robot Framework 3.2.1 or later. +JavaFXLibrary is tested to work with Java (8 and 11) and Robot Framework 3.2.1 or later. ## Keyword documentation See keyword [documentation](https://repo1.maven.org/maven2/org/robotframework/javafxlibrary/0.7.1/javafxlibrary-0.7.1.html). diff --git a/pom.xml b/pom.xml index 4899915..27196af 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,10 @@ 0.7.1-SNAPSHOT UTF-8 - 1.44 + 1.49 + 11 + 11 + 11 ${project.groupId}:${project.artifactId} @@ -210,12 +213,31 @@ + org.apache.maven.plugins maven-compiler-plugin 3.11.0 - - 1.8 - 1.8 - + + + compile-java-8 + + compile + + + 8 + + + + compile-java-11 + compile + + compile + + + 11 + true + + + org.apache.maven.plugins @@ -229,8 +251,10 @@ JavaFXLibrary + true + ${project.artifactId}-${project.version} @@ -376,6 +400,39 @@ + + org.openjfx + javafx-graphics + 11 + win + + + org.openjfx + javafx-graphics + 11 + linux + + + org.openjfx + javafx-graphics + 11 + mac + + + org.openjfx + javafx-controls + 11 + + + org.openjfx + javafx-swing + 11 + + + org.openjfx + javafx-fxml + 11 + org.apache.maven maven-model @@ -405,7 +462,7 @@ org.testfx openjfx-monocle - 8u76-b04 + jdk-12.0.1+2 org.robotframework @@ -435,7 +492,7 @@ commons-io commons-io - 2.13.0 + 2.14.0 diff --git a/src/main/java/JavaFXLibrary.java b/src/main/java/JavaFXLibrary.java index 2b54eb9..20f4b64 100644 --- a/src/main/java/JavaFXLibrary.java +++ b/src/main/java/JavaFXLibrary.java @@ -128,6 +128,8 @@ public JavaFXLibrary(boolean headless) { if (headless) { System.setProperty("testfx.robot", "glass"); System.setProperty("testfx.headless", "true"); + System.setProperty("glass.platform", "Monocle"); + System.setProperty("monocle.platform", "Headless"); System.setProperty("prism.order", "sw"); System.setProperty("prism.text", "t2k"); TestFxAdapter.isHeadless = true; diff --git a/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ApplicationLauncher.java b/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ApplicationLauncher.java index 57cc01f..3bf711e 100644 --- a/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ApplicationLauncher.java +++ b/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ApplicationLauncher.java @@ -112,14 +112,12 @@ private Class getMainClass(String appName) { } private void addPathToClassPath(String path) { - URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); RobotLog.info("Setting following path to classpath: " + path); try { - Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); - method.setAccessible(true); - method.invoke(classLoader, (new File(path)).toURI().toURL()); + URL[] urls = new URL[]{new File(path).toURI().toURL()}; + URLClassLoader classLoader = new URLClassLoader(urls, ClassLoader.getSystemClassLoader()); } catch (Exception e) { throw new JavaFXLibraryFatalException("Problem setting the classpath: " + path, e); @@ -176,11 +174,11 @@ public void setToClasspath(String path, boolean failIfNotFound) { @RobotKeyword("Logs current classpath content") public void logApplicationClasspath() { try { - ClassLoader cl = ClassLoader.getSystemClassLoader(); - URL[] urls = ((URLClassLoader) cl).getURLs(); RobotLog.info("Printing out classpaths: \n"); - for (URL url : urls) { - RobotLog.info(url.getFile()); + + String classpathStr = System.getProperty("java.class.path"); + for (String classpathItem : classpathStr.split(System.getProperty("path.separator"))) { + RobotLog.info(classpathItem); } } catch (Exception e) { throw new JavaFXLibraryNonFatalException("Unable to log application classpaths", e); diff --git a/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ConvenienceKeywords.java b/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ConvenienceKeywords.java index 531cc7d..77c2792 100644 --- a/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ConvenienceKeywords.java +++ b/src/main/java/javafxlibrary/keywords/AdditionalKeywords/ConvenienceKeywords.java @@ -17,8 +17,8 @@ package javafxlibrary.keywords.AdditionalKeywords; -import com.sun.javafx.scene.control.skin.TableViewSkin; -import com.sun.javafx.scene.control.skin.VirtualFlow; +import javafx.scene.control.skin.TableViewSkin; +import javafx.scene.control.skin.VirtualFlow; import javafx.collections.ObservableList; import javafx.css.PseudoClass; import javafx.geometry.BoundingBox; @@ -279,7 +279,7 @@ public String getNodeText(Object locator) { @RobotKeyword("Returns image name and path of the node. \n\n" + "``locator`` is either a _query_ or _Object_ for a node whose getHeight method will be called, see " + "`3. Locating JavaFX Nodes`. \n\n" - + "Returns full image path by subsequently calling impl_getUrl -method. \n\n" + + "Returns full image path by subsequently calling getUrl -method. \n\n" + "Note, impl_getUrl -method is deprecated! Support for this method will be removed from Java in the future.") @ArgumentNames({"node"}) public String getNodeImageUrl(Object locator) { @@ -294,8 +294,7 @@ public String getNodeImageUrl(Object locator) { try { Object result = m.invoke(node, (Object) null); Image image = (Image) result; - RobotLog.trace("Calling deprecated method impl_getUrl() for image: \"" + image + "\""); - return image.impl_getUrl(); + return image.getUrl(); } catch (Exception e) { throw new JavaFXLibraryNonFatalException("Problem calling method: .getImage(): " + e.getMessage(), e); } @@ -477,15 +476,18 @@ public List getTableColumnValues(Object locator, int column) { public List getTableColumnCells(Object locator, int column) { checkObjectArgumentNotNull(locator); try { + List columnCells = new ArrayList<>(); + RobotLog.info("Getting table \"" + locator + "\" cells from column \"" + column + "\"."); TableView table = (TableView) objectToNode(locator); - List columnCells = new ArrayList<>(); + VirtualFlow vf = (VirtualFlow) ((TableViewSkin) table.getSkin()).getChildren().get(1); for (int i = vf.getFirstVisibleCell().getIndex(); i < vf.getLastVisibleCell().getIndex() + 1; i++) { RobotLog.info("Index number: " + i); columnCells.add(mapObject(vf.getCell(i).getChildrenUnmodifiable().get(column))); } + return mapObjects(columnCells); } catch (ClassCastException cce) { throw new JavaFXLibraryNonFatalException("Unable to handle argument as TableView!"); diff --git a/src/test/java/javafxlibrary/TestFxAdapterTest.java b/src/test/java/javafxlibrary/TestFxAdapterTest.java index e701f64..ab7f9f2 100644 --- a/src/test/java/javafxlibrary/TestFxAdapterTest.java +++ b/src/test/java/javafxlibrary/TestFxAdapterTest.java @@ -37,6 +37,8 @@ public FxRobotInterface getRobot() { public static void setupTests() { System.setProperty("testfx.robot", "glass"); System.setProperty("testfx.headless", "true"); + System.setProperty("glass.platform", "Monocle"); + System.setProperty("monocle.platform", "Headless"); System.setProperty("prism.order", "sw"); System.setProperty("prism.text", "t2k"); try { diff --git a/src/test/java/javafxlibrary/testapps/controllers/TestKeyboardRobotController.java b/src/test/java/javafxlibrary/testapps/controllers/TestKeyboardRobotController.java index 5b34556..a0a939f 100644 --- a/src/test/java/javafxlibrary/testapps/controllers/TestKeyboardRobotController.java +++ b/src/test/java/javafxlibrary/testapps/controllers/TestKeyboardRobotController.java @@ -17,7 +17,7 @@ package javafxlibrary.testapps.controllers; -import com.sun.javafx.scene.control.skin.TextAreaSkin; +import javafx.scene.control.skin.TextAreaSkin; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -52,15 +52,9 @@ public void initialize(URL location, ResourceBundle resources) { @Override public void handle(KeyEvent event) { if (event.getCode().equals(KeyCode.TAB)) { - if (event.isShiftDown()) { - textArea.setText(textArea.getText() + " "); - textArea.positionCaret(textArea.getText().length()); - event.consume(); - } else { - TextAreaSkin skin = (TextAreaSkin) textArea.getSkin(); - skin.getBehavior().traverseNext(); - event.consume(); - } + textArea.setText(textArea.getText() + " "); + textArea.positionCaret(textArea.getText().length()); + event.consume(); } } }); diff --git a/src/test/java/javafxlibrary/utils/HelperFunctionsTests/GetMouseButtonsTest.java b/src/test/java/javafxlibrary/utils/HelperFunctionsTests/GetMouseButtonsTest.java index 6c4b434..ce86636 100644 --- a/src/test/java/javafxlibrary/utils/HelperFunctionsTests/GetMouseButtonsTest.java +++ b/src/test/java/javafxlibrary/utils/HelperFunctionsTests/GetMouseButtonsTest.java @@ -3,6 +3,9 @@ import javafx.scene.input.MouseButton; import javafxlibrary.exceptions.JavaFXLibraryNonFatalException; import javafxlibrary.utils.HelperFunctions; + +import java.util.Arrays; + import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -50,7 +53,7 @@ public void getMouseButtons_MultipleValues() { public void getMouseButtons_InvalidValue() { thrown.expect(JavaFXLibraryNonFatalException.class); // thrown.expect(IllegalArgumentException.class); - thrown.expectMessage("\"HUGE_RED_ONE\" is not a valid MouseButton. Accepted values are: [NONE, PRIMARY, MIDDLE, SECONDARY]"); + thrown.expectMessage("\"HUGE_RED_ONE\" is not a valid MouseButton. Accepted values are: " + Arrays.asList(MouseButton.values())); HelperFunctions.getMouseButtons(new String[]{"HUGE_RED_ONE"}); } diff --git a/src/test/java/javafxlibrary/utils/HelperFunctionsTests/MapObjectsTest.java b/src/test/java/javafxlibrary/utils/HelperFunctionsTests/MapObjectsTest.java index 68ad01a..a00ae18 100644 --- a/src/test/java/javafxlibrary/utils/HelperFunctionsTests/MapObjectsTest.java +++ b/src/test/java/javafxlibrary/utils/HelperFunctionsTests/MapObjectsTest.java @@ -47,7 +47,7 @@ public void mapObjects_FromSet() { @Test public void mapObjects_FromQueue() { - Queue