diff --git a/pom.xml b/pom.xml
index 06f3411..83a90f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -235,6 +235,29 @@
+
+ org.pitest
+ pitest-maven
+ 1.6.2
+
+
+ org.pitest
+ pitest-junit5-plugin
+ 0.12
+
+
+ io.github.wmaarts
+ pitest-mutation-testing-elements-plugin
+ 0.3.1
+
+
+
+
+ HTML2
+
+
+
+
diff --git a/src/main/java/fr/umontp/edt/EmploiDuTemps.java b/src/main/java/fr/umontp/edt/EmploiDuTemps.java
index 0efe13d..c674be9 100644
--- a/src/main/java/fr/umontp/edt/EmploiDuTemps.java
+++ b/src/main/java/fr/umontp/edt/EmploiDuTemps.java
@@ -123,7 +123,7 @@ private File getFichierIcsDepuisLienIcal() {
}
@Override
- public void actualiser() {
+ public synchronized void actualiser() {
File fichierIcs = getFichierIcsDepuisLienIcal();
Calendar calendar = convertieFichierIcsEnCalendar(fichierIcs);
ArrayList coursList = new ArrayList<>();
diff --git a/src/main/java/fr/umontp/edt/Professeur.java b/src/main/java/fr/umontp/edt/Professeur.java
index 0861166..26abd35 100644
--- a/src/main/java/fr/umontp/edt/Professeur.java
+++ b/src/main/java/fr/umontp/edt/Professeur.java
@@ -1,6 +1,6 @@
package fr.umontp.edt;
-import java.util.Locale;
+import fr.umontp.edt.outils.OutilsProfesseur;
/**
* Professeur est la classe représentant un professeur au sein de l'emploi du
@@ -17,9 +17,10 @@
*
*
* @see RepertoireProfesseur
+ * @see OutilsProfesseur
*
* @author MathieuSoysal
- * @version 1.0.0
+ * @version 1.0.1
*/
public class Professeur {
private String denomination;
@@ -36,15 +37,7 @@ public class Professeur {
String[] infosProf = nomPrenom.split(" ");
nom = infosProf[0];
prenom = infosProf[1];
- denomination = formater(nom, prenom);
- }
-
- static String formater(String nom, String prenom) {
- return formater(nom + " " + prenom);
- }
-
- static String formater(String nomPrenom) {
- return nomPrenom.toUpperCase(Locale.FRANCE).replaceAll("[^A-Z ]", " ");
+ denomination = OutilsProfesseur.formater(nom, prenom);
}
/**
diff --git a/src/main/java/fr/umontp/edt/RepertoireProfesseur.java b/src/main/java/fr/umontp/edt/RepertoireProfesseur.java
index c8f9116..93fe3e6 100644
--- a/src/main/java/fr/umontp/edt/RepertoireProfesseur.java
+++ b/src/main/java/fr/umontp/edt/RepertoireProfesseur.java
@@ -6,6 +6,8 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import fr.umontp.edt.outils.OutilsProfesseur;
+
/**
* RepertoireProfesseur est la classe qui repertorie tous les professeurs de
* l'emploi du temps.
@@ -43,7 +45,7 @@ static Professeur[] getProfesseurDepuisDescriptionEtAjouterSiNonPresent(String d
Matcher m = Pattern.compile(regex).matcher(description);
final List matches = new ArrayList<>();
while (m.find()) {
- String nomPrenomProf = Professeur.formater(m.group(0));
+ String nomPrenomProf = OutilsProfesseur.formater(m.group(0));
matches.add(repertoire.computeIfAbsent(nomPrenomProf, k -> new Professeur(nomPrenomProf)));
}
return matches.toArray(new Professeur[matches.size()]);
@@ -61,7 +63,7 @@ static Professeur[] getProfesseurDepuisDescriptionEtAjouterSiNonPresent(String d
* @see java.util.HashMap#get(java.lang.Object)
*/
public static Professeur get(String nom, String prenom) {
- return repertoire.get(Professeur.formater(nom, prenom));
+ return repertoire.get(OutilsProfesseur.formater(nom, prenom));
}
}
diff --git a/src/main/java/fr/umontp/edt/outils/OutilsProfesseur.java b/src/main/java/fr/umontp/edt/outils/OutilsProfesseur.java
new file mode 100644
index 0000000..bf6ed3a
--- /dev/null
+++ b/src/main/java/fr/umontp/edt/outils/OutilsProfesseur.java
@@ -0,0 +1,72 @@
+package fr.umontp.edt.outils;
+
+import java.text.Normalizer;
+import java.util.Locale;
+import java.util.regex.Pattern;
+
+import fr.umontp.edt.Professeur;
+
+/**
+ * ProfesseurOutils est la classe utilitaire pour le fonctionnement interne
+ * de la class {@link Professeur}.
+ *
+ * @see Professeur
+ *
+ * @author MathieuSoysal
+ * @version 1.0.0
+ */
+public class OutilsProfesseur {
+ private OutilsProfesseur() {
+ throw new IllegalStateException("Class utilitaire");
+ }
+
+ /**
+ * @param str {@code String} auquel l'on doit enlever l'accentuation
+ *
+ * @return {@code String} sans accentuation.
+ *
+ * @see Normalizer
+ *
+ * @since 1.0.0
+ */
+ public static String supprimerAccentuation(String str) {
+ String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
+ Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
+ return pattern.matcher(nfdNormalizedString).replaceAll("");
+ }
+
+ /**
+ * Concatène les deux variables {@code nom} et {@code prenom}, et renvoie une
+ * variable formaté pour la class {@link Professeur}.
+ *
+ * @param nom du professeur
+ * @param prenom du professeur
+ *
+ * @return {@code String} formaté pour la class {@link Professeur}.
+ *
+ * @see String#toUpperCase(Locale)
+ * @see OutilsProfesseur#supprimerAccentuation(String)
+ *
+ * @since 1.0.0
+ */
+ public static String formater(String nom, String prenom) {
+ return OutilsProfesseur.formater(nom + " " + prenom);
+ }
+
+ /**
+ * @param nomPrenom non et prénom du professeur séparé par 3 espaces.
+ *
+ * @return la variable {@code nomPrenom} formaté pour la class
+ * {@link Professeur}.
+ *
+ * @see String#toUpperCase(Locale)
+ * @see OutilsProfesseur#supprimerAccentuation(String)
+ *
+ * @since 1.0.0
+ */
+ public static String formater(String nomPrenom) {
+ nomPrenom = supprimerAccentuation(nomPrenom);
+ return nomPrenom.toUpperCase(Locale.FRANCE).replaceAll("[^A-Z ]|(?<=\\S)\\s(?=\\S)", "");
+ }
+
+}
diff --git a/src/test/java/fr/umontp/edt/ProfesseurTest.java b/src/test/java/fr/umontp/edt/ProfesseurTest.java
index dfb4aed..fea7e77 100644
--- a/src/test/java/fr/umontp/edt/ProfesseurTest.java
+++ b/src/test/java/fr/umontp/edt/ProfesseurTest.java
@@ -2,7 +2,12 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
+import java.util.stream.Stream;
+
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
class ProfesseurTest {
@@ -13,11 +18,18 @@ void testConstructeur_UnStrings_prenomNomCombine() {
assertEquals("Jean", professeur.getPrenom());
}
- @Test
- void testEquals_deuxProfesseursIdentiqueAvecConstructeurDifferent_avecDifferenceMajuscule() {
- Professeur professeur1 = new Professeur("DUpuis JeAN");
- Professeur professeur2 = new Professeur("DupUis JEan");
- assertEquals(professeur1, professeur2);
+ @ParameterizedTest(name = "Le professeur {0} doit être égal avec {1}")
+ @MethodSource("genererArgumentsPourtest_equals")
+ void test_equals(Professeur prof1, Professeur prof2) {
+ assertEquals(prof1, prof2);
+ }
+
+ private static Stream genererArgumentsPourtest_equals() {
+ return Stream.of(//
+ Arguments.of(new Professeur("DUpuis JeAN"), new Professeur("DupUis JEan")), //
+ Arguments.of(new Professeur("prés-dupuis Jean"), new Professeur("pres-dupuis Jean")), //
+ Arguments.of(new Professeur("D'Ôrge Jean"), new Professeur("DÔrge Jean")), //
+ Arguments.of(new Professeur("D'Ôrge Jean"), new Professeur("D Ôrge Jean")));
}
}
diff --git a/src/test/java/fr/umontp/edt/outils/OutilsProfesseurTest.java b/src/test/java/fr/umontp/edt/outils/OutilsProfesseurTest.java
new file mode 100644
index 0000000..09ed976
--- /dev/null
+++ b/src/test/java/fr/umontp/edt/outils/OutilsProfesseurTest.java
@@ -0,0 +1,67 @@
+package fr.umontp.edt.outils;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.stream.Stream;
+
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class OutilsProfesseurTest {
+
+ @ParameterizedTest(name = "la chaine de caractères {0} une fois son accentuation supprimé doit être égale à {1}")
+ @MethodSource("genererArgumentsPourtest_supprimerAccentuation")
+ void test_supprimerAccentuation(String input, String excepted) {
+ assertEquals(excepted, OutilsProfesseur.supprimerAccentuation(input));
+ }
+
+ private static Stream genererArgumentsPourtest_supprimerAccentuation() {
+ return Stream.of(//
+ Arguments.of("É", "E"), //
+ Arguments.of("1234567890", "1234567890"), //
+ Arguments.of("ô", "o"), //
+ Arguments.of("à", "a"), //
+ Arguments.of("è", "e"), //
+ Arguments.of("ç", "c"), //
+ Arguments.of("'", "'"), //
+ Arguments.of("-", "-"), //
+ Arguments.of(" ", " "), //
+ Arguments.of("é", "e"));
+ }
+
+ @ParameterizedTest(name = "la chaine de caractères {0} une fois formaté doit être égale à {1}")
+ @MethodSource("genererArgumentsPourtest_formater_1parametre")
+ void test_formater_1parametre(String input, String excepted) {
+ assertEquals(excepted, OutilsProfesseur.formater(input));
+ }
+
+ private static Stream genererArgumentsPourtest_formater_1parametre() {
+ return Stream.of(//
+ Arguments.of("", ""), //
+ Arguments.of("test", "TEST"), //
+ Arguments.of("D'Orge", "DORGE"), //
+ Arguments.of("D Orge", "DORGE"), //
+ Arguments.of("TeEsT", "TEEST"), //
+ Arguments.of("Téèçà", "TEECA"), //
+ Arguments.of("ÉÈÇÀ", "EECA"), //
+ Arguments.of("test t@°0245est", "TEST TEST"));
+ }
+
+ @ParameterizedTest(name = "la chaine de caractères {0} une fois formaté doit être égale à {1}")
+ @MethodSource("genererArgumentsPourtest_formater_2parametres")
+ void test_formater_2parametres(String input1, String input2, String excepted) {
+ assertEquals(excepted, OutilsProfesseur.formater(input1, input2));
+ }
+
+ private static Stream genererArgumentsPourtest_formater_2parametres() {
+ return Stream.of(//
+ Arguments.of("", "", " "), //
+ Arguments.of("test", "TEST", "TEST TEST"), //
+ Arguments.of("TeEsT", "TeEsT", "TEEST TEEST"), //
+ Arguments.of("T eEsT", "TeE sT", "TEEST TEEST"), //
+ Arguments.of("Téèçà", "Téèçà", "TEECA TEECA"), //
+ Arguments.of("ÉÈÇÀ", "ÉÈÇÀ", "EECA EECA"), //
+ Arguments.of("te93~('st", "t@°0245est", "TEST TEST"));
+ }
+}