This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new 504e29078 test(ai): cover the surrogate split the title cap comment 
claimed (#5752)
504e29078 is described below

commit 504e29078ae1c921c825ba1e2cf8122183f7eeae
Author: lizhimins <[email protected]>
AuthorDate: Fri Oct 9 12:25:38 2026 +0800

    test(ai): cover the surrogate split the title cap comment claimed (#5752)
---
 .../studio/ops/ai/conversation/AiConversationServiceTest.java     | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationServiceTest.java
index 61d51ee21..926657b1f 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationServiceTest.java
@@ -243,10 +243,16 @@ class AiConversationServiceTest {
     @Test
     void capTitleShouldCutOnCodePointBoundariesTest() {
         String emoji = String.valueOf(Character.toChars(0x1F600));
-        // 512 code points of emoji-bearing text; the old 512-UTF-16-unit cut 
split the last emoji.
+        // 32 x (15 y + 1 emoji) fills the 512-code-point budget exactly, but 
it is 544 UTF-16
+        // units, so the old unit-based cut stopped after 30 groups plus two 
y's: it lost code
+        // points here rather than splitting an emoji. The next case covers 
the split itself.
         String mixed = ("y".repeat(15) + emoji).repeat(32);
         assertThat(AiConversationService.capTitle(mixed + emoji + 
"z".repeat(600)))
                 .isEqualTo(mixed);
+        // A three-unit period puts the old 512-unit cut in the middle of a 
surrogate pair
+        // (512 = 3 x 170 + 2); the cap must drop the whole character instead 
of storing half of one.
+        assertThat(AiConversationService.capTitle(("y" + emoji).repeat(300)))
+                .isEqualTo(("y" + emoji).repeat(256));
         // 511 ASCII characters plus one emoji is exactly the 512-code-point 
budget; appending one
         // more emoji must drop it whole instead of leaving half a surrogate 
pair behind.
         assertThat(AiConversationService.capTitle("y".repeat(511) + emoji + 
emoji))

Reply via email to