diff --git a/.classpath b/.classpath index f87555141cd38c4e3707e04dfce81daae0e5c312..678825e4930ef27f7d1a173e278398cf73e5e418 100644 --- a/.classpath +++ b/.classpath @@ -15,7 +15,6 @@ </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> <attributes> - <attribute name="module" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> @@ -24,5 +23,22 @@ <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> + <classpathentry kind="src" path="target/generated-sources/annotations"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + <attribute name="ignore_optional_problems" value="true"/> + <attribute name="m2e-apt" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + <attribute name="ignore_optional_problems" value="true"/> + <attribute name="m2e-apt" value="true"/> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/pom.xml b/pom.xml index ce6086cc42148c822dfc2eadfa2d340434d49acf..43692883a06accf3f455b0138e2a80cb5ab4c2dc 100644 --- a/pom.xml +++ b/pom.xml @@ -1,55 +1,99 @@ -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>MvnFXML</groupId> + <artifactId>maven-skeleton</artifactId> + <version>0.0.1-SNAPSHOT</version> + <properties> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> + <sonar.host.url>https://sonar.tcweb.org/</sonar.host.url> + </properties> + <build> + <plugins> + <plugin> + <!-- Java compilation --> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.8.1</version> + <configuration> + <release>11</release> + </configuration> + </plugin> + <plugin> + <!-- Sonar --> + <groupId>org.sonarsource.scanner.maven</groupId> + <artifactId>sonar-maven-plugin</artifactId> + <version>3.9.0.2155</version> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.8.4</version> + <executions> + <execution> + <id>prepare-agent</id> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <!-- JUnit --> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>3.0.0-M5</version> + </plugin> + <plugin> + <!-- JavaFX --> + <groupId>org.openjfx</groupId> + <artifactId>javafx-maven-plugin</artifactId> + <version>0.0.6</version> + <configuration> + <mainClass>fr.univlille.iutinfo.m3105.MainQ3</mainClass> + </configuration> + </plugin> + </plugins> + </build> - <groupId>fr.univlille.iutinfo.m3501</groupId> - <artifactId>TP2</artifactId> - <version>1.0</version> + <dependencies> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-controls</artifactId> + <version>12.0.2</version> + </dependency> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <source>11</source> - <target>11</target> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.22.0</version> - </plugin> - <plugin> - <groupId>org.openjfx</groupId> - <artifactId>javafx-maven-plugin</artifactId> - <version>0.0.4</version> - <configuration> - <mainClass>fr.univlille.iutinfo.m3105.Main</mainClass> - </configuration> - </plugin> - </plugins> - </build> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-fxml</artifactId> + <version>18-ea+2</version> + </dependency> - <dependencies> - <dependency> - <groupId>org.openjfx</groupId> - <artifactId>javafx-controls</artifactId> - <version>14</version> - </dependency> - <dependency> - <groupId>org.openjfx</groupId> - <artifactId>javafx-swing</artifactId> - <version>14</version> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <version>5.6.2</version> - <scope>test</scope> - </dependency> - </dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.6.2</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.testfx</groupId> + <artifactId>testfx-core</artifactId> + <version>4.0.16-alpha</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testfx</groupId> + <artifactId>testfx-junit5</artifactId> + <version>4.0.16-alpha</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.13.2</version> + <scope>test</scope> + </dependency> + </dependencies> </project> diff --git a/src/main/java/fr/univlille/iutinfo/m3105/JavaFXSimpleExample.java b/src/main/java/fr/univlille/iutinfo/m3105/JavaFXSimpleExample.java index 74413a1959b9afd351006985c096986c6eaaad89..9596fbf8b5fe9156d49c323bddd8e5cbf8203128 100644 --- a/src/main/java/fr/univlille/iutinfo/m3105/JavaFXSimpleExample.java +++ b/src/main/java/fr/univlille/iutinfo/m3105/JavaFXSimpleExample.java @@ -12,6 +12,7 @@ public class JavaFXSimpleExample extends Application { public void start(Stage stage) { Label l = new Label(welcomeMessage()); Scene scene = new Scene(new StackPane(l), 640, 480); + System.out.println(getClass().getResource("/toto.ply").getPath()); stage.setScene(scene); stage.show(); } diff --git a/src/main/java/fr/univlille/iutinfo/m3105/MainQ3.java b/src/main/java/fr/univlille/iutinfo/m3105/MainQ3.java index 5984536d1e4596dc59c8c8e6bcb153b678a12d95..cc721a82d6df07ca430525b0ca561f3e31f9309f 100644 --- a/src/main/java/fr/univlille/iutinfo/m3105/MainQ3.java +++ b/src/main/java/fr/univlille/iutinfo/m3105/MainQ3.java @@ -22,8 +22,8 @@ public class MainQ3 extends Application { Temperature tempN = new Temperature(Echelle.NEWTON); tempN.biconnectTo(tempF); new TextView( tempC); - new TextView( tempF); new SliderView( tempN); + new TextView( tempF); } } diff --git a/src/main/java/fr/univlille/iutinfo/m3105/viewQ1/TextView.java b/src/main/java/fr/univlille/iutinfo/m3105/viewQ1/TextView.java index 7d366831feb4edb3000efeb382d482fc3298d47e..7d90020168ec612001ca34b4d6a245f88476a4db 100644 --- a/src/main/java/fr/univlille/iutinfo/m3105/viewQ1/TextView.java +++ b/src/main/java/fr/univlille/iutinfo/m3105/viewQ1/TextView.java @@ -10,6 +10,7 @@ import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; public class TextView extends AbstractVue { @@ -58,8 +59,6 @@ public class TextView extends AbstractVue { return Double.parseDouble( saisie.getText()); } - public void setDisplayedValue(double val) { - saisie.setText( String.format("%.1f", val) ); - } + public void setDisplayedValue(double val) { saisie.setText( String.format("%.1f", val) ); } } diff --git a/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/AbstractVue.java b/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/AbstractVue.java index 351facad03b7a005c9e3fc2fa8afc35b78b08e64..29ad24b669f1913f97abdc6bea3d5c09d87699e3 100644 --- a/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/AbstractVue.java +++ b/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/AbstractVue.java @@ -42,6 +42,7 @@ public abstract class AbstractVue extends Stage implements Observer, ITemperatur @Override public void update(Subject subj, Object data) { + System.out.println("AbstractVue.update("+modele.getTemperature()); setDisplayedValue(modele.getTemperature()); } diff --git a/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/TextView.java b/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/TextView.java index fe0f54e4cab466b345f8f1e28826aec72d4a30b9..357d810bfc788192e715c4401004138a45e8ee10 100644 --- a/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/TextView.java +++ b/src/main/java/fr/univlille/iutinfo/m3105/viewQ3/TextView.java @@ -9,6 +9,7 @@ import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; public class TextView extends AbstractVue { @@ -56,6 +57,15 @@ public class TextView extends AbstractVue { } public void setDisplayedValue(double val) { + if (val > 25) { + saisie.setStyle("-fx-background-color:red;"); + } + else if (val < -5) { + saisie.setStyle("-fx-control-inner-background:blue;"); + } + else { + saisie.setStyle("-fx-background-color:white;"); + } saisie.setText( String.format("%.1f", val) ); } diff --git a/src/test/java/fr/univlille/iutinfo/m3105/q1/TestQ1_3.java b/src/test/java/fr/univlille/iutinfo/m3105/q1/TestQ1_3.java index e2fd6431cd7bb174b546243ec6989d3055f942c4..8ba8b2a7c21b26ffef678d14069e093f138e47ba 100644 --- a/src/test/java/fr/univlille/iutinfo/m3105/q1/TestQ1_3.java +++ b/src/test/java/fr/univlille/iutinfo/m3105/q1/TestQ1_3.java @@ -11,16 +11,16 @@ import fr.univlille.iutinfo.m3105.modelQ1.Thermogeekostat; import fr.univlille.iutinfo.m3105.viewQ1.ITemperatureView; import fr.univlille.iutinfo.m3105.viewQ1.TextView; import javafx.application.Platform; -import javafx.embed.swing.JFXPanel; +import org.testfx.framework.junit5.ApplicationTest; -public class TestQ1_3 { +public class TestQ1_3 extends ApplicationTest { /* JFXPanel is a component that initializes JavaFX without needing a javafx.application.Application * We need it to be able to create a view but we don't need the attribute after that - */ + * / @SuppressWarnings("unused") private JFXPanel fxPanel = new JFXPanel(); - + */ protected ITemperature model; protected ITemperatureView view; diff --git a/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_1.java b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_1.java index d14a9f303ca386ed7c4c181364fa9de706c22251..902f5c0055b510f7e52b633f7ecb38581c010b75 100644 --- a/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_1.java +++ b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_1.java @@ -10,16 +10,16 @@ import fr.univlille.iutinfo.m3105.modelQ2.Temperature; import fr.univlille.iutinfo.m3105.viewQ1.ITemperatureView; import fr.univlille.iutinfo.m3105.viewQ3.TextView; import javafx.application.Platform; -import javafx.embed.swing.JFXPanel; +import org.testfx.framework.junit5.ApplicationTest; -public class TestQ3_1 { +public class TestQ3_1 extends ApplicationTest { public static final double DELTA = 0.005; // rounding to 1/100 /* JFXPanel is a component that initializes JavaFX without needing a javafx.application.Application * We need it to be able to create a view but we don't need the attribute after that */ @SuppressWarnings("unused") - private JFXPanel fxPanel = new JFXPanel(); + //private JFXPanel fxPanel = new JFXPanel(); protected Temperature model; protected ITemperatureView view; diff --git a/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_2.java b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_2.java index bdd064ac188b686a3b178c223f5aea06f0852a16..d0fef624c1796ef485813081a2c9bb5ddf271112 100644 --- a/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_2.java +++ b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_2.java @@ -11,17 +11,11 @@ import fr.univlille.iutinfo.m3105.modelQ2.Temperature; import fr.univlille.iutinfo.m3105.viewQ1.ITemperatureView; import fr.univlille.iutinfo.m3105.viewQ3.TextView; import javafx.application.Platform; -import javafx.embed.swing.JFXPanel; +import org.testfx.framework.junit5.ApplicationTest; -public class TestQ3_2 { +public class TestQ3_2 extends ApplicationTest { public static final double DELTA = 0.005; // rounding to 1/100 - /* JFXPanel is a component that initializes JavaFX without needing a javafx.application.Application - * We need it to be able to create a IVueThermogeekostat but we don't need the attribute after that - */ - @SuppressWarnings("unused") - private JFXPanel fxPanel = new JFXPanel(); - protected Temperature modelC; protected ITemperatureView viewC; diff --git a/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_3.java b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_3.java new file mode 100644 index 0000000000000000000000000000000000000000..4c48d96f53fa76a00f4513a1db8fdc4ef8a115cd --- /dev/null +++ b/src/test/java/fr/univlille/iutinfo/m3105/q3/TestQ3_3.java @@ -0,0 +1,50 @@ +package fr.univlille.iutinfo.m3105.q3; + +import fr.univlille.iutinfo.m3105.MainQ3; +import fr.univlille.iutinfo.m3105.modelQ2.Echelle; +import fr.univlille.iutinfo.m3105.modelQ2.Temperature; +import fr.univlille.iutinfo.m3105.viewQ3.TextView; +import javafx.scene.control.TextField; +import javafx.stage.Stage; +import org.junit.jupiter.api.BeforeEach; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.testfx.api.FxAssert; +import org.testfx.api.FxRobot; +import org.testfx.framework.junit5.ApplicationExtension; +import org.testfx.framework.junit5.ApplicationTest; +import org.testfx.matcher.control.TextInputControlMatchers; + + +@ExtendWith(ApplicationExtension.class) +public class TestQ3_3 /*extends ApplicationTest */{ + + @BeforeEach + public void setup() throws Exception { + ApplicationTest.launch(fr.univlille.iutinfo.m3105.MainQ3.class); + } + + //@ Start + public void start(Stage stage) throws Exception { + System.err.println("in START !!!"); + Temperature temp = new Temperature(Echelle.CELSIUS); + temp.setTemperature(18.0); + + new TextView(temp).show(); + } + + + @Test + public void test1(FxRobot robot) { + //robot.clickOn(".button"); +/* + for (Window w : robot.listWindows()) { + System.out.println("window type:" + w.getClass().getName()); + } + Window wndw = wndw = robot.listWindows().get(2); + System.out.println("window 2 type:" + wndw.getClass().getName()); + */ + FxAssert.verifyThat( robot.lookup(node -> node instanceof TextField) , TextInputControlMatchers.hasText("18.0")); + } +}