You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/06/27 12:48:44 UTC

[commons-text] branch master updated (d3d596dd -> 66890789)

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

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


    from d3d596dd Add null-check in RandomStringGenerator#selectFrom() to avoid NullPointerException #434
     new 1594ddd5 Complete test
     new 66890789 Add RandomStringGenerator.builder()

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/changes/changes.xml                            |  1 +
 .../apache/commons/text/RandomStringGenerator.java | 16 ++++-
 .../apache/commons/text/TextRandomProvider.java    |  2 +-
 .../commons/text/RandomStringGeneratorTest.java    | 69 ++++++++++++++--------
 4 files changed, 59 insertions(+), 29 deletions(-)


[commons-text] 02/02: Add RandomStringGenerator.builder()

Posted by gg...@apache.org.
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

commit 668907895826e4fa6a9db7a3709a98390d1a825e
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 27 08:48:40 2023 -0400

    Add RandomStringGenerator.builder()
---
 src/changes/changes.xml                            |  1 +
 .../apache/commons/text/RandomStringGenerator.java | 16 +++++--
 .../apache/commons/text/TextRandomProvider.java    |  2 +-
 .../commons/text/RandomStringGeneratorTest.java    | 50 +++++++++++-----------
 4 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 82f27e10..87329deb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -65,6 +65,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action issue="TEXT-224" type="add" dev="ggregory" due-to="PJ Fanning, Gary Gregory">Set SecureProcessing feature in XmlStringLookup by default.</action>
     <action issue="TEXT-224" type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.xmlStringLookup(Map&lt;String, Boolean&gt;...).</action>
     <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add @FunctionalInterface to FormatFactory.</action>
+    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add RandomStringGenerator.builder().</action>
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/setup-java from 3 to 3.5.1.</action>
diff --git a/src/main/java/org/apache/commons/text/RandomStringGenerator.java b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
index 8ae6d002..8f7bd5ae 100644
--- a/src/main/java/org/apache/commons/text/RandomStringGenerator.java
+++ b/src/main/java/org/apache/commons/text/RandomStringGenerator.java
@@ -35,7 +35,7 @@ import org.apache.commons.lang3.Validate;
  *
  * <pre>
  * // Generates a 20 code point string, using only the letters a-z
- * RandomStringGenerator generator = new RandomStringGenerator.Builder()
+ * RandomStringGenerator generator = RandomStringGenerator.builder()
  *     .withinRange('a', 'z').build();
  * String randomLetters = generator.generate(20);
  * </pre>
@@ -43,7 +43,7 @@ import org.apache.commons.lang3.Validate;
  * // Using Apache Commons RNG for randomness
  * UniformRandomProvider rng = RandomSource.create(...);
  * // Generates a 20 code point string, using only the letters a-z
- * RandomStringGenerator generator = new RandomStringGenerator.Builder()
+ * RandomStringGenerator generator = RandomStringGenerator.builder()
  *     .withinRange('a', 'z')
  *     .usingRandom(rng::nextInt) // uses Java 8 syntax
  *     .build();
