Author: centic
Date: Tue May  6 06:04:44 2025
New Revision: 1925429

URL: http://svn.apache.org/viewvc?rev=1925429&view=rev
Log:
Bug 69667: Test more variants of valid and invalid usernames

Modified:
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/TestSXSSFSheet.java
    poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestWorkbook.java

Modified: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/TestSXSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/TestSXSSFSheet.java?rev=1925429&r1=1925428&r2=1925429&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/TestSXSSFSheet.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/TestSXSSFSheet.java
 Tue May  6 06:04:44 2025
@@ -63,6 +63,7 @@ public final class TestSXSSFSheet extend
     @Override
     @Test
     protected void cloneSheet() {
+        //noinspection Convert2MethodRef
         RuntimeException ex = assertThrows(RuntimeException.class, () -> 
super.cloneSheet());
         assertEquals("Not Implemented", ex.getMessage());
     }
@@ -70,6 +71,7 @@ public final class TestSXSSFSheet extend
     @Override
     @Test
     protected void cloneSheetMultipleTimes() {
+        //noinspection Convert2MethodRef
         RuntimeException ex = assertThrows(RuntimeException.class, () -> 
super.cloneSheetMultipleTimes());
         assertEquals("Not Implemented", ex.getMessage());
     }
@@ -80,6 +82,7 @@ public final class TestSXSSFSheet extend
     @Override
     @Test
     protected void shiftMerged() {
+        //noinspection Convert2MethodRef
         RuntimeException ex = assertThrows(RuntimeException.class, () -> 
super.shiftMerged());
         assertEquals("Not Implemented", ex.getMessage());
     }
@@ -92,6 +95,7 @@ public final class TestSXSSFSheet extend
     @Override
     @Test
     protected void bug35084() {
+        //noinspection Convert2MethodRef
         RuntimeException ex = assertThrows(RuntimeException.class, () -> 
super.bug35084());
         assertEquals("Not Implemented", ex.getMessage());
     }

Modified: 
poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestWorkbook.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestWorkbook.java?rev=1925429&r1=1925428&r2=1925429&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestWorkbook.java 
(original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/hssf/model/TestWorkbook.java Tue 
May  6 06:04:44 2025
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
@@ -174,15 +175,51 @@ final class TestWorkbook {
 
     @Test
     void testSetUserName() throws IOException {
+        // normal username
+        setAndReadUserName("username", false);
+
+        // 109 characters max if no "multibyte" character
+        
setAndReadUserName("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
 false);
+
+        // 54 max if there is at least one "multibyte" character
+        
setAndReadUserName("€23456789012345678901234567890123456789012345678901234", 
false);
+
+        // also works for very strange characters
+        
setAndReadUserName("\uD801\uDC37\uD852\uDF62€$ⵃⵥꭓꭃꭦ﹄4Uカ\uD800\uDFB1\uD800\uDFC9\uD834\uDF45\uD834\uDF4B\uD83E\uDF22\uD83E\uDF53\uD83E\uDFB5\uD83E\uDFF6\uD801\uDC37\uD852\uDF62€$ⵃⵥꭓꭃꭦ﹄4Uカ\uD800\uDFB1\uD800\uDFC9\uD834\uDF45\uD834\uDF4B",
 false);
+
+        // fails with longer strings
+        
setAndReadUserName("12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890",
+                true);
+        
setAndReadUserName("€234567890123456789012345678901234567890123456789012345", 
true);
+        
setAndReadUserName("\uD801\uDC37\uD852\uDF62€$ⵃⵥꭓꭃꭦ﹄4Uカ\uD800\uDFB1\uD800\uDFC9\uD834\uDF45\uD834\uDF4B\uD83E\uDF22\uD83E\uDF53\uD83E\uDFB5\uD83E\uDFF6\uD801\uDC37\uD852\uDF62€$ⵃⵥꭓꭃꭦ﹄4Uカ\uD800\uDFB1\uD800\uDFC9\uD834\uDF45\uD834\uDF4B\uDF4B",
+                true);
+    }
+
+    private static void setAndReadUserName(String username, boolean fails) 
throws IOException {
         try (HSSFWorkbook wb = new HSSFWorkbook()) {
             InternalWorkbook iwb = wb.getInternalWorkbook();
-            iwb.getWriteAccess().setUsername("username");
-            assertEquals("username", iwb.getWriteAccess().getUsername());
+
+            String prev = iwb.getWriteAccess().getUsername();
+            if (fails) {
+                assertThrows(IllegalArgumentException.class,
+                        () -> iwb.getWriteAccess().setUsername(username),
+                        "Expected to fail with username " + username);
+                assertEquals(prev, iwb.getWriteAccess().getUsername(),
+                        "Username should not have been changed, but had: " + 
prev + " and " +
+                                iwb.getWriteAccess().getUsername());
+
+                // cannot test more if username is too long
+                return;
+            } else {
+                iwb.getWriteAccess().setUsername(username);
+            }
+
+            assertEquals(username, iwb.getWriteAccess().getUsername());
             try (UnsynchronizedByteArrayOutputStream os = 
UnsynchronizedByteArrayOutputStream.builder().get()) {
                 wb.write(os);
                 try (HSSFWorkbook wb2 = new HSSFWorkbook(os.toInputStream())) {
                     InternalWorkbook iwb2 = wb2.getInternalWorkbook();
-                    assertEquals("username", 
iwb2.getWriteAccess().getUsername());
+                    assertEquals(username, 
iwb2.getWriteAccess().getUsername());
                 }
             }
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to