From 64119975937c9bc2e4908edb7a06389c091ee248 Mon Sep 17 00:00:00 2001
From: arnaudlabourel <arnaud.labourel@univ-amu.fr>
Date: Wed, 25 Oct 2023 10:33:39 +0200
Subject: [PATCH] added test for grid

---
 build.gradle                                  | 12 +++--------
 .../app/SimulatorApplication.java             |  6 +++---
 .../{firefighter => }/app/SimulatorMain.java  |  2 +-
 .../controller/Controller.java                | 18 ++++++++---------
 .../controller/PersistentToggleGroup.java     |  2 +-
 .../java/{firefighter => }/model/Board.java   |  4 ++--
 .../model/FirefighterBoard.java               |  8 ++++++--
 .../{firefighter => }/model/ModelElement.java |  2 +-
 src/main/java/module-info.java                |  8 ++++----
 .../java/{firefighter => }/util/Position.java |  2 +-
 .../view/FirefighterGrid.java                 | 14 ++++++-------
 .../java/{firefighter => }/view/Grid.java     | 20 +++++++++++++++----
 .../{firefighter => }/view/ViewElement.java   |  2 +-
 .../{firefighter => }/view/DarkTheme.css      |  0
 .../{firefighter => }/view/view.fxml          |  4 ++--
 .../model/FirefighterBoardTest.java           | 12 ++++++++++-
 src/test/java/view/FirefighterGridTest.java   | 20 +++++++++++++++++++
 17 files changed, 87 insertions(+), 49 deletions(-)
 rename src/main/java/{firefighter => }/app/SimulatorApplication.java (92%)
 rename src/main/java/{firefighter => }/app/SimulatorMain.java (82%)
 rename src/main/java/{firefighter => }/controller/Controller.java (91%)
 rename src/main/java/{firefighter => }/controller/PersistentToggleGroup.java (96%)
 rename src/main/java/{firefighter => }/model/Board.java (96%)
 rename src/main/java/{firefighter => }/model/FirefighterBoard.java (97%)
 rename src/main/java/{firefighter => }/model/ModelElement.java (64%)
 rename src/main/java/{firefighter => }/util/Position.java (65%)
 rename src/main/java/{firefighter => }/view/FirefighterGrid.java (86%)
 rename src/main/java/{firefighter => }/view/Grid.java (59%)
 rename src/main/java/{firefighter => }/view/ViewElement.java (88%)
 rename src/main/resources/{firefighter => }/view/DarkTheme.css (100%)
 rename src/main/resources/{firefighter => }/view/view.fxml (95%)
 rename src/test/java/{firefighter => }/model/FirefighterBoardTest.java (66%)
 create mode 100644 src/test/java/view/FirefighterGridTest.java

