diff --git a/PlayWall/pom.xml b/PlayWall/pom.xml index 27eb4dac3bfd7ce6ba6a491a8de05d78b14e2b40..60dad96caaea7bc7f3a0996b0d6a63b66d87286f 100644 --- a/PlayWall/pom.xml +++ b/PlayWall/pom.xml @@ -53,8 +53,33 @@ <artifactId>spring-expression</artifactId> <version>5.1.2.RELEASE</version> </dependency> - </dependencies> + <!--Testing--> + <dependency> + <groupId>org.testfx</groupId> + <artifactId>testfx-junit</artifactId> + <version>4.0.15-alpha</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.11.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testfx</groupId> + <artifactId>openjfx-monocle</artifactId> + <version>8u76-b04</version> <!-- jdk-9+181 for Java 9, jdk-11+26 for Java 11 --> + <scope>test</scope> + </dependency> + </dependencies> <build> <plugins> diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java index 1d1bb173c459a7988765091cc943ee3353619968..dd7c4b284f2ec8552615a770415affa7f64bc2c8 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadImpl.java @@ -260,7 +260,7 @@ public class PlayPadImpl implements PlayPad { try { server.connect(session.getKey()); } catch (IOException | WebSocketException e) { - e.printStackTrace(); + Logger.error(e); } catch (SessionNotExisitsException ignored) { } diff --git a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java index e18eb14424175d7ca90e15b7bfb36c2389bf1543..c61d5559d6145adc2e0e54e0a6c74e44004b39f5 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/main/java/de/tobias/playpad/PlayPadMain.java @@ -141,6 +141,12 @@ public class PlayPadMain extends Application implements LocalizationDelegate { PlayPadPlugin.setRegistryCollection(new RegistryCollectionImpl()); PlayPadPlugin.setServerHandler(new ServerHandlerImpl()); PlayPadPlugin.setCommandExecutorHandler(new CommandExecutorHandlerImpl()); + + /* + * Setup + */ + + impl.startup(Localization.getBundle(), new LoginViewController()); } @Override @@ -151,12 +157,6 @@ public class PlayPadMain extends Application implements LocalizationDelegate { PlayPadMain.stageIcon = Optional.of(stageIcon); Alerts.getInstance().setDefaultIcon(stageIcon); - /* - * Setup - */ - - impl.startup(Localization.getBundle(), new LoginViewController()); - // App Setup NativeApplication.sharedInstance().setDockIcon(new Image("gfx/Logo-large.png")); NativeApplication.sharedInstance().setAppearance(true); diff --git a/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java b/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java index fa0f568e3182f86684455fbdedf0fadc31001678..2adfc1041bb582c0e12a6c79fade32c8966eee0e 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java +++ b/PlayWall/src/main/java/de/tobias/playpad/server/ServerHandlerImpl.java @@ -24,9 +24,11 @@ public class ServerHandlerImpl implements ServerHandler { PlayPadImpl impl = PlayPadMain.getProgramInstance(); Application.Parameters parameters = impl.getParameters(); - Map<String, String> named = parameters.getNamed(); - if (named.containsKey(SERVER_PARAM)) { - url = named.get(SERVER_PARAM); + if (parameters != null) { + Map<String, String> named = parameters.getNamed(); + if (named.containsKey(SERVER_PARAM)) { + url = named.get(SERVER_PARAM); + } } server = new ServerImpl(url); diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java index f0433d760d52adc33a0ededea9c690785efce813..a0af515d98d066291f7fab3b8269e5993779236d 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/LaunchDialog.java @@ -57,28 +57,28 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> static final String IMAGE = "gfx/Logo-large.png"; @FXML - private Label infoLabel; + Label infoLabel; @FXML - private ImageView imageView; + ImageView imageView; @FXML - private ListView<ProjectReference> projectListView; + ListView<ProjectReference> projectListView; @FXML - private Button newProjectButton; + Button newProjectButton; @FXML - private Button importProjectButton; + Button importProjectButton; @FXML - private Button convertProjectButton; + Button convertProjectButton; @FXML - private Button openButton; + Button openButton; @FXML - private Button deleteButton; + Button deleteButton; @FXML - private Label cloudLabel; - private FontIcon cloudIcon; + Label cloudLabel; + FontIcon cloudIcon; public LaunchDialog(Stage stage) { load("view/dialog", "LaunchDialog", PlayPadMain.getUiResourceBundle()); @@ -172,13 +172,14 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> } @FXML - private void newProjectButtonHandler(ActionEvent event) { + void newProjectButtonHandler(ActionEvent event) { + Logger.info("einfo"); ProjectNewDialog dialog = new ProjectNewDialog(getContainingWindow()); dialog.showAndWait().ifPresent(this::launchProject); } @FXML - private void importProjectButtonHandler(ActionEvent event) { + void importProjectButtonHandler(ActionEvent event) { FileChooser chooser = new FileChooser(); String extensionName = Localization.getString(Strings.File_Filter_ZIP); @@ -199,7 +200,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> } @FXML - private void convertProjectButtonHandler(ActionEvent event) { + void convertProjectButtonHandler(ActionEvent event) { try { List<ProjectReference> projects = ConverterV6.loadProjectReferences(); ChoiceDialog<ProjectReference> dialog = new ChoiceDialog<>(null, projects); @@ -230,12 +231,12 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> } @FXML - private void openButtonHandler(ActionEvent event) { + void openButtonHandler(ActionEvent event) { launchProject(getSelectedProject()); } @FXML - private void deleteButtonHandler(ActionEvent event) { + void deleteButtonHandler(ActionEvent event) { if (getSelectedProject() != null) { ProjectReference ref = getSelectedProject(); @@ -260,7 +261,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> } @FXML - private void cloudIconClicked(MouseEvent event) { + void cloudIconClicked(MouseEvent event) { Server server = PlayPadPlugin.getServerHandler().getServer(); if (server.getConnectionState() == ConnectionState.DISCONNECTED) { SessionDelegate sessionDelegate = new LoginViewController(); @@ -268,7 +269,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> try { server.connect(session.getKey()); } catch (IOException | WebSocketException e) { - e.printStackTrace(); + Logger.error(e); } catch (SessionNotExisitsException ignored) { Logger.warning("Session not exists"); } @@ -310,7 +311,7 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> Project project = loader.load(); PlayPadMain.getProgramInstance().openProject(project, e -> getStageContainer().ifPresent(NVCStage::close)); } catch (ProfileNotFoundException e) { - e.printStackTrace(); + Logger.error(e); showErrorMessage(getString(Strings.Error_Profile_NotFound, ref.getProfileReference(), e.getLocalizedMessage())); // Choose new profile @@ -322,10 +323,10 @@ public class LaunchDialog extends NVC implements ChangeListener<ConnectionState> ref.setProfileReference(profile); } catch (ProjectReader.ProjectReaderDelegate.ProfileAbortException ignored) { } catch (ProjectNotFoundException e) { - e.printStackTrace(); + Logger.error(e); showErrorMessage(getString(Strings.Error_Project_NotFound, ref, e.getLocalizedMessage())); } catch (Exception e) { - e.printStackTrace(); + Logger.error(e); showErrorMessage(getString(Strings.Error_Project_Open, ref, e.getLocalizedMessage())); } } diff --git a/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java b/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e0c6cd130d60b3a91b07231ae7357f80333470d8 --- /dev/null +++ b/PlayWall/src/test/java/de/tobias/playpad/viewcontroller/LaunchDialogTest.java @@ -0,0 +1,42 @@ +package de.tobias.playpad.viewcontroller; + +import de.thecodelabs.logger.LogLevelFilter; +import de.thecodelabs.logger.Logger; +import de.thecodelabs.utils.application.App; +import de.thecodelabs.utils.application.ApplicationUtils; +import de.thecodelabs.utils.application.container.PathType; +import de.tobias.playpad.PlayPadMain; +import de.tobias.playpad.update.VersionUpdater; +import javafx.stage.Stage; +import org.junit.Before; +import org.junit.Test; +import org.testfx.framework.junit.ApplicationTest; + +import static org.testfx.assertions.api.Assertions.assertThat; + +public class LaunchDialogTest extends ApplicationTest { + + private LaunchDialog launchDialog; + + @Before + public void init() { + App app = ApplicationUtils.registerMainApplication(PlayPadMain.class); + ApplicationUtils.registerUpdateSercive(new VersionUpdater()); + + Logger.init(app.getPath(PathType.LOG)); + Logger.setLevelFilter(LogLevelFilter.DEBUG); + + PlayPadMain playPadMain = new PlayPadMain(); + playPadMain.init(); + } + + @Override + public void start(Stage stage) { + launchDialog = new LaunchDialog(stage); + } + + @Test + public void testNewDialogTest() { + assertThat(lookup("#newProjectButton").queryButton()).isNotNull(); + } +} diff --git a/PlayWall/src/test/resources/config/application.yml b/PlayWall/src/test/resources/config/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..e4577d54ca36b96e489d83296d47c773d25174d1 --- /dev/null +++ b/PlayWall/src/test/resources/config/application.yml @@ -0,0 +1,19 @@ +name: "PlayWall" +version: "6.2.0" +build: 40 +identifier: "de.tobias.playpad.v7.test" +date: "2019-02-04" + +main: "de.tobias.playpad.PlayPadMain" +author: "Tobias Ullerich" + +basePath: "PlayWall" + +serverBaseURL: "https://playwall.thecodelabs.de/files" + +userInfo: + Website: "https://playwall.thecodelabs.de/" + Repository: "https://thecodelabs.de/PlayWall/PlayWallDesktop" + ChangelogURL: "https://playwall.thecodelabs.de/php/roadmap/index.php?id=4" + Server: "playwall.thecodelabs.de:8090" + AccountRegister: "https://playwall.thecodelabs.de/php/index.php" diff --git a/PlayWall/src/test/resources/config/libLogger.yml b/PlayWall/src/test/resources/config/libLogger.yml new file mode 100644 index 0000000000000000000000000000000000000000..3c309583f9c0021ad159f12e2b777c4e1aa4ccac --- /dev/null +++ b/PlayWall/src/test/resources/config/libLogger.yml @@ -0,0 +1,20 @@ +color: + enable: true + info: "GREEN" + warn: "YELLOW" + error: "RED" + time: "BLUE" + detail: "CYAN" + message: "RESET" + +dateFormatterPattern: "dd.MM.YY HH:mm:ss" + +defaultOutLevel: "DEBUG" +defaultErrLevel: "ERROR" + +showShortPackageName: true +showClassName: true +showMethodName: true +showLineNumber: true + +ignoreStandardStream: false \ No newline at end of file diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java b/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java index 8af34df2f31297cddcda024c415939141232c0ce..839ad9c7e91e42e2a45affd1cd60b57722df0cdf 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/project/ref/ProjectReferenceManager.java @@ -1,5 +1,6 @@ package de.tobias.playpad.project.ref; +import de.thecodelabs.logger.Logger; import de.thecodelabs.storage.xml.XMLHandler; import de.thecodelabs.utils.application.ApplicationUtils; import de.thecodelabs.utils.application.container.PathType; @@ -144,8 +145,8 @@ public final class ProjectReferenceManager { if (!loadedProjectOverview) try { loadProjects(); - } catch (DocumentException | IOException e) { - e.printStackTrace(); + } catch (IOException e) { + Logger.error(e); } return projects; } @@ -155,46 +156,50 @@ public final class ProjectReferenceManager { public static final String PROJECT_ELEMENT = "Project"; private static final String ROOT_ELEMENT = "Settings"; - public static void loadProjects() throws DocumentException, IOException { - Path path = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, FILE_NAME); - if (Files.exists(path)) { - XMLHandler<ProjectReference> loader = new XMLHandler<>(path); - projects = loader.loadElements(PROJECT_ELEMENT, new ProjectReferenceSerializer()); - } - - Server server = PlayPadPlugin.getServerHandler().getServer(); + public static void loadProjects() throws IOException { try { - List<ProjectReference> syncedProjects = server.getSyncedProjects(); - - // Add new synced projects in client - for (ProjectReference project : syncedProjects) { - if (projects.contains(project)) { - project.setSync(true); - } else { - projects.add(project); - } + Path path = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, FILE_NAME); + if (Files.exists(path)) { + XMLHandler<ProjectReference> loader = new XMLHandler<>(path); + projects = loader.loadElements(PROJECT_ELEMENT, new ProjectReferenceSerializer()); } - // Remove old projects from client - List<ProjectReference> removeProjects = new ArrayList<>(); + Server server = PlayPadPlugin.getServerHandler().getServer(); + try { + List<ProjectReference> syncedProjects = server.getSyncedProjects(); + + // Add new synced projects in client + for (ProjectReference project : syncedProjects) { + if (projects.contains(project)) { + project.setSync(true); + } else { + projects.add(project); + } + } + + // Remove old projects from client + List<ProjectReference> removeProjects = new ArrayList<>(); - for (ProjectReference project : projects) { - if (project.isSync()) { - if (!syncedProjects.contains(project)) { - removeProjects.add(project); + for (ProjectReference project : projects) { + if (project.isSync()) { + if (!syncedProjects.contains(project)) { + removeProjects.add(project); + } } } - } - for (ProjectReference project : removeProjects) { - removeProject(project); + for (ProjectReference project : removeProjects) { + removeProject(project); + } + + } catch (IOException | LoginException e) { + Logger.error(e); } - } catch (IOException | LoginException e) { - e.printStackTrace(); + saveProjects(); + loadedProjectOverview = true; + } catch (DocumentException ex) { + throw new RuntimeException(ex); } - - saveProjects(); - loadedProjectOverview = true; } public static void saveProjects() throws IOException { @@ -216,12 +221,11 @@ public final class ProjectReferenceManager { if (!loadedProjectOverview) try { loadProjects(); - } catch (DocumentException | IOException e) { - e.printStackTrace(); + } catch (IOException e) { + Logger.error(e); } - List<ProjectReference> items = new ArrayList<>(); - items.addAll(projects); + List<ProjectReference> items = new ArrayList<>(projects); items.sort((o1, o2) -> Long.compare(o2.getLastModified(), o1.getLastModified())); return items; }