mirror of
https://github.com/Akomry/sae302_applicom.git
synced 2025-12-08 07:13:55 +00:00
feat(contacts): ajout de la classe Contact.java, ContactMap.java, gestion des objets Contact dans l'interface graphique
This commit is contained in:
parent
45f18e9309
commit
e9480590a7
14 changed files with 649 additions and 36 deletions
155
chat/src/test/java/rtgre/modeles/ContactBaseTest1.java
Normal file
155
chat/src/test/java/rtgre/modeles/ContactBaseTest1.java
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
package rtgre.modeles;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import java.lang.reflect.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.params.provider.Arguments.arguments;
|
||||
|
||||
/** Tests unitaires du modèle de base de Contact (étape 1) */
|
||||
|
||||
class ContactBaseTest1 {
|
||||
|
||||
static Class<?> classe = Contact.class;
|
||||
static String module = "rtgre.modeles";
|
||||
|
||||
@DisplayName("01-Structure de la classe Contact")
|
||||
@Nested
|
||||
class StructureTest {
|
||||
|
||||
static List<String> constructeursSignatures;
|
||||
static List<String> methodesSignatures;
|
||||
|
||||
@BeforeAll
|
||||
static void init() {
|
||||
Constructor<?>[] constructeurs = classe.getConstructors();
|
||||
constructeursSignatures = Arrays.stream(constructeurs).map(Constructor::toString).collect(Collectors.toList());
|
||||
Method[] methodes = classe.getDeclaredMethods();
|
||||
methodesSignatures = Arrays.stream(methodes).map(Method::toString).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Attributs
|
||||
*/
|
||||
static Stream<Arguments> attributsProvider() {
|
||||
return Stream.of(
|
||||
arguments("login", "java.lang.String", Modifier.PROTECTED),
|
||||
arguments("avatar", "java.awt.Image", Modifier.PROTECTED),
|
||||
arguments("connected", "boolean", Modifier.PROTECTED),
|
||||
arguments("currentRoom", "java.lang.String", Modifier.PROTECTED)
|
||||
);
|
||||
}
|
||||
|
||||
@DisplayName("Déclaration des attributs : nom, type et visibilité")
|
||||
@ParameterizedTest
|
||||
@MethodSource("attributsProvider")
|
||||
void testDeclarationAttributs(String nom, String type, int modifier) throws NoSuchFieldException {
|
||||
Field field = classe.getDeclaredField(nom);
|
||||
Assertions.assertEquals(type, field.getType().getName(),
|
||||
"Type " + nom + " erroné : doit être " + type);
|
||||
Assertions.assertEquals(modifier, field.getModifiers(),
|
||||
"Visibilité " + nom + " erronée : doit être " + modifier);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructeurs
|
||||
*/
|
||||
static Stream<Arguments> constructeursProvider() {
|
||||
return Stream.of(
|
||||
arguments("public %s.Contact(java.lang.String,java.awt.Image)")
|
||||
);
|
||||
}
|
||||
|
||||
@DisplayName("Déclaration des constructeurs (base)")
|
||||
@ParameterizedTest
|
||||
@MethodSource("constructeursProvider")
|
||||
void testConstructeurs1(String signature) {
|
||||
Assertions.assertTrue(constructeursSignatures.contains(String.format(signature, module)),
|
||||
String.format("Constructeur non déclaré : doit être %s\nalors que sont déclarés %s",
|
||||
signature, constructeursSignatures));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Méthodes
|
||||
*/
|
||||
static Stream<Arguments> methodesProvider1() {
|
||||
return Stream.of(
|
||||
arguments("getLogin", "public java.lang.String %s.Contact.getLogin()"),
|
||||
arguments("getAvatar", "public java.awt.Image %s.Contact.getAvatar()"),
|
||||
arguments("isConnected", "public boolean %s.Contact.isConnected()"),
|
||||
arguments("toString", "public boolean %s.Contact.isConnected()"),
|
||||
arguments("setConnected", "public java.lang.String %s.Contact.toString()"),
|
||||
arguments("equals", "public boolean %s.Contact.equals(java.lang.Object)")
|
||||
);
|
||||
}
|
||||
|
||||
@DisplayName("Déclaration des méthodes (base)")
|
||||
@ParameterizedTest
|
||||
@MethodSource("methodesProvider1")
|
||||
void testDeclarationMethodes1(String nom, String signature) {
|
||||
Assertions.assertTrue(methodesSignatures.contains(String.format(signature, module, module)),
|
||||
String.format("Méthode non déclarée : doit être %s\nalors que sont déclarés %s",
|
||||
signature, methodesSignatures));
|
||||
}
|
||||
|
||||
|
||||
@DisplayName("02-Instanciation et getters")
|
||||
@Nested
|
||||
class InstanciationContactTest {
|
||||
|
||||
@Test
|
||||
@DisplayName("sans avatar : getters de login, connected")
|
||||
void TestConstructeurParDefautSansAvatar() {
|
||||
Contact riri = new Contact("riri", null);
|
||||
Assertions.assertEquals("riri", riri.getLogin(), "Login erroné");
|
||||
Assertions.assertFalse(riri.isConnected(), "Etat par défaut erroné");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@DisplayName("03-Modification")
|
||||
@Nested
|
||||
class ModificationContactTest {
|
||||
|
||||
@Test
|
||||
@DisplayName("Setter de connexion")
|
||||
void TestEtatConnexion() {
|
||||
Contact riri = new Contact("riri", null);
|
||||
riri.setConnected(true);
|
||||
Assertions.assertTrue(riri.isConnected(), "Changement d'état erroné");
|
||||
riri.setConnected(false);
|
||||
Assertions.assertFalse(riri.isConnected(), "Changement d'état erroné");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("04-Représentation textuelle")
|
||||
void TestToString() {
|
||||
Contact riri = new Contact("riri", null);
|
||||
Assertions.assertEquals("@riri", riri.toString(),
|
||||
"Représentation textuelle erronée");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("05-Egalité")
|
||||
void TestEquals() {
|
||||
Contact riri = new Contact("riri", null);
|
||||
Contact riri2 = new Contact("riri", null);
|
||||
Contact fifi = new Contact("fifi", null);
|
||||
Assertions.assertEquals(riri, riri2, "Comparaison erronée");
|
||||
Assertions.assertNotEquals(riri, fifi, "Comparaison erronée");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
47
chat/src/test/java/rtgre/modeles/ContactMapTest.java
Normal file
47
chat/src/test/java/rtgre/modeles/ContactMapTest.java
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
package rtgre.modeles;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.TreeMap;
|
||||
|
||||
class ContactMapTest {
|
||||
|
||||
static Class<?> classe = ContactMap.class;
|
||||
|
||||
@DisplayName("01-Structure")
|
||||
@Nested
|
||||
class StructureContactMapTest {
|
||||
|
||||
@Test
|
||||
@DisplayName("Heritage")
|
||||
void testHeritage() {
|
||||
ContactMap contactMap = new ContactMap();
|
||||
Assertions.assertInstanceOf(TreeMap.class, contactMap, "doit hériter de TreeMap");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@DisplayName("02-Ajout")
|
||||
@Nested
|
||||
class AddTest {
|
||||
|
||||
@Test
|
||||
@DisplayName("Ajout d'un contact")
|
||||
void TestAdd() {
|
||||
Contact riri = new Contact("riri", null);
|
||||
ContactMap contactMap = new ContactMap();
|
||||
contactMap.add(riri);
|
||||
|
||||
Assertions.assertTrue(contactMap.containsKey("riri"),
|
||||
"Les clés sont les logins");
|
||||
Assertions.assertTrue(contactMap.containsValue(riri),
|
||||
"Les valeurs sont les contacts");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
120
chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java
Normal file
120
chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
package rtgre.modeles;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.params.provider.Arguments.arguments;
|
||||
|
||||
/** Tests unitaires du modèle de base de Contact (étape 1) */
|
||||
|
||||
class ContactWithAvatarTest2 {
|
||||
|
||||
static Class<?> classe = Contact.class;
|
||||
static String module = "rtgre.modeles";
|
||||
|
||||
@DisplayName("01-Structure de la classe Contact")
|
||||
@Nested
|
||||
class StructureTest {
|
||||
|
||||
static List<String> constructeursSignatures;
|
||||
static List<String> methodesSignatures;
|
||||
|
||||
@BeforeAll
|
||||
static void init() {
|
||||
Constructor<?>[] constructeurs = classe.getConstructors();
|
||||
constructeursSignatures = Arrays.stream(constructeurs).map(Constructor::toString).collect(Collectors.toList());
|
||||
Method[] methodes = classe.getDeclaredMethods();
|
||||
methodesSignatures = Arrays.stream(methodes).map(Method::toString).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
static Stream<Arguments> constructeursProvider2() {
|
||||
return Stream.of(
|
||||
arguments("public %s.Contact(java.lang.String,boolean,java.io.File)")
|
||||
);
|
||||
}
|
||||
// @Disabled("Jusqu'à ce que soit codé les avatars à partir d'un fichier")
|
||||
@DisplayName("Déclaration des constructeurs (avec avatars à partir d'un fichier)")
|
||||
@ParameterizedTest
|
||||
@MethodSource("constructeursProvider2")
|
||||
void testConstructeurs2(String signature) {
|
||||
Assertions.assertTrue(constructeursSignatures.contains(String.format(signature, module)),
|
||||
String.format("Constructeur non déclaré : doit être %s\nalors que sont déclarés %s",
|
||||
signature, constructeursSignatures));
|
||||
|
||||
}
|
||||
|
||||
|
||||
static Stream<Arguments> methodesProvider2() {
|
||||
return Stream.of(
|
||||
arguments("avatarFromLogin", "public static java.awt.image.BufferedImage %s.Contact.avatarFromLogin(java.io.File,java.lang.String) throws java.io.IOException"),
|
||||
arguments("setAvatarFromFile", "public void %s.Contact.setAvatarFromFile(java.io.File)")
|
||||
);
|
||||
}
|
||||
// @Disabled("Jusqu'à ce que soit codé les avatars à partir d'un fichier")
|
||||
@DisplayName("Déclaration des méthodes (avec avatars à partir d'un fichier)")
|
||||
@ParameterizedTest
|
||||
@MethodSource("methodesProvider2")
|
||||
void testDeclarationMethodes2(String nom, String signature) {
|
||||
Assertions.assertTrue(methodesSignatures.contains(String.format(signature, module, module)),
|
||||
String.format("Méthode non déclarée : doit être %s\nalors que sont déclarés %s",
|
||||
signature, methodesSignatures));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@DisplayName("02-Instanciation et getters")
|
||||
@Nested
|
||||
class InstanciationContactTest {
|
||||
|
||||
// @Disabled("Jusqu'à ce que soit codé les avatars à partir d'un fichier")
|
||||
@Test
|
||||
@DisplayName("avec avatar : getters de avatar")
|
||||
void TestConstructeurParDefautAvecAvatar() throws IOException {
|
||||
String work_dir = System.getProperty("user.dir");
|
||||
Assertions.assertTrue(work_dir.endsWith("chat"),
|
||||
"Le working dir doit être <projet>/chat/ et non : " + work_dir);
|
||||
File f = new File("src/main/resources/rtgre/chat/anonymous.png");
|
||||
Assertions.assertTrue(f.canRead(), "Fichier manquant " + f.getAbsolutePath());
|
||||
Image avatar = ImageIO.read(f);
|
||||
Contact fifi = new Contact("fifi", avatar);
|
||||
Assertions.assertEquals(avatar, fifi.getAvatar(), "Avatar erroné");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// @Disabled("Jusqu'à ce que soit codé les avatars à partir d'un fichier")
|
||||
@Nested
|
||||
@DisplayName("06-Avatar à partir d'un fichier")
|
||||
class AvatarFromFilesTest {
|
||||
|
||||
@Test
|
||||
@DisplayName("A partir d'un fichier")
|
||||
void TestSetFromFile() throws IOException {
|
||||
String work_dir = System.getProperty("user.dir");
|
||||
Assertions.assertTrue(work_dir.endsWith("chat"),
|
||||
"Le working dir doit être <projet>/chat/ et non : " + work_dir);
|
||||
File f = new File("src/main/resources/rtgre/chat/avatar1.png");
|
||||
Assertions.assertTrue(f.canRead(), "Fichier manquant " + f.getAbsolutePath());
|
||||
Contact fifi = new Contact("fifi", null);
|
||||
fifi.setAvatarFromFile(f);
|
||||
Assertions.assertNotNull(fifi.getAvatar(), "Avatar non chargé");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue