diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index be140a6..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,35 +0,0 @@ -include: - - template: SAST.gitlab-ci.yml - -default: - tags: ['docker-exec'] - - -image: maven:3.9.6-eclipse-temurin-21-jammy -variables: - MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode" - MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dmaven.artifact.threads=50" -cache: - paths: - - .m2/repository/ -junit tests: - stage: test - script: - - mvn test - allow_failure: false - artifacts: - expire_in: 1 week - reports: - junit: - - target/surefire-reports/TEST-*.xml - -script tests: - stage: test - script: - - ./build-project.sh - allow_failure: false - artifacts: - expire_in: 1 week - reports: - junit: - - target/surefire-reports/TEST-*.xml \ No newline at end of file diff --git a/build-project.sh b/build-project.sh index 1c3edee..c0a8d6f 100755 --- a/build-project.sh +++ b/build-project.sh @@ -1,3 +1,5 @@ #!/bin/bash +echo "Build" +mvn clean compile echo "RUN JUnit Tests" -mvn clean test \ No newline at end of file +mvn clean test diff --git a/pom.xml b/pom.xml index 7775e6f..6c76b08 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,14 @@ ${junit.version} test + + org.testfx + testfx-junit5 + 4.0.17 + test + + + diff --git a/src/main/java/de/hsfulda/onses/App.java b/src/main/java/de/hsfulda/onses/App.java index 8712287..bda0c20 100644 --- a/src/main/java/de/hsfulda/onses/App.java +++ b/src/main/java/de/hsfulda/onses/App.java @@ -1,7 +1,7 @@ package de.hsfulda.onses; import de.hsfulda.onses.controllers.AppController; -import de.hsfulda.onses.models.Game; +import de.hsfulda.onses.services.GameService; import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; @@ -9,9 +9,9 @@ import javafx.stage.Stage; public class App extends Application { @Override public void start(Stage stage) throws Exception { - final AppController appController = new AppController(new Game()); + final AppController appController = new AppController(new GameService(), stage); - stage.setTitle("Onses - Uno Game"); + stage.setTitle("Onses - Uno"); stage.setScene(new Scene(appController.render())); stage.show(); } diff --git a/src/main/java/de/hsfulda/onses/controllers/AppController.java b/src/main/java/de/hsfulda/onses/controllers/AppController.java index 5f8a4cc..d2e0b80 100644 --- a/src/main/java/de/hsfulda/onses/controllers/AppController.java +++ b/src/main/java/de/hsfulda/onses/controllers/AppController.java @@ -2,27 +2,38 @@ package de.hsfulda.onses.controllers; import de.hsfulda.onses.Main; import de.hsfulda.onses.models.Game; +import de.hsfulda.onses.services.GameService; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; +import javafx.scene.Scene; import javafx.scene.control.Button; +import javafx.stage.Stage; import java.io.IOException; import java.util.Objects; public class AppController implements Controller { - private final Game game; + private final GameService gameService; + private final Stage stage; - public AppController(Game game) { - this.game = game; + public AppController(GameService gameService, Stage stage) { + this.gameService = gameService; + this.stage = stage; } @Override public Parent render() throws IOException { - final Parent parent = FXMLLoader.load(Main.class.getResource("views/app.fxml")); + GameController gameController = new GameController(gameService); + final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/app.fxml"))); Button button = (Button) parent.lookup("#startGameBtn"); button.setOnAction(e -> { - System.out.println("Pressed"); + try { + stage.setScene(new Scene(gameController.render())); + stage.setTitle("Onses - Uno Game"); + } catch (IOException ex) { + throw new RuntimeException(ex); + } }); return parent; } diff --git a/src/main/java/de/hsfulda/onses/controllers/CardController.java b/src/main/java/de/hsfulda/onses/controllers/CardController.java new file mode 100644 index 0000000..0f9ca86 --- /dev/null +++ b/src/main/java/de/hsfulda/onses/controllers/CardController.java @@ -0,0 +1,57 @@ +package de.hsfulda.onses.controllers; + +import de.hsfulda.onses.Main; +import de.hsfulda.onses.models.Card; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Label; +import javafx.scene.layout.Pane; + +import java.io.IOException; +import java.util.Objects; + +public class CardController implements Controller { + + private Card card; + + public CardController(Card card) { + this.card = card; + } + @Override + public Parent render() throws IOException { + final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/card.fxml"))); + final Pane mainPane = (Pane) parent.lookup("#cardPane"); + final Label cardName = (Label) parent.lookup("#labelName"); + + switch(card.getColor()) { + case RED -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: red")); + case BLUE -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: blue")); + case GREEN -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: green")); + case YELLOW -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: yellow")); + default -> mainPane.setStyle(addStyle(mainPane.getStyle(), "-fx-background-color: black")); + } + + switch(card.getValue()) { + case ONE -> cardName.setText("1"); + case TWO -> cardName.setText("2"); + case THREE -> cardName.setText("3"); + case FOUR -> cardName.setText("4"); + case FIVE -> cardName.setText("5"); + case SIX -> cardName.setText("6"); + case SEVEN -> cardName.setText("7"); + case EIGHT -> cardName.setText("8"); + case NINE -> cardName.setText("9"); + case SKIP -> cardName.setText("skip player"); + case CHOOSE -> cardName.setText("wish card"); + case DRAWTWO -> cardName.setText("+2"); + case REVERSE -> cardName.setText("reverse"); + } + + + return parent; + } + + private String addStyle(String oldStyle, String newStyle) { + return oldStyle + "; " + newStyle; + } +} diff --git a/src/main/java/de/hsfulda/onses/controllers/GameController.java b/src/main/java/de/hsfulda/onses/controllers/GameController.java new file mode 100644 index 0000000..2da4cb3 --- /dev/null +++ b/src/main/java/de/hsfulda/onses/controllers/GameController.java @@ -0,0 +1,48 @@ +package de.hsfulda.onses.controllers; + +import de.hsfulda.onses.Main; +import de.hsfulda.onses.models.Card; +import de.hsfulda.onses.models.Game; +import de.hsfulda.onses.services.GameService; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.control.Button; +import javafx.scene.layout.Pane; + +import java.io.IOException; +import java.util.Objects; + +public class GameController implements Controller { + private final GameService gameService; + private final Game game; + public GameController(GameService gameService) { + this.gameService = gameService; + this.game = gameService.getGame(); + } + @Override + public Parent render() throws IOException { + final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/game.fxml"))); + final Pane lastPlayedCardPane = (Pane) parent.lookup("#lastPlayedCardPane"); + + final Button playButton = (Button) parent.lookup("#playCardBtn"); + CardController lastPlayedCardController = new CardController(new Card().setValue(Card.Value.FIVE).setColor(Card.Color.BLUE)); + + game.listeners().addPropertyChangeListener(Game.PROPERTY_LAST_PLAYED_CARD, e -> { + lastPlayedCardPane.getChildren().removeAll(); + try { + lastPlayedCardPane.getChildren().add(new CardController((Card) e.getNewValue()).render()); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + }); + + playButton.setOnAction(e -> { + gameService.playCard(new Card().setColor(Card.Color.GREEN).setValue(Card.Value.ONE)); + }); + + + lastPlayedCardPane.getChildren().add(lastPlayedCardController.render()); + + return parent; + } +} diff --git a/src/main/java/de/hsfulda/onses/controllers/PlayerController.java b/src/main/java/de/hsfulda/onses/controllers/PlayerController.java new file mode 100644 index 0000000..7cdb72f --- /dev/null +++ b/src/main/java/de/hsfulda/onses/controllers/PlayerController.java @@ -0,0 +1,17 @@ +package de.hsfulda.onses.controllers; + +import de.hsfulda.onses.Main; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; + +import java.io.IOException; +import java.util.Objects; + +public class PlayerController implements Controller { + @Override + public Parent render() throws IOException { + final Parent parent = FXMLLoader.load(Objects.requireNonNull(Main.class.getResource("views/player.fxml"))); + + return parent; + } +} diff --git a/src/main/resources/de/hsfulda/onses/views/app.fxml b/src/main/resources/de/hsfulda/onses/views/app.fxml index 7facd52..7205ca5 100644 --- a/src/main/resources/de/hsfulda/onses/views/app.fxml +++ b/src/main/resources/de/hsfulda/onses/views/app.fxml @@ -5,15 +5,14 @@ - - + - + diff --git a/src/main/resources/de/hsfulda/onses/views/player.fxml b/src/main/resources/de/hsfulda/onses/views/player.fxml new file mode 100644 index 0000000..fd33361 --- /dev/null +++ b/src/main/resources/de/hsfulda/onses/views/player.fxml @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/src/test/java/de/hsfulda/onses/ExampleTest.java b/src/test/java/de/hsfulda/onses/ExampleTest.java deleted file mode 100644 index d4e9302..0000000 --- a/src/test/java/de/hsfulda/onses/ExampleTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.hsfulda.onses; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - -public class ExampleTest { - @Test - @DisplayName("Example Test") - public void exampleTest() { - int test = 1 + 1; - assertEquals(2, test); - } -} \ No newline at end of file diff --git a/src/test/java/de/hsfulda/onses/GuiTest.java b/src/test/java/de/hsfulda/onses/GuiTest.java new file mode 100644 index 0000000..845c004 --- /dev/null +++ b/src/test/java/de/hsfulda/onses/GuiTest.java @@ -0,0 +1,32 @@ +package de.hsfulda.onses; + +import javafx.stage.Stage; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.testfx.api.FxAssert; +import org.testfx.framework.junit5.ApplicationTest; +import static org.junit.jupiter.api.Assertions.*; +import static org.testfx.matcher.control.LabeledMatchers.*; + +public class GuiTest extends ApplicationTest { + private Stage stage; + + @Override + public void start(Stage stage) throws Exception { + this.stage = stage; + new App().start(stage); + } + + @Test + @DisplayName("Check Window Title") + void checkWindowsTitle() { + assertEquals("Onses - Uno", stage.getTitle()); + } + + @Test + @DisplayName("Check if window Switch is working") + void checkSceneSwitch() { + clickOn("#startGameBtn"); + assertEquals("Onses - Uno Game", stage.getTitle()); + } +}