From 4fd910752a06a05757785d2b59156c92e8c47960 Mon Sep 17 00:00:00 2001 From: Oliver-Loeffler Date: Wed, 5 Oct 2022 00:02:26 +0200 Subject: [PATCH 1/9] fix: Application data, application preferences, messagebox and user library are now stored specifically by version, closes #369. --- .../javafx/scenebuilder/app/AppPlatform.java | 86 +++++++---- .../preferences/PreferencesController.java | 5 +- .../scenebuilder/app/AppPlatformTest.java | 135 ++++++++++++++++++ .../PreferencesControllerTest.java | 49 +++++++ .../app/util/AppSettingsTest.java | 74 ++++++++++ 5 files changed, 317 insertions(+), 32 deletions(-) create mode 100644 app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java create mode 100644 app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java create mode 100644 app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java index 3d7e77235..94507fc99 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Gluon and/or its affiliates. + * Copyright (c) 2017, 2022 Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -32,17 +32,20 @@ */ package com.oracle.javafx.scenebuilder.app; -import com.oracle.javafx.scenebuilder.app.util.MessageBox; -import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform; -import static com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.IS_LINUX; -import static com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.IS_MAC; -import static com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.IS_WINDOWS; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Properties; + +import com.oracle.javafx.scenebuilder.app.util.AppSettings; +import com.oracle.javafx.scenebuilder.app.util.MessageBox; +import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform; +import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.OS; + import javafx.application.Application; import javafx.application.Platform; @@ -56,48 +59,71 @@ public class AppPlatform { private static String messageBoxFolder; private static String logsFolder; private static MessageBox messageBox; - + public static synchronized String getApplicationDataFolder() { - + return getApplicationDataFolder(System.getenv(), System.getProperties(), OS.get(), + AppSettings.getSceneBuilderVersion()); + } + + protected static synchronized String getApplicationDataFolder(Map sysenv, Properties system, + OS operatingSystem, String version) { if (applicationDataFolder == null) { - final String appName = "Scene Builder"; //NOI18N - - if (IS_WINDOWS) { - applicationDataFolder - = System.getenv("APPDATA") + "\\" + appName; //NOI18N - } else if (IS_MAC) { - applicationDataFolder - = System.getProperty("user.home") //NOI18N - + "/Library/Application Support/" //NOI18N - + appName; - } else if (IS_LINUX) { - applicationDataFolder - = System.getProperty("user.home") + "/.scenebuilder"; //NOI18N + final String appName = "Scene Builder"; // NOI18N + switch (operatingSystem) { + case WINDOWS: + applicationDataFolder = sysenv.get("APPDATA") + "\\" + appName + "\\" + version; // NOI18N + break; + case MAC: + applicationDataFolder = system.getProperty("user.home") // NOI18N + + "/Library/Application Support/" // NOI18N + + appName + "/" + version; + break; + case LINUX: + applicationDataFolder = system.getProperty("user.home") + "/.scenebuilder/" + version; // NOI18N + break; } } - - assert applicationDataFolder != null; - + + assert applicationDataFolder != null; return applicationDataFolder; } + protected static synchronized void clear() { + applicationDataFolder = null; + userLibraryFolder = null; + messageBoxFolder = null; + logsFolder = null; + } + public static synchronized String getUserLibraryFolder() { - + return getUserLibraryFolder(OS.get()); + } + + public static synchronized String getUserLibraryFolder(OS operatingSystem) { if (userLibraryFolder == null) { - userLibraryFolder = getApplicationDataFolder() + "/Library"; //NOI18N + if (OS.WINDOWS.equals(operatingSystem)) { + userLibraryFolder = getApplicationDataFolder() + "\\" + "Library"; // NOI18N + } else { + userLibraryFolder = getApplicationDataFolder() + "/" + "Library"; // NOI18N + } } - return userLibraryFolder; } + + /** * Returns the directory path for logs. Default path is "${user.home}/.scenebuilder/logs/". * @return Directory path for Scene Builder logs */ public static synchronized String getLogFolder() { + return getLogFolder(System.getProperties()); + } + + protected static synchronized String getLogFolder(Properties system) { if (logsFolder == null) { - logsFolder = Paths.get(System.getProperty("user.home"), ".scenebuilder", "logs").toString(); //NOI18N + logsFolder = Paths.get(system.getProperty("user.home"), ".scenebuilder", "logs").toString(); //NOI18N } return logsFolder; } @@ -144,7 +170,7 @@ private static synchronized boolean requestStartGeneric( messageBox = new MessageBox<>(getMessageBoxFolder(), MessageBoxMessage.class, 1000 /* ms */); // Fix Start: Github Issue #301 final List parametersUnnamed = new ArrayList<>(parameters.getUnnamed()); - if (IS_MAC) { + if (EditorPlatform.IS_MAC) { parametersUnnamed.removeIf(p -> p.startsWith("-psn")); } // Fix End @@ -165,7 +191,7 @@ private static synchronized boolean requestStartGeneric( return result; } - private static String getMessageBoxFolder() { + protected static String getMessageBoxFolder() { if (messageBoxFolder == null) { messageBoxFolder = getApplicationDataFolder() + "/MB"; //NOI18N } diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java index cf33a7ebf..fa41db801 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 Gluon and/or its affiliates. + * Copyright (c) 2016, 2022 Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -33,6 +33,7 @@ package com.oracle.javafx.scenebuilder.app.preferences; import com.oracle.javafx.scenebuilder.app.DocumentWindowController; +import com.oracle.javafx.scenebuilder.app.util.AppSettings; import com.oracle.javafx.scenebuilder.kit.preferences.PreferencesControllerBase; import java.util.HashMap; @@ -54,7 +55,7 @@ public class PreferencesController extends PreferencesControllerBase{ **************************************************************************/ // PREFERENCES NODE NAME - static final String SB_RELEASE_NODE = "SB_2.0"; //NOI18N + static final String SB_RELEASE_NODE = "SB_"+AppSettings.getSceneBuilderVersion(); //NOI18N // GLOBAL PREFERENCES static final String TOOL_THEME = "TOOL_THEME"; //NOI18N diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java new file mode 100644 index 000000000..569df5754 --- /dev/null +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2016, 2022 Gluon and/or its affiliates. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.app; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledOnOs; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import com.oracle.javafx.scenebuilder.app.util.AppSettings; +import com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.OS; + +class AppPlatformTest { + + private final Map testEnvironment = new HashMap<>(); + + private final Properties testProperties = new Properties(); + + @BeforeEach + void prepare() { + AppPlatform.clear(); + + testEnvironment.clear(); + testEnvironment.put("APPDATA", "C:\\Users\\UserName\\AppData\\Roaming"); + + testProperties.clear(); + testProperties.put("user.home", "/home/user"); + } + + @ParameterizedTest + @CsvSource({ "WINDOWS, 18.0.0, C:\\Users\\UserName\\AppData\\Roaming\\Scene Builder\\18.0.0", + "LINUX, 19.1.2-SNAPSHOT, /home/user/.scenebuilder/19.1.2-SNAPSHOT", + "MAC, 17, /home/user/Library/Application Support/Scene Builder/17" }) + void that_applications_data_folder_matches_OS_requirements(OS operatingSystem, String version, + String expectedPath) { + String appDir = AppPlatform.getApplicationDataFolder(testEnvironment, testProperties, operatingSystem, version); + assertEquals(expectedPath, appDir); + } + + @Test + void that_library_path_is_subdir_of_appdata() { + Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path expectedLibDir = appDir.resolve("Library"); + Path generatedLibDir = Path.of(AppPlatform.getUserLibraryFolder()); + + assertEquals(expectedLibDir, generatedLibDir); + } + + @Test + @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.WINDOWS) + void that_application_settings_directory_is_created_properly_on_windows() { + Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path expected = Path.of(System.getenv("APPDATA") + "\\Scene Builder\\" + AppSettings.getSceneBuilderVersion()); + assertEquals(expected, appDir); + } + + @Test + @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.LINUX) + void that_application_settings_directory_is_created_properly_on_linux() { + Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path expected = Path + .of(System.getProperty("user.home") + "/.scenebuilder/" + AppSettings.getSceneBuilderVersion()); + assertEquals(expected, appDir); + } + + @Test + @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.MAC) + void that_application_settings_directory_is_created_properly_on_mac() { + Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path expected = Path.of(System.getProperty("user.home") + "/Library/Application Support/Scene Builder/" + + AppSettings.getSceneBuilderVersion()); + assertEquals(expected, appDir); + } + + @Test + void that_user_library_folder_resides_in_applications_data_folder() { + // init app data folder first as this is the basis + AppPlatform.getApplicationDataFolder(testEnvironment, testProperties, OS.WINDOWS, "19.0.0-SNAPSHOT"); + String libraryDir = AppPlatform.getUserLibraryFolder(OS.WINDOWS); + assertEquals("C:\\Users\\UserName\\AppData\\Roaming\\Scene Builder\\19.0.0-SNAPSHOT\\Library", libraryDir); + } + + @Test + void that_messagebox_folder_resides_in_applications_data_folder() { + // init app data folder first as this is the basis + AppPlatform.getApplicationDataFolder(testEnvironment, testProperties, OS.WINDOWS, "19.0.0-SNAPSHOT"); + Path messageBoxDir = Path.of(AppPlatform.getMessageBoxFolder()); + Path expectedDir = Path.of("C:\\Users\\UserName\\AppData\\Roaming\\Scene Builder\\19.0.0-SNAPSHOT\\MB"); + assertEquals(expectedDir, messageBoxDir); + } + + @Test + void that_logfiles_are_stored_in_userhome_scenebuilder_logs() { + String expectedLogDir = Path.of(System.getProperty("user.home"), ".scenebuilder", "logs").toString(); + assertEquals(expectedLogDir, AppPlatform.getLogFolder()); + } +} diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java new file mode 100644 index 000000000..c9e211e77 --- /dev/null +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016, 2022 Gluon and/or its affiliates. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.app.preferences; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.oracle.javafx.scenebuilder.app.util.AppSettings; + +class PreferencesControllerTest { + + @Test + void that_preferences_release_node_name_matches_app_version() { + assertEquals("SB_"+AppSettings.getSceneBuilderVersion(), + PreferencesController.SB_RELEASE_NODE); + } + +} diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java new file mode 100644 index 000000000..980b92e9e --- /dev/null +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2016, 2022, Gluon and/or its affiliates. + * All rights reserved. Use is subject to license terms. + * + * This file is available and licensed under the following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * - Neither the name of Oracle Corporation and Gluon nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.oracle.javafx.scenebuilder.app.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.opentest4j.AssertionFailedError; + +import com.oracle.javafx.scenebuilder.app.about.AboutWindowController; + +class AppSettingsTest { + + @Test + void that_scene_builder_version_is_obtained_correctly() { + String expectedVersion = readSceneBuilderVersion(); + assertEquals(expectedVersion, AppSettings.getSceneBuilderVersion()); + } + + private String readSceneBuilderVersion() { + // about.properties is generated by Maven + URL resource = AboutWindowController.class.getResource("about.properties"); + Path file = new File(resource.getFile()).toPath(); + try { + List lines = Files.readAllLines(file); + for (String line : lines) { + if (line.startsWith("build.version=")) { + return line.split("=")[1]; + } + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + throw new AssertionFailedError("Failed to obtain Scene Builder version from about.properties"); + } + +} From 2b93977989202d5db869bb4d83ce346460ae03e1 Mon Sep 17 00:00:00 2001 From: Oliver-Loeffler Date: Wed, 5 Oct 2022 00:18:32 +0200 Subject: [PATCH 2/9] Added Javadoc and reduced visibility of overloaded methods which were introduced to enable testing. --- .../oracle/javafx/scenebuilder/app/AppPlatform.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java index 94507fc99..39e2b978e 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java @@ -65,7 +65,7 @@ public static synchronized String getApplicationDataFolder() { AppSettings.getSceneBuilderVersion()); } - protected static synchronized String getApplicationDataFolder(Map sysenv, Properties system, + static synchronized String getApplicationDataFolder(Map sysenv, Properties system, OS operatingSystem, String version) { if (applicationDataFolder == null) { final String appName = "Scene Builder"; // NOI18N @@ -88,7 +88,10 @@ protected static synchronized String getApplicationDataFolder(Map Date: Wed, 5 Oct 2022 00:21:37 +0200 Subject: [PATCH 3/9] Imports cleaned. --- .../java/com/oracle/javafx/scenebuilder/app/AppPlatform.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java index 39e2b978e..e619724c3 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java @@ -32,6 +32,8 @@ */ package com.oracle.javafx.scenebuilder.app; +import static com.oracle.javafx.scenebuilder.kit.editor.EditorPlatform.IS_MAC; + import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -48,7 +50,6 @@ import javafx.application.Application; import javafx.application.Platform; - /** * */ @@ -173,7 +174,7 @@ private static synchronized boolean requestStartGeneric( messageBox = new MessageBox<>(getMessageBoxFolder(), MessageBoxMessage.class, 1000 /* ms */); // Fix Start: Github Issue #301 final List parametersUnnamed = new ArrayList<>(parameters.getUnnamed()); - if (EditorPlatform.IS_MAC) { + if (IS_MAC) { parametersUnnamed.removeIf(p -> p.startsWith("-psn")); } // Fix End From 1b7e1d02c06f00beadace33b6534ef7e0c312b68 Mon Sep 17 00:00:00 2001 From: Oliver-Loeffler Date: Wed, 5 Oct 2022 00:25:34 +0200 Subject: [PATCH 4/9] Added more detailed error message in AppSettingsTest for case when resource is not found or property key is not existing. --- .../javafx/scenebuilder/app/util/AppSettingsTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java index 980b92e9e..44cc6e8f1 100644 --- a/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java @@ -32,6 +32,7 @@ package com.oracle.javafx.scenebuilder.app.util; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; import java.io.File; import java.io.IOException; @@ -57,6 +58,9 @@ void that_scene_builder_version_is_obtained_correctly() { private String readSceneBuilderVersion() { // about.properties is generated by Maven URL resource = AboutWindowController.class.getResource("about.properties"); + if (null == resource) { + fail("The required file resource \"about.properties\" was not found!"); + } Path file = new File(resource.getFile()).toPath(); try { List lines = Files.readAllLines(file); @@ -68,7 +72,7 @@ private String readSceneBuilderVersion() { } catch (IOException e) { throw new UncheckedIOException(e); } - throw new AssertionFailedError("Failed to obtain Scene Builder version from about.properties"); + throw new AssertionFailedError("About.properties does not contain the required \"build.version\" entry."); } } From 1aee39255de45a99d1d9f93fe0878b1e00cde7a7 Mon Sep 17 00:00:00 2001 From: Oliver-Loeffler Date: Mon, 26 Aug 2024 22:55:56 +0200 Subject: [PATCH 5/9] OS is now passed consequently as param. Now also the path separators are properly created regardless of the test exec OS. --- .../javafx/scenebuilder/app/AppPlatform.java | 38 ++++++++++++++----- .../scenebuilder/app/AppPlatformTest.java | 13 +++---- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java index e619724c3..49b79ab29 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/AppPlatform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022 Gluon and/or its affiliates. + * Copyright (c) 2017, 2024 Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -37,6 +37,7 @@ import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @@ -62,8 +63,14 @@ public class AppPlatform { private static MessageBox messageBox; public static synchronized String getApplicationDataFolder() { - return getApplicationDataFolder(System.getenv(), System.getProperties(), OS.get(), - AppSettings.getSceneBuilderVersion()); + return getApplicationDataFolder(OS.get()); + } + + static synchronized String getApplicationDataFolder(OS operatingSystem) { + return getApplicationDataFolder(System.getenv(), + System.getProperties(), + operatingSystem, + AppSettings.getSceneBuilderVersion()); } static synchronized String getApplicationDataFolder(Map sysenv, Properties system, @@ -107,9 +114,9 @@ public static synchronized String getUserLibraryFolder() { static synchronized String getUserLibraryFolder(OS operatingSystem) { if (userLibraryFolder == null) { if (OS.WINDOWS.equals(operatingSystem)) { - userLibraryFolder = getApplicationDataFolder() + "\\" + "Library"; // NOI18N + userLibraryFolder = getApplicationDataFolder(operatingSystem) + "\\" + "Library"; // NOI18N } else { - userLibraryFolder = getApplicationDataFolder() + "/" + "Library"; // NOI18N + userLibraryFolder = getApplicationDataFolder(operatingSystem) + "/" + "Library"; // NOI18N } } return userLibraryFolder; @@ -122,12 +129,16 @@ static synchronized String getUserLibraryFolder(OS operatingSystem) { * @return Directory path for Scene Builder logs */ public static synchronized String getLogFolder() { - return getLogFolder(System.getProperties()); + return getLogFolder(System.getProperties(), OS.get()); } - static synchronized String getLogFolder(Properties system) { + static synchronized String getLogFolder(Properties system, OS operatingSystem) { if (logsFolder == null) { - logsFolder = Paths.get(system.getProperty("user.home"), ".scenebuilder", "logs").toString(); //NOI18N + if (OS.WINDOWS.equals(operatingSystem)) { + logsFolder = system.getProperty("user.home") + "\\.scenebuilder\\logs"; //NOI18N + } else { + logsFolder = system.getProperty("user.home") + "/.scenebuilder/logs"; //NOI18N + } } return logsFolder; } @@ -196,10 +207,17 @@ private static synchronized boolean requestStartGeneric( } protected static String getMessageBoxFolder() { + return getMessageBoxFolder(OS.get()); + } + + protected static String getMessageBoxFolder(OS operatingSystem) { if (messageBoxFolder == null) { - messageBoxFolder = getApplicationDataFolder() + "/MB"; //NOI18N + if (OS.WINDOWS.equals(operatingSystem)) { + messageBoxFolder = getApplicationDataFolder() + "\\MB"; //NOI18N + } else { + messageBoxFolder = getApplicationDataFolder() + "/MB"; //NOI18N + } } - return messageBoxFolder; } diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java index 569df5754..497b9b25f 100644 --- a/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/AppPlatformTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022 Gluon and/or its affiliates. + * Copyright (c) 2016, 2024 Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * @@ -85,26 +85,23 @@ void that_library_path_is_subdir_of_appdata() { } @Test - @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.WINDOWS) void that_application_settings_directory_is_created_properly_on_windows() { - Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path appDir = Path.of(AppPlatform.getApplicationDataFolder(OS.WINDOWS)); Path expected = Path.of(System.getenv("APPDATA") + "\\Scene Builder\\" + AppSettings.getSceneBuilderVersion()); assertEquals(expected, appDir); } @Test - @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.LINUX) void that_application_settings_directory_is_created_properly_on_linux() { - Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path appDir = Path.of(AppPlatform.getApplicationDataFolder(OS.LINUX)); Path expected = Path .of(System.getProperty("user.home") + "/.scenebuilder/" + AppSettings.getSceneBuilderVersion()); assertEquals(expected, appDir); } @Test - @EnabledOnOs(value = org.junit.jupiter.api.condition.OS.MAC) void that_application_settings_directory_is_created_properly_on_mac() { - Path appDir = Path.of(AppPlatform.getApplicationDataFolder()); + Path appDir = Path.of(AppPlatform.getApplicationDataFolder(OS.MAC)); Path expected = Path.of(System.getProperty("user.home") + "/Library/Application Support/Scene Builder/" + AppSettings.getSceneBuilderVersion()); assertEquals(expected, appDir); @@ -122,7 +119,7 @@ void that_user_library_folder_resides_in_applications_data_folder() { void that_messagebox_folder_resides_in_applications_data_folder() { // init app data folder first as this is the basis AppPlatform.getApplicationDataFolder(testEnvironment, testProperties, OS.WINDOWS, "19.0.0-SNAPSHOT"); - Path messageBoxDir = Path.of(AppPlatform.getMessageBoxFolder()); + Path messageBoxDir = Path.of(AppPlatform.getMessageBoxFolder(OS.WINDOWS)); Path expectedDir = Path.of("C:\\Users\\UserName\\AppData\\Roaming\\Scene Builder\\19.0.0-SNAPSHOT\\MB"); assertEquals(expectedDir, messageBoxDir); } From 647ac20b0ee7c4d88e2f25666f70d407cdfe2159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20L=C3=B6ffler?= <22102800+Oliver-Loeffler@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:53:27 +0200 Subject: [PATCH 6/9] Update PreferencesController.java --- .../scenebuilder/app/preferences/PreferencesController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java index fa41db801..6c506860e 100644 --- a/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java +++ b/app/src/main/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022 Gluon and/or its affiliates. + * Copyright (c) 2016, 2024 Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * From e5e46c0fccd0ccc3402d34c93d9b8e7f106d299d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20L=C3=B6ffler?= <22102800+Oliver-Loeffler@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:56:09 +0200 Subject: [PATCH 7/9] Update PreferencesControllerTest.java --- .../scenebuilder/app/preferences/PreferencesControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java index c9e211e77..24c1b0159 100644 --- a/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/preferences/PreferencesControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022 Gluon and/or its affiliates. + * Copyright (c) 2016, 2024, Gluon and/or its affiliates. * Copyright (c) 2012, 2014, Oracle and/or its affiliates. * All rights reserved. Use is subject to license terms. * From fe345366ef1b7802e6dcfaa9e7e0e63deeab31a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20L=C3=B6ffler?= <22102800+Oliver-Loeffler@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:56:50 +0200 Subject: [PATCH 8/9] Update AppSettingsTest.java --- .../oracle/javafx/scenebuilder/app/util/AppSettingsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java index 44cc6e8f1..fb303b777 100644 --- a/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java +++ b/app/src/test/java/com/oracle/javafx/scenebuilder/app/util/AppSettingsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022, Gluon and/or its affiliates. + * Copyright (c) 2016, 2024, Gluon and/or its affiliates. * All rights reserved. Use is subject to license terms. * * This file is available and licensed under the following license: From f0e54e26ec7bd3d5fdec998611e5f0d20b17e3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20L=C3=B6ffler?= <22102800+Oliver-Loeffler@users.noreply.github.com> Date: Tue, 1 Oct 2024 00:01:34 +0200 Subject: [PATCH 9/9] Updated surefire version in reactor POM to make tests work with modular setup. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8d6cfc4f2..3d1f23bff 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M5 + 3.5.0 false 1