From 88d37bca49ee37c8fc0bc18defb667e9509f7db0 Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Sun, 10 May 2026 16:43:41 +0200 Subject: [PATCH 1/5] Fix: Messages with only special characters can be sent in the chat --- .../dmi/dbis/cs108/casono/client/network/ClientService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java index 2ab6f0c..7503824 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java @@ -248,7 +248,7 @@ public class ClientService { // digits/words/colons static Pattern responseRex = Pattern.compile( - "(?\\w+)=(('(?([^']|\\')+)')|(?[+-]?[-\\d\\w:]+))"); + "(?\\w+)=(('(?([^']|\\')+)')|(?[^ ]+))"); /** * Removes escape characters from a string, specifically converting escaped single quotes (\') From 351ac06aab9bd2e7aec2610f6d9a98aa36c734ec Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Sun, 10 May 2026 16:45:46 +0200 Subject: [PATCH 2/5] Test: Make sure that the conversion of response lines into parameters is executed correctly --- .../client/network/ClientServiceTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java new file mode 100644 index 0000000..6efca40 --- /dev/null +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java @@ -0,0 +1,52 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.network; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.RequestParameter; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +public class ClientServiceTest { + + + @Test + public void parsingResponse() { + ArrayList params = new ArrayList<>(); + + params.add(new RequestParameter("KEY", "VALUE")); + params.add(new RequestParameter("STANDARD_TEXT", "Lorem ipsum dolor sit amet, consectetur adipiscing elit")); + params.add(new RequestParameter("TEXT_BASED_EMOJI_WITHOUT_QUOTATION_MARKS", ";-)")); + params.add(new RequestParameter("TEXT_WITH_QUOTATION_MARKS", "SOMEBODY SAYS: 'HALLO WELT'")); + params.add(new RequestParameter("NUMBERS", "123456789")); + params.add(new RequestParameter("SOME_SPECIAL_CHARACTERS", "°^!§$%&/()=[]}?*+~'#`")); + params.add(new RequestParameter("WRONG_CHARACTERS", "# * ~ +")); + params.add(new RequestParameter("WRONG_TEXT", "HELLO WORLD")); + + ArrayList paramsAsResponseLines = new ArrayList<>(); + + for (RequestParameter parameter : params) { + if (!parameter.key().equals("WRONG_TEXT") && !parameter.key().equals("WRONG_CHARACTERS") && parameter.value().contains(" ")) { + String newValue = "'" + parameter.value() + "'"; + paramsAsResponseLines.add(String.format("%s=%s", parameter.key(), newValue)); + } else { + paramsAsResponseLines.add(String.format("%s=%s", parameter.key(), parameter.value())); + } + } + + assertEquals(8, paramsAsResponseLines.size()); + + + List msgRes = new ArrayList<>(ClientService.convertToRequestParameters(paramsAsResponseLines)); + + assertEquals(6, msgRes.size()); + + for (int i = 0; i < 6; i++) { + assertEquals(params.get(i), msgRes.get(i)); + } + + assert(!msgRes.contains(params.get(6))); + assert(!msgRes.contains(params.get(7))); + } +} From 47475dc4d303e7409affd8469a770b968fa5411c Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Sun, 10 May 2026 16:49:15 +0200 Subject: [PATCH 3/5] Style: Apply Spotless --- .../casono/client/network/ClientService.java | 3 +- .../client/network/ClientServiceTest.java | 34 +++++++++++-------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java index 7503824..f2ace09 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java @@ -247,8 +247,7 @@ public class ClientService { // Allow primitive values to contain hyphens (UUIDs) in addition to // digits/words/colons static Pattern responseRex = - Pattern.compile( - "(?\\w+)=(('(?([^']|\\')+)')|(?[^ ]+))"); + Pattern.compile("(?\\w+)=(('(?([^']|\\')+)')|(?[^ ]+))"); /** * Removes escape characters from a string, specifically converting escaped single quotes (\') diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java index 6efca40..46b5718 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientServiceTest.java @@ -1,44 +1,48 @@ package ch.unibas.dmi.dbis.cs108.casono.client.network; +import static org.junit.jupiter.api.Assertions.assertEquals; + import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.RequestParameter; +import java.util.*; import org.junit.jupiter.api.Test; -import java.util.*; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; - public class ClientServiceTest { - @Test public void parsingResponse() { ArrayList params = new ArrayList<>(); params.add(new RequestParameter("KEY", "VALUE")); - params.add(new RequestParameter("STANDARD_TEXT", "Lorem ipsum dolor sit amet, consectetur adipiscing elit")); + params.add( + new RequestParameter( + "STANDARD_TEXT", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit")); params.add(new RequestParameter("TEXT_BASED_EMOJI_WITHOUT_QUOTATION_MARKS", ";-)")); - params.add(new RequestParameter("TEXT_WITH_QUOTATION_MARKS", "SOMEBODY SAYS: 'HALLO WELT'")); + params.add( + new RequestParameter("TEXT_WITH_QUOTATION_MARKS", "SOMEBODY SAYS: 'HALLO WELT'")); params.add(new RequestParameter("NUMBERS", "123456789")); params.add(new RequestParameter("SOME_SPECIAL_CHARACTERS", "°^!§$%&/()=[]}?*+~'#`")); params.add(new RequestParameter("WRONG_CHARACTERS", "# * ~ +")); params.add(new RequestParameter("WRONG_TEXT", "HELLO WORLD")); - ArrayList paramsAsResponseLines = new ArrayList<>(); + ArrayList paramsAsResponseLines = new ArrayList<>(); for (RequestParameter parameter : params) { - if (!parameter.key().equals("WRONG_TEXT") && !parameter.key().equals("WRONG_CHARACTERS") && parameter.value().contains(" ")) { + if (!parameter.key().equals("WRONG_TEXT") + && !parameter.key().equals("WRONG_CHARACTERS") + && parameter.value().contains(" ")) { String newValue = "'" + parameter.value() + "'"; paramsAsResponseLines.add(String.format("%s=%s", parameter.key(), newValue)); } else { - paramsAsResponseLines.add(String.format("%s=%s", parameter.key(), parameter.value())); + paramsAsResponseLines.add( + String.format("%s=%s", parameter.key(), parameter.value())); } } assertEquals(8, paramsAsResponseLines.size()); - - List msgRes = new ArrayList<>(ClientService.convertToRequestParameters(paramsAsResponseLines)); + List msgRes = + new ArrayList<>(ClientService.convertToRequestParameters(paramsAsResponseLines)); assertEquals(6, msgRes.size()); @@ -46,7 +50,7 @@ public class ClientServiceTest { assertEquals(params.get(i), msgRes.get(i)); } - assert(!msgRes.contains(params.get(6))); - assert(!msgRes.contains(params.get(7))); + assert (!msgRes.contains(params.get(6))); + assert (!msgRes.contains(params.get(7))); } } From b30af0c212f012c00a93ba076e64db268ccc62f9 Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Sun, 10 May 2026 17:33:42 +0200 Subject: [PATCH 4/5] Fix: changed descriptive text of ChatUI elements --- .../resources/ui-structure/components/chatui/chatbox.fxml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/ui-structure/components/chatui/chatbox.fxml b/src/main/resources/ui-structure/components/chatui/chatbox.fxml index 2a6c526..8475cd6 100644 --- a/src/main/resources/ui-structure/components/chatui/chatbox.fxml +++ b/src/main/resources/ui-structure/components/chatui/chatbox.fxml @@ -16,9 +16,9 @@ - From 8790b06277590eb504c88adb6e3ffda83f6b9c39 Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Thu, 14 May 2026 11:44:41 +0200 Subject: [PATCH 5/5] Fix: apostrophe-only messages are now prohibited --- .../dbis/cs108/casono/client/ui/chatui/ChatViewController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatViewController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatViewController.java index fc9bff8..7e3699c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatViewController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatViewController.java @@ -77,6 +77,9 @@ public class ChatViewController implements Initializable { */ public void sendMessage() { String message = inputField.getText().trim(); + + message = message.replace("'", " "); + if (!message.isEmpty()) { inputField.clear(); String currentUsername = controller.getCurrentUsername();