From 45f18e930968eaa0eab739d2d1a985652dc7a539 Mon Sep 17 00:00:00 2001 From: bouclyma Date: Thu, 5 Dec 2024 12:01:19 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat(contact):=20D=C3=A9but=20de=20cr=C3=A9?= =?UTF-8?q?ation=20du=20mod=C3=A8le=20des=20contacts,=20jusqu'=C3=A0=20"eq?= =?UTF-8?q?uals",=20toString=20=C3=A0=20finir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chat/src/main/java/module-info.java | 1 + .../main/java/rtgre/chat/ChatController.java | 1 - chat/src/main/java/rtgre/modeles/Contact.java | 43 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 chat/src/main/java/rtgre/modeles/Contact.java diff --git a/chat/src/main/java/module-info.java b/chat/src/main/java/module-info.java index 34c52c5..714abc1 100644 --- a/chat/src/main/java/module-info.java +++ b/chat/src/main/java/module-info.java @@ -2,6 +2,7 @@ module rtgre.chat { requires javafx.controls; requires javafx.fxml; requires java.logging; + requires java.desktop; opens rtgre.chat to javafx.fxml; diff --git a/chat/src/main/java/rtgre/chat/ChatController.java b/chat/src/main/java/rtgre/chat/ChatController.java index aab603f..e1ff641 100644 --- a/chat/src/main/java/rtgre/chat/ChatController.java +++ b/chat/src/main/java/rtgre/chat/ChatController.java @@ -67,7 +67,6 @@ public class ChatController implements Initializable { while (true) { try { String datetime = "%1$ta %1$te %1$tb %1$tY - %1$tH:%1$tM".formatted(new Date()); - // System.out.println(datetime); Platform.runLater(() -> dateTimeLabel.setText(datetime)); Thread.sleep(60000); } catch (Exception e) { diff --git a/chat/src/main/java/rtgre/modeles/Contact.java b/chat/src/main/java/rtgre/modeles/Contact.java new file mode 100644 index 0000000..f4e2dcd --- /dev/null +++ b/chat/src/main/java/rtgre/modeles/Contact.java @@ -0,0 +1,43 @@ +package rtgre.modeles; + + +public class Contact { + protected String login; + protected java.awt.Image avatar; + protected boolean connected; + protected String currentRoom; + + Contact(String login, java.awt.Image avatar) { + this.login = login; + this.avatar = avatar; + this.connected = false; + this.currentRoom = null; + } + + public String getLogin() { + return this.login; + } + + public java.awt.Image getAvatar() { + return this.avatar; + } + + @Override + public String toString() { + return ""; + } + + public void setConnected(boolean connected) { + this.connected = connected; + } + + + public boolean equals(Object o) {return true;} + /*if (this.login == o.login) { + return true; + } else { + return false; + } + }*/ + +} From e9480590a762d566527b75e71ac963e511b7a967 Mon Sep 17 00:00:00 2001 From: bouclyma Date: Tue, 10 Dec 2024 21:34:55 +0100 Subject: [PATCH 2/2] feat(contacts): ajout de la classe Contact.java, ContactMap.java, gestion des objets Contact dans l'interface graphique --- chat/pom.xml | 16 ++ chat/src/main/java/module-info.java | 4 + .../main/java/rtgre/chat/ChatApplication.java | 4 +- .../main/java/rtgre/chat/ChatController.java | 110 ++++++++++++- .../chat/graphisme/ContactListViewCell.java | 88 ++++++++++ chat/src/main/java/rtgre/modeles/Contact.java | 97 ++++++++++- .../main/java/rtgre/modeles/ContactMap.java | 12 ++ .../src/main/resources/rtgre/chat/avatar1.png | Bin 0 -> 32851 bytes .../src/main/resources/rtgre/chat/avatar2.png | Bin 0 -> 26698 bytes .../src/main/resources/rtgre/chat/avatars.png | Bin 0 -> 53818 bytes .../main/resources/rtgre/chat/chat-view.fxml | 32 +--- .../java/rtgre/modeles/ContactBaseTest1.java | 155 ++++++++++++++++++ .../java/rtgre/modeles/ContactMapTest.java | 47 ++++++ .../rtgre/modeles/ContactWithAvatarTest2.java | 120 ++++++++++++++ 14 files changed, 649 insertions(+), 36 deletions(-) create mode 100644 chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java create mode 100644 chat/src/main/java/rtgre/modeles/ContactMap.java create mode 100644 chat/src/main/resources/rtgre/chat/avatar1.png create mode 100644 chat/src/main/resources/rtgre/chat/avatar2.png create mode 100644 chat/src/main/resources/rtgre/chat/avatars.png create mode 100644 chat/src/test/java/rtgre/modeles/ContactBaseTest1.java create mode 100644 chat/src/test/java/rtgre/modeles/ContactMapTest.java create mode 100644 chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java diff --git a/chat/pom.xml b/chat/pom.xml index fa1b04d..a61a9a2 100644 --- a/chat/pom.xml +++ b/chat/pom.xml @@ -25,6 +25,22 @@ javafx-fxml 18 + + org.openjfx + javafx-swing + 19 + + + org.junit.jupiter + junit-jupiter-params + 5.8.1 + test + + + net.synedra + validatorfx + 0.5.1 + org.junit.jupiter diff --git a/chat/src/main/java/module-info.java b/chat/src/main/java/module-info.java index 714abc1..d4b00e4 100644 --- a/chat/src/main/java/module-info.java +++ b/chat/src/main/java/module-info.java @@ -3,8 +3,12 @@ module rtgre.chat { requires javafx.fxml; requires java.logging; requires java.desktop; + requires javafx.swing; + requires net.synedra.validatorfx; opens rtgre.chat to javafx.fxml; exports rtgre.chat; + exports rtgre.chat.graphisme; + opens rtgre.chat.graphisme to javafx.fxml; } \ No newline at end of file diff --git a/chat/src/main/java/rtgre/chat/ChatApplication.java b/chat/src/main/java/rtgre/chat/ChatApplication.java index b4e2085..039b5e8 100644 --- a/chat/src/main/java/rtgre/chat/ChatApplication.java +++ b/chat/src/main/java/rtgre/chat/ChatApplication.java @@ -15,8 +15,8 @@ import java.util.logging.Logger; public class ChatApplication extends Application { public static final Logger LOGGER = Logger.getLogger(ChatApplication.class.getCanonicalName()); + public class EssaiLogger { - /* . . . */ static { try { InputStream is = EssaiLogger.class.getClassLoader() @@ -26,8 +26,8 @@ public class ChatApplication extends Application { LOGGER.log(Level.INFO, "Cannot read configuration file", e); } } - /* . . . */ } + @Override public void start(Stage stage) throws IOException { FXMLLoader fxmlLoader = new FXMLLoader(ChatApplication.class.getResource("chat-view.fxml")); diff --git a/chat/src/main/java/rtgre/chat/ChatController.java b/chat/src/main/java/rtgre/chat/ChatController.java index e1ff641..6b307d5 100644 --- a/chat/src/main/java/rtgre/chat/ChatController.java +++ b/chat/src/main/java/rtgre/chat/ChatController.java @@ -2,22 +2,47 @@ package rtgre.chat; import javafx.application.Platform; import javafx.beans.Observable; +import javafx.beans.binding.Bindings; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.embed.swing.SwingFXUtils; +import javafx.event.ActionEvent; import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import net.synedra.validatorfx.Check; +import net.synedra.validatorfx.TooltipWrapper; +import net.synedra.validatorfx.Validator; +import rtgre.chat.graphisme.ContactListViewCell; +import rtgre.modeles.Contact; +import rtgre.modeles.ContactMap; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; import java.net.URL; import java.util.Date; import java.util.Objects; import java.util.ResourceBundle; import java.util.logging.Logger; +import java.util.regex.Pattern; import static rtgre.chat.ChatApplication.LOGGER; + public class ChatController implements Initializable { + private static final Pattern LOGIN_PATTERN = Pattern.compile("^([a-z][a-z0-9]{2,7})$"); + private static final Pattern HOST_PATTERN = Pattern.compile("/^[a-z]*((\\:?)\\d{1,5})?$/gm"); public MenuItem hostAddMenuItem; public MenuItem avatarMenuItem; public MenuItem aboutMenuItem; @@ -28,11 +53,15 @@ public class ChatController implements Initializable { public SplitPane exchangeSplitPane; public ListView postListView; public ListView roomsListView; - public ListView contactListView; + public ListView contactsListView; public TextField messageTextField; public Button sendButton; public Label statusLabel; public Label dateTimeLabel; + public Contact contact; + private ContactMap contactMap = new ContactMap(); + private ObservableList contactObservableList = FXCollections.observableArrayList(); + Validator validatorLogin = new Validator(); @Override @@ -53,13 +82,74 @@ public class ChatController implements Initializable { statusLabel.setText("not connected to " + hostComboBox.getValue()); + connectionButton.disableProperty().bind(validatorLogin.containsErrorsProperty()); + connectionButton.selectedProperty().addListener(this::handleConnection); + loginTextField.disableProperty().bind(connectionButton.selectedProperty()); + hostComboBox.disableProperty().bind(connectionButton.selectedProperty()); + + avatarMenuItem.setOnAction(this::handleAvatarChange); + avatarImageView.setOnMouseClicked(this::handleAvatarChange); + + initContactListView(); + + validatorLogin.createCheck() + .dependsOn("login", loginTextField.textProperty()) + .withMethod(this::checkLogin) + .decorates(loginTextField) + .immediate(); + + + /* /!\ Set-up d'environnement de test /!\ */ + /* -------------------------------------- */ + loginTextField.setText("riri"); + connectionButton.setSelected(true); + } + + private void handleAvatarChange(Event event) { + /** + * Ouvre une fenêtre de dialogue permettant de choisir son avatar + */ + FileChooser fileChooser = new FileChooser(); + Stage stage = (Stage) avatarImageView.getScene().getWindow(); + fileChooser.setTitle("Select Avatar"); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg") + ); + File selectedFile = fileChooser.showOpenDialog(stage); + if (selectedFile != null) { + avatarImageView.setImage(new Image(selectedFile.toURI().toString())); + } + } + + + + private void handleConnection(Observable observable) { + /** + * + */ + if (connectionButton.isSelected()) { + java.awt.Image img = SwingFXUtils.fromFXImage(this.avatarImageView.getImage(), null); + this.contact = new Contact(loginTextField.getText(), img); + contactMap.put(this.contact.getLogin(), this.contact); + System.out.println("Nouveau contact : " + contact); + System.out.println(contactMap); + } + } + + private void checkLogin(Check.Context context) { + String login = context.get("login"); + if (!LOGIN_PATTERN.matcher(login).matches()) { + context.error("Format de login non respecté"); + } + if (login.equals("system")) { + context.error("Le login ne peut pas être system"); + } } private void statusNameUpdate(Event event) { statusLabel.setText("not connected to " + hostComboBox.getValue()); - } @@ -75,4 +165,20 @@ public class ChatController implements Initializable { } } + + private void initContactListView() { + try { + contactsListView.setCellFactory(contactListView -> new ContactListViewCell()); + contactsListView.setItems(contactObservableList); + File avatars = new File(getClass().getResource("avatars.png").toURI()); + Contact riri = new Contact("riri", false, avatars); + Contact fifi = new Contact("fifi", true, avatars); + contactObservableList.add(riri); + contactMap.add(riri); + contactObservableList.add(fifi); + contactMap.add(fifi); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + } + } } \ No newline at end of file diff --git a/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java b/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java new file mode 100644 index 0000000..0a1439c --- /dev/null +++ b/chat/src/main/java/rtgre/chat/graphisme/ContactListViewCell.java @@ -0,0 +1,88 @@ +package rtgre.chat.graphisme; + +import rtgre.chat.ChatController; +import javafx.embed.swing.SwingFXUtils; +import javafx.geometry.Pos; +import javafx.scene.control.ListCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import javafx.scene.paint.Color; +import javafx.scene.shape.Circle; +import javafx.scene.text.Font; +import javafx.scene.text.Text; +import rtgre.modeles.Contact; + +import java.awt.image.BufferedImage; + +import static rtgre.chat.ChatApplication.LOGGER; + +/** + * Classe modélisant la fabrique de cellule de la vue des contacts + * visibles/connectés {@link ChatController#contactsListView}. + * + * @see ListCell + */ +public class ContactListViewCell extends ListCell { + + /** + * Callback déclenchée à chaque modification d'un objet d'une liste d'observable. + * + * @param contact Le contact à mettre à jour + * @param empty La liste de cellule doit-elle être complètement remise à zéro ? + */ + @Override + protected void updateItem(Contact contact, boolean empty) { + super.updateItem(contact, empty); + if (empty) { + setGraphic(null); + } + else { + // Cas d'un contact + updateContact(contact); + } + } + + /** + * Mise à jour de la cellule d'un contact. + * + * @param contact Le contact à mettre à jour + */ + + private void updateContact(Contact contact) { + LOGGER.finest("Mise à jour de " + contact); + + String unreadCountNotif = (contact.getUnreadCount() == 0) ? "" : " (%d)".formatted(contact.getUnreadCount()); + LOGGER.finest("unread: %s %s".formatted(contact.getLogin(), unreadCountNotif)); + Text loginText = new Text(contact.getLogin() + unreadCountNotif); + loginText.setFont(Font.font(null, 12)); // FontWeight.BOLD, 14)); + loginText.setFill(contact.isConnected() ? Color.BLACK : Color.GRAY); + + Circle circle = new Circle(5, 5, 5); + circle.setFill(contact.isConnected() ? Color.CADETBLUE : Color.FIREBRICK); + // circle.setOpacity(contact.is_connected() ? 1 : 0.5); + + Image avatar; + ImageView view = new ImageView(); + + if (contact.getAvatar() != null) { + avatar = SwingFXUtils.toFXImage((BufferedImage) contact.getAvatar(), null); + view = new ImageView(avatar); + } + view.setOpacity(contact.isConnected() ? 1 : 0.5); + view.setFitWidth(15); + view.setFitHeight(15); + + HBox temp = new HBox(circle); + temp.setAlignment(Pos.CENTER_RIGHT); + HBox.setHgrow(temp, Priority.ALWAYS); + HBox hBox = new HBox(view, loginText, temp); + hBox.setSpacing(5.0); + hBox.setAlignment(Pos.CENTER_LEFT); + + setGraphic(hBox); + } + + +} \ No newline at end of file diff --git a/chat/src/main/java/rtgre/modeles/Contact.java b/chat/src/main/java/rtgre/modeles/Contact.java index f4e2dcd..cf3e786 100644 --- a/chat/src/main/java/rtgre/modeles/Contact.java +++ b/chat/src/main/java/rtgre/modeles/Contact.java @@ -1,18 +1,65 @@ package rtgre.modeles; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Objects; + public class Contact { protected String login; protected java.awt.Image avatar; protected boolean connected; protected String currentRoom; - Contact(String login, java.awt.Image avatar) { + public Contact(String login, java.awt.Image avatar) { + /** + * Crée un objet Contact + * @param: String login + * @param: java.awt.Image avatar + */ this.login = login; this.avatar = avatar; this.connected = false; this.currentRoom = null; } + public Contact(String login, boolean connected, java.awt.Image avatar) { + /** + * Crée un objet Contact + * @param: String login + * @param: boolean connected + * @param: java.awt.Image avatar + */ + this.login = login; + this.avatar = avatar; + this.connected = connected; + this.currentRoom = null; + } + + public String getCurrentRoom() { + return currentRoom; + } + + public Contact(String login, boolean connected, File banques_avatars) { + /** + * Crée un objet Contact + * @param: String login + * @param: boolean connected + * @param: File banques_avatars + */ + this.login = login; + try { + this.avatar = avatarFromLogin(banques_avatars, login); + } catch (IOException e) { + System.out.println("Impossible de créer l'utilisateur " + login); + System.out.println(e.getMessage()); + System.out.println(banques_avatars); + } + this.connected = connected; + this.currentRoom = null; + } + public String getLogin() { return this.login; @@ -24,20 +71,52 @@ public class Contact { @Override public String toString() { - return ""; + return "@" + this.login; + } + + public boolean isConnected() { + return this.connected; } public void setConnected(boolean connected) { this.connected = connected; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Contact contact = (Contact) o; + return Objects.equals(login, contact.login); + } - public boolean equals(Object o) {return true;} - /*if (this.login == o.login) { - return true; - } else { - return false; + @Override + public int hashCode() { + return Objects.hashCode(login); + } + + public int getUnreadCount() { + return 0; + } + + public static BufferedImage avatarFromLogin(File fichier, String login) throws IOException { + /** + * Renvoie une sous-image en fonction d'une banque d'image et d'un login. + * @param: File fichier + * @param: String login + */ + BufferedImage img = ImageIO.read(fichier); + int width = img.getWidth() / 9; + int height = img.getHeight(); + int n = Integer.remainderUnsigned(login.hashCode(), 9); + return img.getSubimage(n*width, 0, width, height); + } + + public void setAvatarFromFile(File f) { + try { + this.avatar = avatarFromLogin(f, this.login); + } catch (IOException e) { + System.out.println("Erreur : " + e.getMessage()); } - }*/ - + } } diff --git a/chat/src/main/java/rtgre/modeles/ContactMap.java b/chat/src/main/java/rtgre/modeles/ContactMap.java new file mode 100644 index 0000000..f44bcc0 --- /dev/null +++ b/chat/src/main/java/rtgre/modeles/ContactMap.java @@ -0,0 +1,12 @@ +package rtgre.modeles; +import java.util.TreeMap; + +public class ContactMap extends TreeMap { + public void add(Contact contact) { + this.put(contact.login, contact); + } + + public Contact getContact(String login) { + return this.get(login); + } +} diff --git a/chat/src/main/resources/rtgre/chat/avatar1.png b/chat/src/main/resources/rtgre/chat/avatar1.png new file mode 100644 index 0000000000000000000000000000000000000000..aa871c1208a4bf9fbed3c81ba8fe67b166bce670 GIT binary patch literal 32851 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 literal 0 HcmV?d00001 diff --git a/chat/src/main/resources/rtgre/chat/avatar2.png b/chat/src/main/resources/rtgre/chat/avatar2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8fe3269916c11834a8dd93f0e1ab256088ec096 GIT binary patch literal 26698 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 Csc-QB literal 0 HcmV?d00001 diff --git a/chat/src/main/resources/rtgre/chat/avatars.png b/chat/src/main/resources/rtgre/chat/avatars.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e2c99fa10650f1f6493392f51ed1d3e44f51f5 GIT binary patch literal 53818 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 literal 0 HcmV?d00001 diff --git a/chat/src/main/resources/rtgre/chat/chat-view.fxml b/chat/src/main/resources/rtgre/chat/chat-view.fxml index a389c65..7d82d81 100644 --- a/chat/src/main/resources/rtgre/chat/chat-view.fxml +++ b/chat/src/main/resources/rtgre/chat/chat-view.fxml @@ -1,27 +1,13 @@ - - - - - - - - - - - - - - - - - - + + + + - + - + @@ -77,7 +63,7 @@ - + @@ -111,10 +97,10 @@ - + diff --git a/chat/src/test/java/rtgre/modeles/ContactBaseTest1.java b/chat/src/test/java/rtgre/modeles/ContactBaseTest1.java new file mode 100644 index 0000000..5198bb2 --- /dev/null +++ b/chat/src/test/java/rtgre/modeles/ContactBaseTest1.java @@ -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 constructeursSignatures; + static List 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 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 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 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"); + } + + } +} \ No newline at end of file diff --git a/chat/src/test/java/rtgre/modeles/ContactMapTest.java b/chat/src/test/java/rtgre/modeles/ContactMapTest.java new file mode 100644 index 0000000..2dce20d --- /dev/null +++ b/chat/src/test/java/rtgre/modeles/ContactMapTest.java @@ -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"); + } + + } + +} \ No newline at end of file diff --git a/chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java b/chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java new file mode 100644 index 0000000..d9d9de6 --- /dev/null +++ b/chat/src/test/java/rtgre/modeles/ContactWithAvatarTest2.java @@ -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 constructeursSignatures; + static List 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 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 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 /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 /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é"); + } + } + +} \ No newline at end of file