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:46 UTC

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

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("");
     }
 }