Merge branch 'feat/chat-tests' into 'main'
Feat/chat tests See merge request cs108-fs26/Gruppe-13!161
This commit was merged in pull request #317.
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** Interface used to create test instances of the ChatClient */
|
||||||
|
public interface ChatClientInterface {
|
||||||
|
|
||||||
|
List<Message> getMessages();
|
||||||
|
|
||||||
|
void sendMessage(Message message);
|
||||||
|
|
||||||
|
List<String> getUsers();
|
||||||
|
}
|
||||||
@@ -33,9 +33,9 @@ public class ChatController {
|
|||||||
|
|
||||||
private volatile String username;
|
private volatile String username;
|
||||||
|
|
||||||
private final ClientService clientService;
|
private ClientService clientService;
|
||||||
|
|
||||||
private final ChatClient chatClient;
|
private final ChatClientInterface chatClient;
|
||||||
|
|
||||||
public ChatBoxController getChatBoxController() {
|
public ChatBoxController getChatBoxController() {
|
||||||
return chatBoxController;
|
return chatBoxController;
|
||||||
@@ -112,6 +112,39 @@ public class ChatController {
|
|||||||
REFRESH_TIME);
|
REFRESH_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Another constructor to give the ChatClient directly instead of the Client Service used only
|
||||||
|
* for test purposes
|
||||||
|
*
|
||||||
|
* @param username
|
||||||
|
*/
|
||||||
|
public ChatController(String username, ChatClientInterface chatClient) {
|
||||||
|
this.username = username;
|
||||||
|
this.chatClient = chatClient;
|
||||||
|
chatModelMap = new LinkedHashMap<>();
|
||||||
|
localUserList = new ArrayList<>();
|
||||||
|
this.chatBoxController = new ChatBoxController(username, this);
|
||||||
|
this.logger = LogManager.getLogger(ChatController.class);
|
||||||
|
this.serverEventListener = this::handleServerEvent;
|
||||||
|
this.activeChatControllers = new HashMap<>();
|
||||||
|
|
||||||
|
this.timer = new Timer(true);
|
||||||
|
timer.schedule(
|
||||||
|
new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
receiveMessage();
|
||||||
|
checkWhisperUsers();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
logger.warn("Chat refresh failed: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
REFRESH_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAsActiveController(ClientService clientService) {
|
private void registerAsActiveController(ClientService clientService) {
|
||||||
synchronized (ACTIVE_CONTROLLERS) {
|
synchronized (ACTIVE_CONTROLLERS) {
|
||||||
ChatController oldController = ACTIVE_CONTROLLERS.get(clientService);
|
ChatController oldController = ACTIVE_CONTROLLERS.get(clientService);
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import javafx.beans.property.IntegerProperty;
|
|
||||||
import javafx.beans.property.SimpleIntegerProperty;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ChatModel, stores the data for a specific chat
|
* ChatModel, stores the data for a specific chat
|
||||||
@@ -12,7 +10,7 @@ import javafx.beans.property.SimpleIntegerProperty;
|
|||||||
*/
|
*/
|
||||||
public class ChatModel {
|
public class ChatModel {
|
||||||
|
|
||||||
private ArrayList<Consumer<Message>> listeners = new ArrayList<>();
|
private final ArrayList<Consumer<Message>> listeners = new ArrayList<>();
|
||||||
|
|
||||||
public ArrayList<Message> messages;
|
public ArrayList<Message> messages;
|
||||||
|
|
||||||
@@ -24,8 +22,6 @@ public class ChatModel {
|
|||||||
/** The person to send the message to If the chat is a whisper chat */
|
/** The person to send the message to If the chat is a whisper chat */
|
||||||
private String target;
|
private String target;
|
||||||
|
|
||||||
private final IntegerProperty count;
|
|
||||||
|
|
||||||
public int lobbyId;
|
public int lobbyId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,10 +33,9 @@ public class ChatModel {
|
|||||||
* @param target The username of the whisper recipient, or null for other chat types.
|
* @param target The username of the whisper recipient, or null for other chat types.
|
||||||
*/
|
*/
|
||||||
public ChatModel(ChatType chattype, String username, int lobbyId, String target) {
|
public ChatModel(ChatType chattype, String username, int lobbyId, String target) {
|
||||||
this.messages = new ArrayList<Message>();
|
this.messages = new ArrayList<>();
|
||||||
this.chattype = chattype;
|
this.chattype = chattype;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.count = new SimpleIntegerProperty(0);
|
|
||||||
this.lobbyId = lobbyId;
|
this.lobbyId = lobbyId;
|
||||||
this.target = target;
|
this.target = target;
|
||||||
}
|
}
|
||||||
@@ -62,7 +57,7 @@ public class ChatModel {
|
|||||||
*/
|
*/
|
||||||
public synchronized void addMessage(Message msg) {
|
public synchronized void addMessage(Message msg) {
|
||||||
messages.add(msg);
|
messages.add(msg);
|
||||||
listeners.stream().forEach((l) -> l.accept(messages.getLast()));
|
listeners.forEach((l) -> l.accept(messages.getLast()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ public class Message {
|
|||||||
private final String message;
|
private final String message;
|
||||||
public String sender;
|
public String sender;
|
||||||
public String timestamp;
|
public String timestamp;
|
||||||
public int lobbyId = 0;
|
public int lobbyId;
|
||||||
public String target = null;
|
public String target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a Message with a provided timestamp. Typically used when reconstructing messages
|
* Constructs a Message with a provided timestamp. Typically used when reconstructing messages
|
||||||
@@ -100,7 +100,7 @@ public class Message {
|
|||||||
* @return A formatted string containing all message attributes for server transmission.
|
* @return A formatted string containing all message attributes for server transmission.
|
||||||
*/
|
*/
|
||||||
public String toArgsString() {
|
public String toArgsString() {
|
||||||
String gameIdString = "";
|
String gameIdString;
|
||||||
if (lobbyId >= 0) {
|
if (lobbyId >= 0) {
|
||||||
gameIdString = " GAME=" + lobbyId;
|
gameIdString = " GAME=" + lobbyId;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.client.network;
|
package ch.unibas.dmi.dbis.cs108.casono.client.network;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.client.chat.ChatClientInterface;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.client.chat.Message;
|
import ch.unibas.dmi.dbis.cs108.casono.client.chat.Message;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.RequestParameter;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.RequestParameter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -12,7 +13,7 @@ import org.apache.logging.log4j.Logger;
|
|||||||
* from the server. It uses the ClientService to send commands and receive responses from the
|
* from the server. It uses the ClientService to send commands and receive responses from the
|
||||||
* server.
|
* server.
|
||||||
*/
|
*/
|
||||||
public class ChatClient {
|
public class ChatClient implements ChatClientInterface {
|
||||||
|
|
||||||
private final ClientService clientService;
|
private final ClientService clientService;
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
|
|||||||
+1
-2
@@ -195,8 +195,7 @@ public class ChatBoxController {
|
|||||||
() -> {
|
() -> {
|
||||||
try {
|
try {
|
||||||
ChatViewController chatViewController =
|
ChatViewController chatViewController =
|
||||||
new ChatViewController(
|
new ChatViewController(this.chatController, chatModel, this);
|
||||||
this.chatController, chatModel, this);
|
|
||||||
|
|
||||||
ChatKey chatKey;
|
ChatKey chatKey;
|
||||||
if (chatType.equals(ChatType.WHISPER)) {
|
if (chatType.equals(ChatType.WHISPER)) {
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<?import javafx.geometry.*?>
|
|
||||||
<?import javafx.scene.control.*?>
|
|
||||||
<?import javafx.scene.layout.*?>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Dieses Fenster wird später mit den Serveranfragen verknüpft,
|
|
||||||
um Nachrichten von Mitspielern und Systemmeldungen in Echtzeit anzuzeigen.
|
|
||||||
|
|
||||||
Der Chat unterscheidet intern zwischen:
|
|
||||||
- Player-to-Player (Privater 2-Personen-Chat)
|
|
||||||
- Lobby-Chat (Aktueller Raum)
|
|
||||||
- Globaler Chat (Gesamter Server)
|
|
||||||
|
|
||||||
Features, die später implementiert werden sollen:
|
|
||||||
- Schicke Chat-Bubbles mit Namen und Uhrzeit.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<VBox xmlns="http://javafx.com/javafx/21"
|
|
||||||
xmlns:fx="http://javafx.com/fxml/1"
|
|
||||||
fx:controller="ch.unibas.dmi.dbis.cs108.casono.client.ui.chatui.ChatViewController"
|
|
||||||
alignment="CENTER"
|
|
||||||
stylesheets="@chatui.css">
|
|
||||||
|
|
||||||
<!-- Innenabstand: Schafft oben, rechts und unten 30 Pixel Platz, links nur 10 Pixel (asymmetrisch) -->
|
|
||||||
<padding>
|
|
||||||
<Insets top="30" right="30" bottom="30" left="10"/>
|
|
||||||
</padding>
|
|
||||||
|
|
||||||
<children>
|
|
||||||
<VBox VBox.vgrow="ALWAYS"
|
|
||||||
styleClass="chat-box"
|
|
||||||
spacing="10"
|
|
||||||
maxWidth="Infinity">
|
|
||||||
|
|
||||||
<children>
|
|
||||||
<Label text="== CHAT ==" styleClass="chat-header" alignment="CENTER" maxWidth="Infinity"/>
|
|
||||||
<Region minHeight="4" styleClass="chat-separator"/>
|
|
||||||
|
|
||||||
<!-- Chatnachrichten werden hier hinzugefügt -->
|
|
||||||
<ScrollPane fx:id="chatScrollPane" fitToWidth="true" vbarPolicy="AS_NEEDED" hbarPolicy="NEVER" VBox.vgrow="ALWAYS" styleClass="chat-scroll-pane">
|
|
||||||
<content>
|
|
||||||
<VBox fx:id="chatVBox" spacing="10" styleClass="chat-VBox"/>
|
|
||||||
</content>
|
|
||||||
</ScrollPane>
|
|
||||||
|
|
||||||
<!-- Eingabebereich -->
|
|
||||||
<HBox spacing="10">
|
|
||||||
<!-- TODO: Größe des TextFields dynamisch anpassen -->
|
|
||||||
<TextField fx:id="inputField" HBox.hgrow="ALWAYS" promptText="Nachricht eingeben..." styleClass="gray-input-field" onAction="#sendMessage"/>
|
|
||||||
<Button fx:id="sendButton" text="SENDEN" onAction="#sendMessage" styleClass="yellow-button"/>
|
|
||||||
<Button fx:id="refreshButton" text="NEU" onAction="#showMessage" styleClass="yellow-button"/>
|
|
||||||
</HBox>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
.chat-box {
|
|
||||||
-fx-background-color: #0d9e3b;
|
|
||||||
-fx-background-radius: 58;
|
|
||||||
-fx-border-radius: 50;
|
|
||||||
-fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10;
|
|
||||||
-fx-border-width: 12;
|
|
||||||
-fx-padding: 20;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, rgba(0,0,0,1), 0, 0, 15, 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-header {
|
|
||||||
-fx-text-fill: #ffffff;
|
|
||||||
-fx-font-size: 22px;
|
|
||||||
-fx-font-weight: bold;
|
|
||||||
-fx-padding: 0 0 10 0;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, #000000, 0, 0, 3, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-separator {
|
|
||||||
-fx-background-color: #ffffff;
|
|
||||||
-fx-min-height: 4px;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, #000000, 0, 0, 3, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.black-input-field {
|
|
||||||
-fx-background-color: #1a1a1a;
|
|
||||||
-fx-text-fill: #ffffff;
|
|
||||||
-fx-font-family: "Courier New";
|
|
||||||
-fx-font-weight: bold;
|
|
||||||
-fx-background-radius: 8;
|
|
||||||
-fx-border-radius: 8;
|
|
||||||
-fx-border-color: #444444;
|
|
||||||
-fx-border-width: 2;
|
|
||||||
-fx-padding: 5 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
.black-input-field:hover {
|
|
||||||
-fx-translate-y: -3;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.black-input-field:focused {
|
|
||||||
-fx-border-color: #ffffff;
|
|
||||||
-fx-background-color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-input-field {
|
|
||||||
-fx-background-color: #333333;
|
|
||||||
-fx-text-fill: #ffffff;
|
|
||||||
-fx-font-family: "Courier New";
|
|
||||||
-fx-font-weight: bold;
|
|
||||||
-fx-background-radius: 8;
|
|
||||||
-fx-border-radius: 8;
|
|
||||||
-fx-border-color: #666666;
|
|
||||||
-fx-color-color: #cccccc;
|
|
||||||
-fx-border-width: 2;
|
|
||||||
-fx-padding: 5 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-input-field:hover {
|
|
||||||
-fx-translate-y: -3;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-input-field:focused {
|
|
||||||
-fx-border-color: #ffffff;
|
|
||||||
-fx-background-color: #333333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.yellow-button {
|
|
||||||
-fx-background-color: #b8860b;
|
|
||||||
-fx-border-color: #ffd700;
|
|
||||||
-fx-text-fill: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.red-button {
|
|
||||||
-fx-background-color: #8b0000;
|
|
||||||
-fx-border-color: #ff4444;
|
|
||||||
-fx-text-fill: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-button {
|
|
||||||
-fx-background-color: #333333;
|
|
||||||
-fx-border-color: #666666;
|
|
||||||
-fx-text-fill: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-button, .yellow-button, .red-button {
|
|
||||||
-fx-background-radius: 12;
|
|
||||||
-fx-border-radius: 12;
|
|
||||||
-fx-font-family: "Courier New";
|
|
||||||
-fx-font-weight: bold;
|
|
||||||
-fx-border-width: 2;
|
|
||||||
-fx-padding: 6 15;
|
|
||||||
-fx-cursor: hand;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gray-button:hover, .yellow-button:hover, .red-button:hover {
|
|
||||||
-fx-translate-y: -3;
|
|
||||||
-fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-scroll-pane {
|
|
||||||
-fx-background-color: transparent;
|
|
||||||
-fx-background: transparent;
|
|
||||||
-fx-border-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-VBox {
|
|
||||||
-fx-background-color: transparent;
|
|
||||||
-fx-background: transparent;
|
|
||||||
}
|
|
||||||
.scroll-pane {
|
|
||||||
-fx-background-color: transparent;
|
|
||||||
-fx-border-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar:vertical {
|
|
||||||
-fx-background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar .track {
|
|
||||||
-fx-background-color: #5c3d10;
|
|
||||||
-fx-background-insets: 0;
|
|
||||||
-fx-background-radius: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar .thumb {
|
|
||||||
-fx-background-color: #3d260a;
|
|
||||||
-fx-background-insets: 0;
|
|
||||||
-fx-background-radius: 5;
|
|
||||||
-fx-pref-width: 6;
|
|
||||||
-fx-pref-height: 6;
|
|
||||||
-fx-padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar:horizontal {
|
|
||||||
-fx-background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar:horizontal .track {
|
|
||||||
-fx-background-color: #5c3d10;
|
|
||||||
-fx-background-radius: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar:horizontal .thumb {
|
|
||||||
-fx-background-color: #3d260a;
|
|
||||||
-fx-background-radius: 5;
|
|
||||||
-fx-pref-height: 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-pane .scroll-bar:horizontal .thumb:hover {
|
|
||||||
-fx-pref-height: 10;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Queue;
|
||||||
|
|
||||||
|
public class ChatClientTest implements ChatClientInterface {
|
||||||
|
|
||||||
|
private ChatClientTest otherChatClient;
|
||||||
|
|
||||||
|
public final Queue<Message> messageQueue;
|
||||||
|
|
||||||
|
public ChatClientTest() {
|
||||||
|
this.messageQueue = new LinkedList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatClientTest(ChatClientTest otherChatClient) {
|
||||||
|
this.otherChatClient = otherChatClient;
|
||||||
|
this.messageQueue = new LinkedList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(Message message) {
|
||||||
|
otherChatClient.messageQueue.add(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Message> getMessages() {
|
||||||
|
List<Message> messages = new LinkedList<>();
|
||||||
|
while (!messageQueue.isEmpty()) {
|
||||||
|
Message message = messageQueue.poll();
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getUsers() {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,21 +1,151 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
public class ChatControllerTest {
|
public class ChatControllerTest {
|
||||||
|
|
||||||
|
ChatController chatController1;
|
||||||
|
ChatController chatController2;
|
||||||
|
|
||||||
|
String name1 = "testperson1";
|
||||||
|
String name2 = "testperson1";
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setup() {}
|
public void setup() {
|
||||||
|
ChatClientTest receivingChatClient = new ChatClientTest();
|
||||||
|
ChatClientTest sendingChatClient = new ChatClientTest(receivingChatClient);
|
||||||
|
this.chatController1 = new ChatController(name1, sendingChatClient);
|
||||||
|
this.chatController2 = new ChatController(name2, receivingChatClient);
|
||||||
|
}
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
public void teardown() {}
|
public void teardown() {}
|
||||||
|
|
||||||
/*
|
@Test
|
||||||
* @Test
|
public void sendGlobalMessage() {
|
||||||
* public void testChatController() {
|
ChatModel global = new ChatModel(ChatType.GLOBAL, name2, -1, null);
|
||||||
* Client client = new Client("user1");
|
chatController2.getChatModelMap().put(new ChatController.ChatKey(ChatType.GLOBAL), global);
|
||||||
* client.startApplication();
|
|
||||||
* }
|
Message msg1 = new Message(ChatType.GLOBAL, -1, name1, null, "Hallo Welt");
|
||||||
*/
|
Message msg2 = new Message(ChatType.GLOBAL, -1, name1, null, "$$Hallo$$Welt$$");
|
||||||
|
Message msg3 = new Message(ChatType.GLOBAL, -1, name1, null, "_*'=(&%$/§&%");
|
||||||
|
Message msg4 = new Message(ChatType.LOBBY, -1, name1, null, "Guten Tag");
|
||||||
|
Message msg5 = new Message(ChatType.LOBBY, -1, name1, null, "$/&)$)(&=)$=");
|
||||||
|
Message msg6 = new Message(ChatType.GLOBAL, -1, name1, null, "NAME=ANDERER_NUTZER");
|
||||||
|
Message msg7 = new Message(ChatType.GLOBAL, -1, name1, null, "________");
|
||||||
|
|
||||||
|
ArrayList<Message> messages = new ArrayList<>();
|
||||||
|
messages.add(msg1);
|
||||||
|
messages.add(msg2);
|
||||||
|
messages.add(msg3);
|
||||||
|
messages.add(msg4);
|
||||||
|
messages.add(msg5);
|
||||||
|
messages.add(msg6);
|
||||||
|
messages.add(msg7);
|
||||||
|
|
||||||
|
chatController1.onSendToNetwork(msg1);
|
||||||
|
chatController1.onSendToNetwork(msg2);
|
||||||
|
chatController1.onSendToNetwork(msg3);
|
||||||
|
chatController1.onSendToNetwork(msg4);
|
||||||
|
chatController1.onSendToNetwork(msg5);
|
||||||
|
chatController1.onSendToNetwork(msg6);
|
||||||
|
chatController1.onSendToNetwork(msg7);
|
||||||
|
|
||||||
|
chatController2.receiveMessage();
|
||||||
|
|
||||||
|
assertEquals(5, global.messages.size());
|
||||||
|
|
||||||
|
assertEquals(messages.get(0), global.messages.get(0));
|
||||||
|
assertEquals(messages.get(1), global.messages.get(1));
|
||||||
|
assertEquals(messages.get(2), global.messages.get(2));
|
||||||
|
|
||||||
|
assertNotEquals(messages.get(3), global.messages.get(3));
|
||||||
|
assertNotEquals(messages.get(4), global.messages.get(4));
|
||||||
|
|
||||||
|
assertEquals(messages.get(5), global.messages.get(3));
|
||||||
|
assertEquals(messages.get(6), global.messages.get(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void sendLobbyMessage() {
|
||||||
|
ChatModel lobby = new ChatModel(ChatType.LOBBY, name2, 1, null);
|
||||||
|
chatController2.getChatModelMap().put(new ChatController.ChatKey(ChatType.LOBBY), lobby);
|
||||||
|
|
||||||
|
Message msg1 = new Message(ChatType.LOBBY, 1, name1, null, "Hallo Welt");
|
||||||
|
Message msg2 = new Message(ChatType.LOBBY, 1, name1, null, "$$Hallo$$Welt$$");
|
||||||
|
Message msg3 = new Message(ChatType.LOBBY, 1, name1, null, "_*'=(&%$/§&%");
|
||||||
|
Message msg4 = new Message(ChatType.LOBBY, 4, name1, null, "Guten Tag");
|
||||||
|
Message msg5 = new Message(ChatType.LOBBY, 5, name1, null, "$/&)$)(&=)$=");
|
||||||
|
Message msg6 = new Message(ChatType.LOBBY, 1, name1, null, "NAME=ANDERER_NUTZER");
|
||||||
|
Message msg7 = new Message(ChatType.LOBBY, 1, name1, null, "________");
|
||||||
|
|
||||||
|
ArrayList<Message> messages = new ArrayList<>();
|
||||||
|
messages.add(msg1);
|
||||||
|
messages.add(msg2);
|
||||||
|
messages.add(msg3);
|
||||||
|
messages.add(msg4);
|
||||||
|
messages.add(msg5);
|
||||||
|
messages.add(msg6);
|
||||||
|
messages.add(msg7);
|
||||||
|
|
||||||
|
for (Message msg : messages) {
|
||||||
|
chatController1.onSendToNetwork(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
chatController2.receiveMessage();
|
||||||
|
|
||||||
|
assertEquals(5, lobby.messages.size());
|
||||||
|
|
||||||
|
assertEquals(messages.get(0), lobby.messages.get(0));
|
||||||
|
assertEquals(messages.get(1), lobby.messages.get(1));
|
||||||
|
assertEquals(messages.get(2), lobby.messages.get(2));
|
||||||
|
|
||||||
|
assertNotEquals(messages.get(3), lobby.messages.get(3));
|
||||||
|
assertNotEquals(messages.get(4), lobby.messages.get(4));
|
||||||
|
|
||||||
|
assertEquals(messages.get(5), lobby.messages.get(3));
|
||||||
|
assertEquals(messages.get(6), lobby.messages.get(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void sendWhisperMessage() {
|
||||||
|
ChatModel whisper = new ChatModel(ChatType.WHISPER, name2, -1, name1);
|
||||||
|
chatController2
|
||||||
|
.getChatModelMap()
|
||||||
|
.put(new ChatController.ChatKey(ChatType.WHISPER, name1), whisper);
|
||||||
|
|
||||||
|
Message msg1 = new Message(ChatType.WHISPER, -1, name1, name2, "Hallo Welt");
|
||||||
|
Message msg2 = new Message(ChatType.WHISPER, -1, name1, name2, "$$Hallo$$Welt$$");
|
||||||
|
Message msg3 = new Message(ChatType.WHISPER, -1, name1, name2, "_*'=(&%$/§&%");
|
||||||
|
Message msg4 = new Message(ChatType.WHISPER, -1, name1, name2, "NAME=ANDERER_NUTZER");
|
||||||
|
Message msg5 = new Message(ChatType.WHISPER, -1, name1, name2, "________");
|
||||||
|
|
||||||
|
ArrayList<Message> messages = new ArrayList<>();
|
||||||
|
messages.add(msg1);
|
||||||
|
messages.add(msg2);
|
||||||
|
messages.add(msg3);
|
||||||
|
messages.add(msg4);
|
||||||
|
messages.add(msg5);
|
||||||
|
|
||||||
|
for (Message msg : messages) {
|
||||||
|
chatController1.onSendToNetwork(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
chatController2.receiveMessage();
|
||||||
|
|
||||||
|
assertEquals(5, whisper.messages.size());
|
||||||
|
|
||||||
|
assertEquals(messages.get(0), whisper.messages.get(0));
|
||||||
|
assertEquals(messages.get(1), whisper.messages.get(1));
|
||||||
|
assertEquals(messages.get(2), whisper.messages.get(2));
|
||||||
|
|
||||||
|
assertEquals(messages.get(3), whisper.messages.get(3));
|
||||||
|
assertEquals(messages.get(4), whisper.messages.get(4));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user