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"));
+    }
+}