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