Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,29 @@
</executions>
</plugin>

<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.6.2</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.12</version>
</dependency>
<dependency>
<groupId>io.github.wmaarts</groupId>
<artifactId>pitest-mutation-testing-elements-plugin</artifactId>
<version>0.3.1</version>
</dependency>
</dependencies>
<configuration>
<outputFormats>
<format>HTML2</format>
</outputFormats>
</configuration>
</plugin>

</plugins>
</build>
</project>
2 changes: 1 addition & 1 deletion src/main/java/fr/umontp/edt/EmploiDuTemps.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private File getFichierIcsDepuisLienIcal() {
}

@Override
public void actualiser() {
public synchronized void actualiser() {
File fichierIcs = getFichierIcsDepuisLienIcal();
Calendar calendar = convertieFichierIcsEnCalendar(fichierIcs);
ArrayList<Cours> coursList = new ArrayList<>();
Expand Down
15 changes: 4 additions & 11 deletions src/main/java/fr/umontp/edt/Professeur.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package fr.umontp.edt;

import java.util.Locale;
import fr.umontp.edt.outils.OutilsProfesseur;

/**
* <b>Professeur est la classe représentant un professeur au sein de l'emploi du
Expand All @@ -17,9 +17,10 @@
* </p>
*
* @see RepertoireProfesseur
* @see OutilsProfesseur
*
* @author MathieuSoysal
* @version 1.0.0
* @version 1.0.1
*/
public class Professeur {
private String denomination;
Expand All @@ -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);
}

/**
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/fr/umontp/edt/RepertoireProfesseur.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import fr.umontp.edt.outils.OutilsProfesseur;

/**
* <b>RepertoireProfesseur est la classe qui repertorie tous les professeurs de
* l'emploi du temps.</b>
Expand Down Expand Up @@ -43,7 +45,7 @@ static Professeur[] getProfesseurDepuisDescriptionEtAjouterSiNonPresent(String d
Matcher m = Pattern.compile(regex).matcher(description);
final List<Professeur> 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()]);
Expand All @@ -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));
}

}
72 changes: 72 additions & 0 deletions src/main/java/fr/umontp/edt/outils/OutilsProfesseur.java
Original file line number Diff line number Diff line change
@@ -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;

/**
* <b>ProfesseurOutils est la classe utilitaire pour le fonctionnement interne
* de la class {@link Professeur}.</b>
*
* @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)", "");
}

}
22 changes: 17 additions & 5 deletions src/test/java/fr/umontp/edt/ProfesseurTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -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<Arguments> 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")));
}

}
67 changes: 67 additions & 0 deletions src/test/java/fr/umontp/edt/outils/OutilsProfesseurTest.java
Original file line number Diff line number Diff line change
@@ -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<Arguments> 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<Arguments> 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<Arguments> 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"));
}
}