diff --git a/build.gradle b/build.gradle
index 0f1ef0d..f51eff2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -17,9 +17,7 @@ repositories {
 }
 
 dependencies {
-    testRuntimeOnly("org.junit.platform:junit-platform-launcher") {
-        because("Only needed to run tests in a version of IntelliJ IDEA that bundles older versions")
-    }
+    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
     testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
     testImplementation("org.assertj:assertj-core:3.24.2")
     testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
@@ -30,11 +28,7 @@ test {
 }
 
 application {
-    mainClass.set("firefighter.app.SimulatorMain")
+    mainClass.set("app.SimulatorMain")
 }
 
-tasks {
-    shadowJar {
-        exclude("module-info.class")
-    }
-}
+
diff --git a/src/main/java/firefighter/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
similarity index 92%
rename from src/main/java/firefighter/app/SimulatorApplication.java
rename to src/main/java/app/SimulatorApplication.java
index b4392e2..6b009e4 100644
--- a/src/main/java/firefighter/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -1,6 +1,6 @@
-package firefighter.app;
+package app;
 
-import firefighter.controller.Controller;
+import controller.Controller;
 import javafx.application.Platform;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
@@ -11,7 +11,7 @@ import java.io.IOException;
 import java.net.URL;
 
 public class SimulatorApplication extends javafx.application.Application {
-  private static final String VIEW_RESOURCE_PATH = "/firefighter/view/view.fxml";
+  private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
   private static final String APP_NAME = "Firefighter simulator";
   private static final int ROW_COUNT = 20;
   private static final int COLUMN_COUNT = 20;
diff --git a/src/main/java/firefighter/app/SimulatorMain.java b/src/main/java/app/SimulatorMain.java
similarity index 82%
rename from src/main/java/firefighter/app/SimulatorMain.java
rename to src/main/java/app/SimulatorMain.java
index 18533e3..f2e49f2 100644
--- a/src/main/java/firefighter/app/SimulatorMain.java
+++ b/src/main/java/app/SimulatorMain.java
@@ -1,4 +1,4 @@
-package firefighter.app;
+package app;
 
 public class SimulatorMain {
   public static void main(String[] args){
diff --git a/src/main/java/firefighter/controller/Controller.java b/src/main/java/controller/Controller.java
similarity index 91%
rename from src/main/java/firefighter/controller/Controller.java
rename to src/main/java/controller/Controller.java
index 69d1470..2a60897 100644
--- a/src/main/java/firefighter/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -1,4 +1,4 @@
-package firefighter.controller;
+package controller;
 
 import javafx.animation.Animation;
 import javafx.animation.KeyFrame;
@@ -12,12 +12,12 @@ import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.util.Duration;
 import javafx.util.Pair;
-import firefighter.model.Board;
-import firefighter.model.ModelElement;
-import firefighter.model.FirefighterBoard;
-import firefighter.util.Position;
-import firefighter.view.FirefighterGrid;
-import firefighter.view.ViewElement;
+import model.Board;
+import model.ModelElement;
+import model.FirefighterBoard;
+import util.Position;
+import view.Grid;
+import view.ViewElement;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,7 +38,7 @@ public class Controller {
   @FXML
   private ToggleButton playToggleButton;
   @FXML
-  private FirefighterGrid grid;
+  private Grid<ViewElement> grid;
   private Timeline timeline;
   private Board<List<ModelElement>> board;
 
@@ -125,7 +125,7 @@ public class Controller {
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
                                 int rowCount, int initialFireCount, int initialFirefighterCount) {
-    grid.initialize(squareWidth, squareHeight, columnCount, rowCount);
+    grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
     this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
     repaintGrid();
   }
diff --git a/src/main/java/firefighter/controller/PersistentToggleGroup.java b/src/main/java/controller/PersistentToggleGroup.java
similarity index 96%
rename from src/main/java/firefighter/controller/PersistentToggleGroup.java
rename to src/main/java/controller/PersistentToggleGroup.java
index a7e930b..7c2c4b5 100644
--- a/src/main/java/firefighter/controller/PersistentToggleGroup.java
+++ b/src/main/java/controller/PersistentToggleGroup.java
@@ -1,4 +1,4 @@
-package firefighter.controller;
+package controller;
 
 import javafx.collections.ListChangeListener.Change;
 import javafx.scene.control.Toggle;
diff --git a/src/main/java/firefighter/model/Board.java b/src/main/java/model/Board.java
similarity index 96%
rename from src/main/java/firefighter/model/Board.java
rename to src/main/java/model/Board.java
index e53a9dd..bb089a4 100644
--- a/src/main/java/firefighter/model/Board.java
+++ b/src/main/java/model/Board.java
@@ -1,6 +1,6 @@
-package firefighter.model;
+package model;
 
-import firefighter.util.Position;
+import util.Position;
 
 import java.util.List;
 
diff --git a/src/main/java/firefighter/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
similarity index 97%
rename from src/main/java/firefighter/model/FirefighterBoard.java
rename to src/main/java/model/FirefighterBoard.java
index 925a162..1e383a9 100644
--- a/src/main/java/firefighter/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -1,6 +1,6 @@
-package firefighter.model;
+package model;
 
-import firefighter.util.Position;
+import util.Position;
 
 import java.util.*;
 
@@ -143,6 +143,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
   @Override
   public void setState(List<ModelElement> state, Position position) {
+    firePositions.remove(position);
+    for (;;) {
+      if (!firefighterPositions.remove(position)) break;
+    }
     for(ModelElement element : state){
       switch (element){
         case FIRE -> firePositions.add(position);
diff --git a/src/main/java/firefighter/model/ModelElement.java b/src/main/java/model/ModelElement.java
similarity index 64%
rename from src/main/java/firefighter/model/ModelElement.java
rename to src/main/java/model/ModelElement.java
index ca8f16a..759eee5 100644
--- a/src/main/java/firefighter/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -1,4 +1,4 @@
-package firefighter.model;
+package model;
 
 public enum ModelElement {
   FIREFIGHTER, FIRE
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index c82befa..4c36d97 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,7 +2,7 @@ module firefighter {
   requires javafx.controls;
   requires javafx.fxml;
   requires javafx.graphics;
-  opens firefighter.controller to javafx.fxml;
-  exports firefighter.app;
-  opens firefighter.app to javafx.fxml;
-}
\ No newline at end of file
+  opens controller to javafx.fxml;
+  exports app;
+  opens app to javafx.fxml;
+}
diff --git a/src/main/java/firefighter/util/Position.java b/src/main/java/util/Position.java
similarity index 65%
rename from src/main/java/firefighter/util/Position.java
rename to src/main/java/util/Position.java
index b44a78a..31dc4c1 100644
--- a/src/main/java/firefighter/util/Position.java
+++ b/src/main/java/util/Position.java
@@ -1,4 +1,4 @@
-package firefighter.util;
+package util;
 
 public record Position(int row, int column) {
 
diff --git a/src/main/java/firefighter/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java
similarity index 86%
rename from src/main/java/firefighter/view/FirefighterGrid.java
rename to src/main/java/view/FirefighterGrid.java
index 6d9a61c..fdb7cda 100644
--- a/src/main/java/firefighter/view/FirefighterGrid.java
+++ b/src/main/java/view/FirefighterGrid.java
@@ -1,9 +1,9 @@
-package firefighter.view;
+package view;
 
 import javafx.scene.canvas.Canvas;
 import javafx.scene.paint.Color;
 import javafx.util.Pair;
-import firefighter.util.Position;
+import util.Position;
 
 import java.util.List;
 
@@ -35,21 +35,19 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
         paintLines();
     }
 
-    public int getColumnCount() {
+    public int columnCount() {
         return columnCount;
     }
 
-    public int getRowCount() {
+    public int rowCount() {
         return rowCount;
     }
 
     public FirefighterGrid(){
     }
 
-    public void initialize(int squareWidth,
-                           int squareHeight,
-                           int columnCount,
-                           int rowCount) {
+    @Override
+    public void setDimensions(int columnCount, int rowCount, int squareWidth, int squareHeight) {
         this.squareWidth = squareWidth;
         this.squareHeight = squareHeight;
         this.columnCount = columnCount;
diff --git a/src/main/java/firefighter/view/Grid.java b/src/main/java/view/Grid.java
similarity index 59%
rename from src/main/java/firefighter/view/Grid.java
rename to src/main/java/view/Grid.java
index 6b1d7fc..d87897b 100644
--- a/src/main/java/firefighter/view/Grid.java
+++ b/src/main/java/view/Grid.java
@@ -1,7 +1,7 @@
-package firefighter.view;
+package view;
 
 import javafx.util.Pair;
-import firefighter.util.Position;
+import util.Position;
 
 import java.util.List;
 
@@ -27,18 +27,30 @@ public interface Grid<E> {
    */
   void repaint(E[][] elements);
 
+  /**
+   * Set the dimensions of the grid to the specified column count, row count, square width, and square height.
+   * This method adjusts the dimensions of the grid to the given number of columns, number of rows, square width,
+   * and square height.
+   *
+   * @param columnCount The new number of columns in the grid.
+   * @param rowCount The new number of rows in the grid.
+   * @param squareWidth The width of each square within the grid.
+   * @param squareHeight The height of each square within the grid.
+   */
+  void setDimensions(int columnCount, int rowCount, int squareWidth, int squareHeight);
+
   /**
    * Get the number of columns in the grid.
    *
    * @return The number of columns in the grid.
    */
-  int getColumnCount();
+  int columnCount();
 
   /**
    * Get the number of rows in the grid.
    *
    * @return The number of rows in the grid.
    */
-  int getRowCount();
+  int rowCount();
 }
 
diff --git a/src/main/java/firefighter/view/ViewElement.java b/src/main/java/view/ViewElement.java
similarity index 88%
rename from src/main/java/firefighter/view/ViewElement.java
rename to src/main/java/view/ViewElement.java
index 0181e55..ffb7611 100644
--- a/src/main/java/firefighter/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -1,4 +1,4 @@
-package firefighter.view;
+package view;
 
 import javafx.scene.paint.Color;
 
diff --git a/src/main/resources/firefighter/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css
similarity index 100%
rename from src/main/resources/firefighter/view/DarkTheme.css
rename to src/main/resources/view/DarkTheme.css
diff --git a/src/main/resources/firefighter/view/view.fxml b/src/main/resources/view/view.fxml
similarity index 95%
rename from src/main/resources/firefighter/view/view.fxml
rename to src/main/resources/view/view.fxml
index cd4d2bd..3f19ac9 100644
--- a/src/main/resources/firefighter/view/view.fxml
+++ b/src/main/resources/view/view.fxml
@@ -3,14 +3,14 @@
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
-<?import firefighter.view.FirefighterGrid?>
+<?import view.FirefighterGrid?>
 
 <?import javafx.scene.control.ToggleButton?>
 <?import javafx.scene.control.Separator?>
 <?import javafx.scene.control.Label?>
 <HBox styleClass="background" stylesheets="@DarkTheme.css"
       xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
-      fx:controller="firefighter.controller.Controller">
+      fx:controller="controller.Controller">
   <VBox>
     <Separator maxHeight="-Infinity" maxWidth="-Infinity"
                prefHeight="24.0" prefWidth="200.0"/>
diff --git a/src/test/java/firefighter/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java
similarity index 66%
rename from src/test/java/firefighter/model/FirefighterBoardTest.java
rename to src/test/java/model/FirefighterBoardTest.java
index a9b794c..25cc8db 100644
--- a/src/test/java/firefighter/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FirefighterBoardTest.java
@@ -1,6 +1,7 @@
-package firefighter.model;
+package model;
 
 import org.junit.jupiter.api.Test;
+import util.Position;
 
 import java.util.List;
 
@@ -26,4 +27,13 @@ public class FirefighterBoardTest {
     }
     assertThat(board.stepNumber()).isEqualTo(10);
   }
+  @Test
+  void testGetState_afterSet(){
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
+    Position position = new Position(1,2);
+    assertThat(board.getState(position)).isEmpty();
+    board.setState(List.of(ModelElement.FIRE), position);
+    assertThat(board.getState(position)).containsExactly(ModelElement.FIRE);
+  }
+
 }
diff --git a/src/test/java/view/FirefighterGridTest.java b/src/test/java/view/FirefighterGridTest.java
new file mode 100644
index 0000000..4b45ebd
--- /dev/null
+++ b/src/test/java/view/FirefighterGridTest.java
@@ -0,0 +1,20 @@
+package view;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class FirefighterGridTest {
+  @Test
+  void testColumnCount(){
+    Grid<ViewElement> grid = new FirefighterGrid();
+    grid.setDimensions(20,10,10,10);
+    assertThat(grid.columnCount()).isEqualTo(20);
+  }
+  @Test
+  void testRowCount(){
+    Grid<ViewElement> grid = new FirefighterGrid();
+    grid.setDimensions(20,10,10,10);
+    assertThat(grid.rowCount()).isEqualTo(10);
+  }
+}
-- 
GitLab