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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git


The following commit(s) were added to refs/heads/master by this push:
     new 9e34d3d2 Add more test coverage (#732)
9e34d3d2 is described below

commit 9e34d3d2b2f58c35937477d859042920cdaf3a00
Author: Dominik Stadler <[email protected]>
AuthorDate: Fri Dec 12 13:49:13 2025 +0100

    Add more test coverage (#732)
    
    * Enable test which can be enabled now
    
    * Ensure test does not fail on non-US default locale
    
    * Cover a few lines/branches
    
    Add some more tests to cover a bit more.
    
    Also apply some IDE-suggestions, assert-order,
    simplify assertions.
    
    * Adjust based on review comments
    
    Remove added @Deprecated
    Remove comments which silence warnings in IDEs
    Inline local variables
    
    * Revert "Ensure test does not fail on non-US default locale"
    
    This reverts commit 5a6af9ed28cc7523044150a5b57b109fbfc28cd8.
    
    * Some more minor adjustments of added tests based on code review
---
 .../java/org/apache/commons/text/OssFuzzTest.java  | Bin 16930 -> 16771 bytes
 .../apache/commons/text/StringSubstitutorTest.java |   8 +++++-
 .../apache/commons/text/TextStringBuilderTest.java |   7 +++++
 .../org/apache/commons/text/WordUtilsTest.java     |  28 ++++++++++++++++++-
 .../text/lookup/StringLookupFactoryTest.java       |  13 +++++++++
 .../text/similarity/IntersectionResultTest.java    |   5 +++-
 .../text/similarity/LevenshteinResultsTest.java    |  16 +++++++++++
 .../similarity/LongestCommonSubsequenceTest.java   |   4 +++
 .../text/translate/CharSequenceTranslatorTest.java |  18 ++++++++++--
 .../commons/text/translate/OctalUnescaperTest.java |  31 +++++++++++++++++++++
 .../text/translate/SinglePassTranslatorTest.java   |  14 ++++++++--
 .../text/translate/UnicodeUnescaperTest.java       |   5 ++++
 12 files changed, 142 insertions(+), 7 deletions(-)

diff --git a/src/test/java/org/apache/commons/text/OssFuzzTest.java 
b/src/test/java/org/apache/commons/text/OssFuzzTest.java
index 0b4e1a55..c3772e5a 100644
Binary files a/src/test/java/org/apache/commons/text/OssFuzzTest.java and 
b/src/test/java/org/apache/commons/text/OssFuzzTest.java differ
diff --git a/src/test/java/org/apache/commons/text/StringSubstitutorTest.java 
b/src/test/java/org/apache/commons/text/StringSubstitutorTest.java
index 75f112ba..4022fc3d 100644
--- a/src/test/java/org/apache/commons/text/StringSubstitutorTest.java
+++ b/src/test/java/org/apache/commons/text/StringSubstitutorTest.java
@@ -193,7 +193,7 @@ public class StringSubstitutorTest {
     }
 
     @AfterEach
-    public void tearDown() throws Exception {
+    public void tearDown() {
         values = null;
     }
 
@@ -1085,4 +1085,10 @@ public class StringSubstitutorTest {
         assertEqualsCharSeq("value $${escaped}", replace(sub, org));
     }
 
+    @Test
+    void testToString() {
+        final StringSubstitutor s = new StringSubstitutor(null, "prefix", 
"suffix");
+        String str = s.toString();
+        assertTrue(str.contains("\"prefix\""), "Had: " + str);
+    }
 }
diff --git a/src/test/java/org/apache/commons/text/TextStringBuilderTest.java 
b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
index ff2cc7d0..1900c19d 100644
--- a/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
+++ b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
@@ -550,6 +550,13 @@ class TextStringBuilderTest {
         assertEquals(length, sb.toCharArray().length);
     }
 
+    @Test
+    void testConstructorCharSequenceNull() {
+        final TextStringBuilder sb = new TextStringBuilder((CharSequence) 
null);
+        assertEquals(TextStringBuilder.CAPACITY, sb.capacity());
+        assertEquals(0, sb.toCharArray().length);
+    }
+
     @Test
     void testConstructorDefault() {
         final TextStringBuilder sb = new TextStringBuilder();
diff --git a/src/test/java/org/apache/commons/text/WordUtilsTest.java 
b/src/test/java/org/apache/commons/text/WordUtilsTest.java
index facbf31c..5ae96de4 100644
--- a/src/test/java/org/apache/commons/text/WordUtilsTest.java
+++ b/src/test/java/org/apache/commons/text/WordUtilsTest.java
@@ -177,14 +177,16 @@ class WordUtilsTest {
 
     @Test
     void testContainsAllWords_StringString() {
-        assertFalse(WordUtils.containsAllWords(null, (String) null));
+        assertFalse(WordUtils.containsAllWords(null));
         assertFalse(WordUtils.containsAllWords(null, ""));
         assertFalse(WordUtils.containsAllWords(null, "ab"));
 
+        assertFalse(WordUtils.containsAllWords(""));
         assertFalse(WordUtils.containsAllWords("", (String) null));
         assertFalse(WordUtils.containsAllWords("", ""));
         assertFalse(WordUtils.containsAllWords("", "ab"));
 
+        assertFalse(WordUtils.containsAllWords("foo"));
         assertFalse(WordUtils.containsAllWords("foo", (String) null));
         assertFalse(WordUtils.containsAllWords("bar", ""));
         assertFalse(WordUtils.containsAllWords("zzabyycdxx", "by"));
@@ -321,6 +323,30 @@ class WordUtilsTest {
                 new char[] { '\uD800', '\uDF14', '\uD800', '\uDF18' }));
     }
 
+    @Test
+    void testIsDelimiter() {
+        assertFalse(WordUtils.isDelimiter('.', null));
+        assertTrue(WordUtils.isDelimiter(' ', null));
+
+        assertFalse(WordUtils.isDelimiter(' ', new char[] { '.' }));
+        assertTrue(WordUtils.isDelimiter('.', new char[] { '.' }));
+
+        assertFalse(WordUtils.isDelimiter(' ', new char[] { '.', '_', 'a' }));
+        assertTrue(WordUtils.isDelimiter('.', new char[] { '.', '_', 'a', '.' 
}));
+    }
+
+    @Test
+    void testIsDelimiterCodePoint() {
+        assertFalse(WordUtils.isDelimiter((int) '.', null));
+        assertTrue(WordUtils.isDelimiter((int) ' ', null));
+
+        assertFalse(WordUtils.isDelimiter((int) ' ', new char[] { '.' }));
+        assertTrue(WordUtils.isDelimiter((int) '.', new char[] { '.' }));
+
+        assertFalse(WordUtils.isDelimiter((int) ' ', new char[] { '.', '_', 
'a' }));
+        assertTrue(WordUtils.isDelimiter((int) '.', new char[] { '.', '_', 
'a', '.' }));
+    }
+
     @Test
     void testLANG1292() {
         // Prior to fix, this was throwing StringIndexOutOfBoundsException
diff --git 
a/src/test/java/org/apache/commons/text/lookup/StringLookupFactoryTest.java 
b/src/test/java/org/apache/commons/text/lookup/StringLookupFactoryTest.java
index bdc6cac1..43e6f237 100644
--- a/src/test/java/org/apache/commons/text/lookup/StringLookupFactoryTest.java
+++ b/src/test/java/org/apache/commons/text/lookup/StringLookupFactoryTest.java
@@ -257,6 +257,14 @@ class StringLookupFactoryTest {
         assertSame(XmlEncoderStringLookup.INSTANCE, 
stringLookupFactory.xmlEncoderStringLookup());
     }
 
+    /**
+     * Tests that we return the singleton.
+     */
+    @Test
+    void testDeprecatedSingletons() {
+        assertSame(StringLookupFactory.INSTANCE_BASE64_DECODER, 
StringLookupFactory.INSTANCE.base64StringLookup());
+    }
+
     @Test
     void testXmlStringLookup() {
         final StringLookupFactory stringLookupFactory = 
StringLookupFactory.INSTANCE;
@@ -279,4 +287,9 @@ class StringLookupFactoryTest {
         assertEquals(XmlStringLookupTest.DATA, 
StringLookupFactory.INSTANCE.xmlStringLookup(XmlStringLookupTest.EMPTY_MAP).apply(key).trim());
     }
 
+    @Test
+    void testClear() {
+        // this will clear out the global cache in ConstantStringLookup
+        StringLookupFactory.clear();
+    }
 }
diff --git 
a/src/test/java/org/apache/commons/text/similarity/IntersectionResultTest.java 
b/src/test/java/org/apache/commons/text/similarity/IntersectionResultTest.java
index 5bb15d6b..70230b86 100644
--- 
a/src/test/java/org/apache/commons/text/similarity/IntersectionResultTest.java
+++ 
b/src/test/java/org/apache/commons/text/similarity/IntersectionResultTest.java
@@ -36,7 +36,7 @@ class IntersectionResultTest {
         };
 
         // Test a different instance with same values
-        Assertions.assertEquals(results[0], new IntersectionResult(0, 0, 0));
+        Assertions.assertEquals(new IntersectionResult(0, 0, 0), results[0]);
 
         final Object something = new Object();
         for (int i = 0; i < results.length; i++) {
@@ -45,6 +45,9 @@ class IntersectionResultTest {
             for (int j = 0; j < results.length; j++) {
                 Assertions.assertEquals(results[i].equals(results[j]), i == j);
             }
+
+            Assertions.assertFalse(results[i].equals(null), "Should not be 
Equal to null");
+            Assertions.assertNotEquals("Test", results[i], "Should not be 
Equal to a different type of object");
         }
     }
 
diff --git 
a/src/test/java/org/apache/commons/text/similarity/LevenshteinResultsTest.java 
b/src/test/java/org/apache/commons/text/similarity/LevenshteinResultsTest.java
index af8f5d92..ac93db06 100644
--- 
a/src/test/java/org/apache/commons/text/similarity/LevenshteinResultsTest.java
+++ 
b/src/test/java/org/apache/commons/text/similarity/LevenshteinResultsTest.java
@@ -40,6 +40,15 @@ class LevenshteinResultsTest {
         assertFalse(levenshteinResults.equals(levenshteinResultsTwo));
     }
 
+    @Test
+    void testEqualsDifferentDistance() {
+        final Integer integerOne = 1662;
+        final Integer integerTwo = 1164;
+        final LevenshteinResults levenshteinResults = new 
LevenshteinResults(integerOne, integerOne, integerOne, integerOne);
+        final LevenshteinResults levenshteinResultsTwo = new 
LevenshteinResults(integerTwo, integerOne, integerOne, integerOne);
+        assertFalse(levenshteinResults.equals(levenshteinResultsTwo));
+    }
+
     @Test
     void testEqualsSameObject() {
         final Integer integer = 1662;
@@ -62,4 +71,11 @@ class LevenshteinResultsTest {
         assertFalse(levenshteinResults.equals(null));
     }
 
+    @Test
+    void testEqualsWithDifferentObject() {
+        final Integer integer = -647;
+        final LevenshteinResults levenshteinResults = new 
LevenshteinResults(integer, null, null, integer);
+        assertFalse(levenshteinResults.equals("Test"));
+    }
+
 }
diff --git 
a/src/test/java/org/apache/commons/text/similarity/LongestCommonSubsequenceTest.java
 
b/src/test/java/org/apache/commons/text/similarity/LongestCommonSubsequenceTest.java
index 2ca0a4b9..8063c911 100644
--- 
a/src/test/java/org/apache/commons/text/similarity/LongestCommonSubsequenceTest.java
+++ 
b/src/test/java/org/apache/commons/text/similarity/LongestCommonSubsequenceTest.java
@@ -89,6 +89,8 @@ class LongestCommonSubsequenceTest {
         assertEquals("", subject.logestCommonSubsequence("", ""));
         assertEquals("", subject.logestCommonSubsequence("left", ""));
         assertEquals("", subject.logestCommonSubsequence("", "right"));
+        assertEquals("", subject.logestCommonSubsequence("l", "a"));
+        assertEquals("", subject.logestCommonSubsequence("left", "a"));
         assertEquals("fog", subject.logestCommonSubsequence("frog", "fog"));
         assertEquals("", subject.logestCommonSubsequence("fly", "ant"));
         assertEquals("h", subject.logestCommonSubsequence("elephant", 
"hippo"));
@@ -106,6 +108,8 @@ class LongestCommonSubsequenceTest {
         assertEquals("", subject.longestCommonSubsequence("", ""));
         assertEquals("", subject.longestCommonSubsequence("left", ""));
         assertEquals("", subject.longestCommonSubsequence("", "right"));
+        assertEquals("", subject.longestCommonSubsequence("l", "a"));
+        assertEquals("", subject.longestCommonSubsequence("left", "a"));
         assertEquals("fog", subject.longestCommonSubsequence("frog", "fog"));
         assertEquals("", subject.longestCommonSubsequence("fly", "ant"));
         assertEquals("h", subject.longestCommonSubsequence("elephant", 
"hippo"));
diff --git 
a/src/test/java/org/apache/commons/text/translate/CharSequenceTranslatorTest.java
 
b/src/test/java/org/apache/commons/text/translate/CharSequenceTranslatorTest.java
index 7585f71d..3bb33283 100644
--- 
a/src/test/java/org/apache/commons/text/translate/CharSequenceTranslatorTest.java
+++ 
b/src/test/java/org/apache/commons/text/translate/CharSequenceTranslatorTest.java
@@ -17,9 +17,11 @@
  package org.apache.commons.text.translate;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.IOException;
+import java.io.UncheckedIOException;
 import java.io.Writer;
 
 import org.junit.jupiter.api.Test;
@@ -46,8 +48,20 @@ class CharSequenceTranslatorTest {
         final CharSequenceTranslator charSequenceTranslatorThree = new 
TestCharSequenceTranslator();
         final CharSequenceTranslator aggregatedTranslator = 
charSequenceTranslatorOne.with(charSequenceTranslatorTwo, 
charSequenceTranslatorThree);
         aggregatedTranslator.translate("", 0, null);
-        assertTrue(aggregatedTranslator instanceof AggregateTranslator);
+        assertInstanceOf(AggregateTranslator.class, aggregatedTranslator);
         assertEquals(3, translateInvocationCounter);
     }
 
+    @Test
+    void testIOException() {
+        final CharSequenceTranslator translator = new CharSequenceTranslator() 
{
+            @Override
+            public int translate(CharSequence input, int index, Writer writer) 
throws IOException {
+                throw new IOException("Test exception");
+            }
+        };
+
+        assertThrows(UncheckedIOException.class,
+                () -> translator.translate("."));
+    }
 }
diff --git 
a/src/test/java/org/apache/commons/text/translate/OctalUnescaperTest.java 
b/src/test/java/org/apache/commons/text/translate/OctalUnescaperTest.java
index e9b78b44..1f7d4b7b 100644
--- a/src/test/java/org/apache/commons/text/translate/OctalUnescaperTest.java
+++ b/src/test/java/org/apache/commons/text/translate/OctalUnescaperTest.java
@@ -38,6 +38,10 @@ class OctalUnescaperTest {
         result = oue.translate(input);
         assertEquals("\377", result, "Failed to unescape octal characters via 
the between method");
 
+        input = "\\777";
+        result = oue.translate(input);
+        assertEquals("\777", result, "Failed to unescape octal characters via 
the between method");
+
         input = "\\377 and";
         result = oue.translate(input);
         assertEquals("\377 and", result, "Failed to unescape octal characters 
via the between method");
@@ -79,4 +83,31 @@ class OctalUnescaperTest {
         assertEquals("\\999", result, "Failed to ignore an out of range octal 
character via the between method");
     }
 
+    @Test
+    void testInvalid() {
+        final OctalUnescaper oue = new OctalUnescaper();
+        final String input = "\\4a";
+        final String result = oue.translate(input);
+        assertEquals("\4a", result, "Failed to unescape octal characters via 
the between method");
+    }
+
+    @Test
+    void testHighLowSurrogate() {
+        final OctalUnescaper oue = new OctalUnescaper();
+        String input = "\\377\uD800and";
+        String result = oue.translate(input);
+        assertEquals("\377\uD800and", result, "Failed to unescape octal 
characters via the between method");
+
+        input = "\\377\uD83D\uDE80and";
+        result = oue.translate(input);
+        assertEquals("\377\uD83D\uDE80and", result, "Failed to unescape octal 
characters via the between method");
+
+        input = "\\377\uD83D\uDC00and";
+        result = oue.translate(input);
+        assertEquals("\377\uD83D\uDC00and", result, "Failed to unescape octal 
characters via the between method");
+
+        input = "\\377\uD83D";
+        result = oue.translate(input);
+        assertEquals("\377\uD83D", result, "Failed to unescape octal 
characters via the between method");
+    }
 }
diff --git 
a/src/test/java/org/apache/commons/text/translate/SinglePassTranslatorTest.java 
b/src/test/java/org/apache/commons/text/translate/SinglePassTranslatorTest.java
index 37e6fdeb..12ade3f3 100644
--- 
a/src/test/java/org/apache/commons/text/translate/SinglePassTranslatorTest.java
+++ 
b/src/test/java/org/apache/commons/text/translate/SinglePassTranslatorTest.java
@@ -19,7 +19,6 @@ package org.apache.commons.text.translate;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
 
@@ -34,7 +33,7 @@ class SinglePassTranslatorTest {
     private final SinglePassTranslator dummyTranslator = new 
SinglePassTranslator() {
 
         @Override
-        void translateWhole(final CharSequence input, final Writer writer) 
throws IOException {
+        void translateWhole(final CharSequence input, final Writer writer) {
             // noop
         }
     };
@@ -63,4 +62,15 @@ class SinglePassTranslatorTest {
         assertThrows(IllegalArgumentException.class, () -> 
dummyTranslator.translate("(,Fk", 647, null));
     }
 
+    @Test
+    void testTranslateThrowsIllegalArgumentExceptionWithNonAnonymousClass() {
+        assertThrows(IllegalArgumentException.class, () -> new 
TestTranslator().translate("(,Fk", 647, null));
+    }
+
+    private static final class TestTranslator extends SinglePassTranslator {
+        @Override
+        void translateWhole(final CharSequence input, final Writer writer) {
+            // noop
+        }
+    }
 }
diff --git 
a/src/test/java/org/apache/commons/text/translate/UnicodeUnescaperTest.java 
b/src/test/java/org/apache/commons/text/translate/UnicodeUnescaperTest.java
index cd106c66..f20d7106 100644
--- a/src/test/java/org/apache/commons/text/translate/UnicodeUnescaperTest.java
+++ b/src/test/java/org/apache/commons/text/translate/UnicodeUnescaperTest.java
@@ -49,4 +49,9 @@ class UnicodeUnescaperTest {
         final String result = escaper.translate(input);
         assertEquals("G", result, "Failed to unescape Unicode characters with 
many 'u' characters");
     }
+
+    @Test
+    void testTooShort() {
+        assertThrows(IllegalArgumentException.class, () -> new 
UnicodeUnescaper().translate("\\u"));
+    }
 }

Reply via email to