@@ -2522,59 +2522,52 @@ mod tests {
25222522 }
25232523
25242524 #[ test]
2525- fn test_truncate_description_ascii ( ) {
2526- // Test with ASCII text
2527- assert_eq ! ( truncate_description( "Hello World" , 20 ) , "Hello World" ) ;
2528- assert_eq ! ( truncate_description( "Hello World" , 11 ) , "Hello World" ) ;
2529- assert_eq ! ( truncate_description( "Hello World" , 8 ) , "Hello..." ) ;
2530- assert_eq ! ( truncate_description( "Hello World" , 5 ) , "He..." ) ;
2531- }
2525+ fn test_truncate_description ( ) {
2526+ // Test normal length
2527+ let short = "Short description" ;
2528+ assert_eq ! ( truncate_description( short, 40 ) , "Short description" ) ;
2529+
2530+ // Test truncation
2531+ let long =
2532+ "This is a very long description that should be truncated because it exceeds the maximum length limit" ;
2533+ let result = truncate_description ( long, 40 ) ;
2534+ assert ! ( result. len( ) <= 40 ) ;
2535+ assert ! ( result. ends_with( "..." ) ) ;
2536+ // Length may be less than 40 due to trim_end() removing trailing spaces
2537+ assert ! ( result. len( ) >= 37 ) ; // At least max_length - 3 chars
2538+
2539+ // Test exact length
2540+ let exact = "A" . repeat ( 40 ) ;
2541+ assert_eq ! ( truncate_description( & exact, 40 ) , exact) ;
2542+
2543+ // Test very short max length
2544+ let result = truncate_description ( "Hello world" , 5 ) ;
2545+ assert_eq ! ( result, "He..." ) ;
2546+ assert_eq ! ( result. len( ) , 5 ) ;
2547+
2548+ // Test space trimming before ellipsis
2549+ let with_space = "Prompt to explain available tools and how" ;
2550+ let result = truncate_description ( with_space, 40 ) ;
2551+ assert ! ( !result. contains( " ..." ) ) ;
2552+ assert ! ( result. ends_with( "..." ) ) ;
2553+ assert_eq ! ( result, "Prompt to explain available tools and..." ) ;
25322554
2533- #[ test]
2534- fn test_truncate_description_cjk ( ) {
2535- // Test with CJK characters (3 bytes each in UTF-8)
2536- // Korean text from issue #3117
2555+ // Test CJK characters (fixes #3117, #3170)
25372556 let korean = "사용자가 작성한 글의 어색한 표현이나 오타를 수정하고 싶을 때" ;
25382557 let result = truncate_description ( korean, 40 ) ;
25392558 assert ! ( result. len( ) <= 40 ) ;
25402559 assert ! ( result. ends_with( "..." ) ) ;
2541-
2542- // Chinese text from issue #3170
2560+
25432561 let chinese = "移除 eagleeye-ec-databases 任務狀況確認,最後完成後把" ;
25442562 let result = truncate_description ( chinese, 60 ) ;
25452563 assert ! ( result. len( ) <= 60 ) ;
2546-
2547- // Japanese text
2564+
25482565 let japanese = "これは日本語のテキストです。長い文章をテストします。" ;
25492566 let result = truncate_description ( japanese, 30 ) ;
25502567 assert ! ( result. len( ) <= 30 ) ;
25512568 assert ! ( result. ends_with( "..." ) ) ;
2552- }
25532569
2554- #[ test]
2555- fn test_truncate_description_mixed ( ) {
2556- // Test with mixed ASCII and CJK
2557- let mixed = "CSR 페이지를 렌더링하고 있는데, html, 이미지는 화면에 잘 나타나는데" ;
2558- let result = truncate_description ( mixed, 60 ) ;
2559- assert ! ( result. len( ) <= 60 ) ;
2560-
2561- // Ensure no panic on exact boundary
2562- let text = "移除 eagleeye-ec-databases 任務狀況確認" ;
2563- let result = truncate_description ( text, 60 ) ;
2564- assert ! ( result. len( ) <= 60 ) ;
2565- }
2566-
2567- #[ test]
2568- fn test_truncate_description_edge_cases ( ) {
2569- // Empty string
2570+ // Test empty string
25702571 assert_eq ! ( truncate_description( "" , 10 ) , "" ) ;
2571-
2572- // Very short max_length
2573- assert_eq ! ( truncate_description( "Hello" , 3 ) , "..." ) ;
2574-
2575- // Single multibyte character
2576- let emoji = "😀" ;
2577- let result = truncate_description ( emoji, 10 ) ;
2578- assert ! ( result. len( ) <= 10 ) ;
25792572 }
25802573}
0 commit comments