Feat/chat tests #317
@@ -0,0 +1,16 @@
|
|||||||
|
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,37 @@ 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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,20 +2,149 @@ package ch.unibas.dmi.dbis.cs108.casono.client.chat;
|
|||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||||
|
|
||||||
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