diff --git a/pom.xml b/pom.xml
index d774921..24ba137 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.github.mifmif
generex
- 0.0.2-SNAPSHOT
+ 0.0.2
Generex
https://github.com/mifmif/Generex/tree/master
Generex A Java Library for regex to Strings generation
@@ -383,14 +383,11 @@
automaton
1.11-8
-
-
junit
junit
4.11
test
-
diff --git a/src/main/java/com/mifmif/common/regex/Generex.java b/src/main/java/com/mifmif/common/regex/Generex.java
index af13b19..d071c56 100644
--- a/src/main/java/com/mifmif/common/regex/Generex.java
+++ b/src/main/java/com/mifmif/common/regex/Generex.java
@@ -19,7 +19,9 @@
package com.mifmif.common.regex;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import com.mifmif.common.regex.util.Iterable;
@@ -41,7 +43,23 @@
*/
public class Generex implements Iterable {
+ private Map predefinedCharacterClasses = new HashMap() {
+ private static final long serialVersionUID = 1L;
+
+ {
+ put("\\\\d","[0-9]");
+ put("\\\\D","[^0-9]");
+ put("\\\\s","[ \t\n\f\r]");
+ put("\\\\S","[^ \t\n\f\r]");
+ put("\\\\w","[a-zA-Z_0-9]");
+ put("\\\\W","[^a-zA-Z_0-9]");
+ }
+ };
+
public Generex(String regex) {
+ for (String key : predefinedCharacterClasses.keySet()) {
+ regex = regex.replaceAll(key, predefinedCharacterClasses.get(key));
+ }
regExp = new RegExp(regex);
automaton = regExp.toAutomaton();
}
@@ -116,6 +134,7 @@ public String getFirstMatch() {
result = result.concat("" + node.getMinChar());
node = node.getNextNodes().get(0);
}
+ result = result.substring(1);
return result;
}
@@ -275,7 +294,12 @@ private String prepareRandom(String strMatch, State state, int minLength, int ma
}
Random random = new Random();
Transition randomTransition = transitions.get(random.nextInt(transitions.size()));
- char randomChar = (char) (random.nextInt(randomTransition.getMax() - randomTransition.getMin()) + randomTransition.getMin());
+ int diff = randomTransition.getMax() - randomTransition.getMin();
+ int randomOffset = diff;
+ if( diff > 0 ) {
+ randomOffset = (int) (random.nextInt(diff));
+ }
+ char randomChar = (char) (randomOffset + randomTransition.getMin());
return prepareRandom(strMatch + randomChar, randomTransition.getDest(), minLength, maxLength);
}
diff --git a/src/test/java/com/mifmif/common/regex/GenerexIteratorTest.java b/src/test/java/com/mifmif/common/regex/GenerexIteratorTest.java
new file mode 100644
index 0000000..0a47da6
--- /dev/null
+++ b/src/test/java/com/mifmif/common/regex/GenerexIteratorTest.java
@@ -0,0 +1,69 @@
+package com.mifmif.common.regex;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import com.mifmif.common.regex.util.Iterator;
+
+/**
+ * @author Myk Kolisnyk
+ *
+ */
+@RunWith(Parameterized.class)
+public class GenerexIteratorTest {
+
+ private String pattern;
+ private Generex generex;
+
+ @Parameters(name = "Test random: {0}")
+ public static Collection