@@ -205,7 +205,7 @@ public final class RandomStringGenerator {
          * <pre>
          * {@code
          *     UniformRandomProvider rng = RandomSource.create(...);
-         *     RandomStringGenerator gen = new RandomStringGenerator.Builder()
+         *     RandomStringGenerator gen = RandomStringGenerator.builder()
          *         .usingRandom(rng::nextInt)
          *         // additional builder calls as needed
          *         .build();
@@ -290,6 +290,16 @@ public final class RandomStringGenerator {
         }
     }
 
+    /**
+     * Constructs a new builder.
+     * @return a new builder.
+     *
+     * @since 1.11.0
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
     /**
      * The smallest allowed code point (inclusive).
      */
diff --git a/src/main/java/org/apache/commons/text/TextRandomProvider.java b/src/main/java/org/apache/commons/text/TextRandomProvider.java
index 268b23be..0190d9cb 100644
--- a/src/main/java/org/apache/commons/text/TextRandomProvider.java
+++ b/src/main/java/org/apache/commons/text/TextRandomProvider.java
@@ -29,7 +29,7 @@ package org.apache.commons.text;
  * <pre>
  * {@code
  * UniformRandomProvider rng = RandomSource.create(...);
- * RandomStringGenerator gen = new RandomStringGenerator.Builder()
+ * RandomStringGenerator gen = RandomStringGenerator.builder()
  *     .usingRandom(rng::nextInt)
  *     // additional builder calls as needed
  *     .build();
diff --git a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
index 14f91f52..9895500c 100644
--- a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
+++ b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
@@ -41,22 +41,22 @@ public class RandomStringGeneratorTest {
 
     @Test
     public void testBadMaximumCodePoint() {
-        assertThatIllegalArgumentException().isThrownBy(() -> new RandomStringGenerator.Builder().withinRange(0, Character.MAX_CODE_POINT + 1));
+        assertThatIllegalArgumentException().isThrownBy(() -> RandomStringGenerator.builder().withinRange(0, Character.MAX_CODE_POINT + 1));
     }
 
     @Test
     public void testBadMinAndMax() {
-        assertThatIllegalArgumentException().isThrownBy(() -> new RandomStringGenerator.Builder().withinRange(2, 1));
+        assertThatIllegalArgumentException().isThrownBy(() -> RandomStringGenerator.builder().withinRange(2, 1));
     }
 
     @Test
     public void testBadMinimumCodePoint() {
-        assertThatIllegalArgumentException().isThrownBy(() -> new RandomStringGenerator.Builder().withinRange(-1, 1));
+        assertThatIllegalArgumentException().isThrownBy(() -> RandomStringGenerator.builder().withinRange(-1, 1));
     }
 
     @Test
     public void testChangeOfFilter() {
-        final RandomStringGenerator.Builder builder = new RandomStringGenerator.Builder().withinRange('a', 'z')
+        final RandomStringGenerator.Builder builder = RandomStringGenerator.builder().withinRange('a', 'z')
                 .filteredBy(A_FILTER);
         final String str = builder.filteredBy(B_FILTER).build().generate(100);
 
@@ -69,7 +69,7 @@ public class RandomStringGeneratorTest {
     public void testGenerateMinMaxLength() {
         final int minLength = 0;
         final int maxLength = 3;
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().build();
         final String str = generator.generate(minLength, maxLength);
         assertThat(codePointLength(str)).isBetween(0, 3);
     }
@@ -77,7 +77,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testGenerateMinMaxLengthInvalidLength() {
         assertThatIllegalArgumentException().isThrownBy(() -> {
-            final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+            final RandomStringGenerator generator = RandomStringGenerator.builder().build();
             generator.generate(-1, 0);
         });
     }
@@ -85,7 +85,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testGenerateMinMaxLengthMinGreaterThanMax() {
         assertThatIllegalArgumentException().isThrownBy(() -> {
-            final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+            final RandomStringGenerator generator = RandomStringGenerator.builder().build();
             generator.generate(1, 0);
         });
     }
@@ -93,7 +93,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testGenerateTakingIntThrowsNullPointerException() {
         assertThatNullPointerException().isThrownBy(() -> {
-            final RandomStringGenerator.Builder randomStringGeneratorBuilder = new RandomStringGenerator.Builder();
+            final RandomStringGenerator.Builder randomStringGeneratorBuilder = RandomStringGenerator.builder();
             final CharacterPredicate[] characterPredicateArray = new CharacterPredicate[2];
             randomStringGeneratorBuilder.filteredBy(characterPredicateArray);
             final RandomStringGenerator randomStringGenerator = randomStringGeneratorBuilder.build();
@@ -105,14 +105,14 @@ public class RandomStringGeneratorTest {
     @Test
     public void testInvalidLength() {
         assertThatIllegalArgumentException().isThrownBy(() -> {
-            final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+            final RandomStringGenerator generator = RandomStringGenerator.builder().build();
             generator.generate(-1);
         });
     }
 
     @Test
     public void testMultipleFilters() {
-        final String str = new RandomStringGenerator.Builder().withinRange('a', 'd')
+        final String str = RandomStringGenerator.builder().withinRange('a', 'd')
                 .filteredBy(A_FILTER, B_FILTER).build().generate(5000);
 
         boolean aFound = false;
@@ -134,7 +134,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testNoLoneSurrogates() {
         final int length = 5000;
-        final String str = new RandomStringGenerator.Builder().build().generate(length);
+        final String str = RandomStringGenerator.builder().build().generate(length);
 
         char lastChar = str.charAt(0);
         for (int i = 1; i < str.length(); i++) {
@@ -163,7 +163,7 @@ public class RandomStringGeneratorTest {
 
         // Request a string in an area of the Basic Multilingual Plane that is
         // largely occupied by private characters
-        final String str = new RandomStringGenerator.Builder().withinRange(startOfPrivateBMPChars,
+        final String str = RandomStringGenerator.builder().withinRange(startOfPrivateBMPChars,
                 Character.MIN_SUPPLEMENTARY_CODE_POINT - 1).build().generate(5000);
 
         int i = 0;
@@ -176,7 +176,7 @@ public class RandomStringGeneratorTest {
 
     @Test
     public void testRemoveFilters() {
-        final RandomStringGenerator.Builder builder = new RandomStringGenerator.Builder().withinRange('a', 'z')
+        final RandomStringGenerator.Builder builder = RandomStringGenerator.builder().withinRange('a', 'z')
                 .filteredBy(A_FILTER);
 
         builder.filteredBy();
@@ -196,7 +196,7 @@ public class RandomStringGeneratorTest {
     public void testSelectFromCharArray() {
         final String str = "abc";
         final char[] charArray = str.toCharArray();
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom(charArray).build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().selectFrom(charArray).build();
 
         final String randomText = generator.generate(5);
 
@@ -208,7 +208,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testSelectFromCharVarargs() {
         final String str = "abc";
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom('a', 'b', 'c').build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().selectFrom('a', 'b', 'c').build();
         final String randomText = generator.generate(5);
         for (final char c : randomText.toCharArray()) {
             assertThat(str.indexOf(c) != -1).isTrue();
@@ -219,7 +219,7 @@ public class RandomStringGeneratorTest {
     public void testSelectFromCharVarargs2() {
         final String str = "abcde";
         // @formatter:off
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder()
+        final RandomStringGenerator generator = RandomStringGenerator.builder()
                 .selectFrom()
                 .selectFrom(null)
                 .selectFrom('a', 'b')
@@ -236,7 +236,7 @@ public class RandomStringGeneratorTest {
 
     @Test
     public void testSelectFromCharVarargSize1() {
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom('a').build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().selectFrom('a').build();
         final String randomText = generator.generate(5);
         for (final char c : randomText.toCharArray()) {
             assertEquals('a', c);
@@ -245,7 +245,7 @@ public class RandomStringGeneratorTest {
 
     @Test
     public void testSelectFromEmptyCharVarargs() {
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom().build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().selectFrom().build();
         final String randomText = generator.generate(5);
         for (final char c : randomText.toCharArray()) {
             assertTrue(c >= Character.MIN_CODE_POINT && c <= Character.MAX_CODE_POINT);
@@ -255,14 +255,14 @@ public class RandomStringGeneratorTest {
     @Test
     public void testSelectFromNullCharVarargs() {
         final int length = 5;
-        RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom(null).build();
+        RandomStringGenerator generator = RandomStringGenerator.builder().selectFrom(null).build();
         String randomText = generator.generate(length);
         assertThat(codePointLength(randomText)).isEqualTo(length);
         for (final char c : randomText.toCharArray()) {
             assertTrue(c >= Character.MIN_CODE_POINT && c <= Character.MAX_CODE_POINT);
         }
         //
-        final Builder builder = new RandomStringGenerator.Builder().selectFrom('a');
+        final Builder builder = RandomStringGenerator.builder().selectFrom('a');
         generator = builder.build();
         randomText = generator.generate(length);
         for (final char c : randomText.toCharArray()) {
@@ -280,7 +280,7 @@ public class RandomStringGeneratorTest {
     @Test
     public void testSetLength() {
         final int length = 99;
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().build();
         final String str = generator.generate(length);
         assertThat(codePointLength(str)).isEqualTo(length);
     }
@@ -290,7 +290,7 @@ public class RandomStringGeneratorTest {
         final char testChar = 'a';
         final TextRandomProvider testRandom = n -> testChar;
 
-        final String str = new RandomStringGenerator.Builder().usingRandom(testRandom).build().generate(10);
+        final String str = RandomStringGenerator.builder().usingRandom(testRandom).build().generate(10);
         for (final char c : str.toCharArray()) {
             assertThat(c).isEqualTo(testChar);
         }
@@ -300,7 +300,7 @@ public class RandomStringGeneratorTest {
     public void testWithinMultipleRanges() {
         final int length = 5000;
         final char[][] pairs = {{'a', 'z'}, {'0', '9'}};
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder()
+        final RandomStringGenerator generator = RandomStringGenerator.builder()
                 .withinRange(pairs).build();
         final String str = generator.generate(length);
 
@@ -324,7 +324,7 @@ public class RandomStringGeneratorTest {
         final int length = 5000;
         final int minimumCodePoint = 'a';
         final int maximumCodePoint = 'z';
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder()
+        final RandomStringGenerator generator = RandomStringGenerator.builder()
                 .withinRange(minimumCodePoint, maximumCodePoint).build();
         final String str = generator.generate(length);
 
@@ -338,7 +338,7 @@ public class RandomStringGeneratorTest {
 
     @Test
     public void testZeroLength() {
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().build();
+        final RandomStringGenerator generator = RandomStringGenerator.builder().build();
         assertThat(generator.generate(0)).isEqualTo("");
     }
 }


[commons-text] 01/02: Complete test

Posted by gg...@apache.org.
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

commit 1594ddd5bad69919bf7ea935999c17fe531b499d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 27 08:43:22 2023 -0400

    Complete test
---
 .../commons/text/RandomStringGeneratorTest.java    | 23 ++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
index 4228e6e6..14f91f52 100644
--- a/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
+++ b/src/test/java/org/apache/commons/text/RandomStringGeneratorTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.fail;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.commons.text.RandomStringGenerator.Builder;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -220,6 +221,7 @@ public class RandomStringGeneratorTest {
         // @formatter:off
         final RandomStringGenerator generator = new RandomStringGenerator.Builder()
                 .selectFrom()
+                .selectFrom(null)
                 .selectFrom('a', 'b')
                 .selectFrom('a', 'b', 'c')
                 .selectFrom('a', 'b', 'c', 'd')
@@ -253,9 +255,26 @@ public class RandomStringGeneratorTest {
     @Test
     public void testSelectFromNullCharVarargs() {
         final int length = 5;
-        final RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom(null).build();
-        final String randomText = generator.generate(length);
+        RandomStringGenerator generator = new RandomStringGenerator.Builder().selectFrom(null).build();
+        String randomText = generator.generate(length);
         assertThat(codePointLength(randomText)).isEqualTo(length);
+        for (final char c : randomText.toCharArray()) {
+            assertTrue(c >= Character.MIN_CODE_POINT && c <= Character.MAX_CODE_POINT);
+        }
+        //
+        final Builder builder = new RandomStringGenerator.Builder().selectFrom('a');
+        generator = builder.build();
+        randomText = generator.generate(length);
+        for (final char c : randomText.toCharArray()) {
+            assertEquals('a', c);
+        }
+        // null input resets
+        generator = builder.selectFrom(null).build();
+        randomText = generator.generate(length);
+        assertThat(codePointLength(randomText)).isEqualTo(length);
+        for (final char c : randomText.toCharArray()) {
+            assertTrue(c >= Character.MIN_CODE_POINT && c <= Character.MAX_CODE_POINT);
+        }
     }
 
     @Test