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 de6b2c5 Add org.apache.commons.text.matcher.StringMatcher.size().
de6b2c5 is described below
commit de6b2c5629722dbd767d581ee66048d4f5040e6b
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jun 22 20:42:50 2020 -0400
Add org.apache.commons.text.matcher.StringMatcher.size().
---
pom.xml | 12 ++++-
src/changes/changes.xml | 3 +-
.../text/matcher/AbstractStringMatcher.java | 56 +++++++++++++++++++++-
.../apache/commons/text/matcher/StringMatcher.java | 10 ++++
.../commons/text/matcher/StringMatcherTest.java | 15 ++++++
5 files changed, 91 insertions(+), 5 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2f36083..340a3fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
<version>51</version>
</parent>
<artifactId>commons-text</artifactId>
- <version>1.8.1-SNAPSHOT</version>
+ <version>1.9-SNAPSHOT</version>
<name>Apache Commons Text</name>
<description>Apache Commons Text is a library focused on algorithms working
on strings.</description>
<url>https://commons.apache.org/proper/commons-text</url>
@@ -37,7 +37,7 @@
<commons.componentid>text</commons.componentid>
<commons.module.name>org.apache.commons.text</commons.module.name>
- <commons.release.version>1.8</commons.release.version>
+ <commons.release.version>1.9</commons.release.version>
<commons.release.desc>(Java 8+)</commons.release.desc>
<commons.jira.id>TEXT</commons.jira.id>
@@ -90,6 +90,14 @@
<version>3.16.1</version>
<scope>test</scope>
</dependency>
+ <!--
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.7</version>
+ <scope>test</scope>
+ </dependency>
+ -->
</dependencies>
<build>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 3e577bd..2f1582b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -45,11 +45,12 @@ The <action> type attribute can be add,update,fix,remove.
</properties>
<body>
- <release version="1.8.1" date="2019-MM-DD" description="Release 1.8.1">
+ <release version="1.9" date="2019-MM-DD" description="Release 1.8.1">
<action issue="TEXT-166" type="fix" dev="kinow" due-to="Mikko
Maunu">Removed non-existing parameter from Javadocs and spelled out parameters
in throws.</action>
<action issue="TEXT-149" type="fix" dev="kinow" due-to="Yuji
Konishi">StringEscapeUtils.unescapeCsv doesn't remove quotes at begin and end
of string.</action>
<action issue="TEXT-174" type="fix" dev="ggregory"
due-to="furkilic">ScriptStringLookup does not accept ":" #126.</action>
<action type="update" dev="ggregory" due-to="Johan
Hammar">[javadoc] Fix compiler warnings in Java code example in Javadoc
#124.</action>
+ <action type="add" dev="ggregory" due-to="Gary
Gregory">Add org.apache.commons.text.matcher.StringMatcher.size().</action>
<action issue="TEXT-177" type="update" dev="ggregory" due-to="Gary
Gregory">Update from Apache Commons Lang 3.9 to 3.10.</action>
<action type="update" dev="ggregory" due-to="Gary
Gregory">[test] junit-jupiter 5.5.1 -> 5.5.2.</action>
<action type="update" dev="ggregory" due-to="Gary
Gregory">[test] org.assertj:assertj-core 3.13.2 -> 3.16.1.</action>
diff --git
a/src/main/java/org/apache/commons/text/matcher/AbstractStringMatcher.java
b/src/main/java/org/apache/commons/text/matcher/AbstractStringMatcher.java
index e2431c1..c38d723 100644
--- a/src/main/java/org/apache/commons/text/matcher/AbstractStringMatcher.java
+++ b/src/main/java/org/apache/commons/text/matcher/AbstractStringMatcher.java
@@ -65,6 +65,16 @@ abstract class AbstractStringMatcher implements
StringMatcher {
public int isMatch(final char[] buffer, final int start, final int
bufferStart, final int bufferEnd) {
return ch == buffer[start] ? 1 : 0;
}
+
+ /**
+ * Returns 1.
+ *
+ * @since 1.9
+ */
+ @Override
+ public int size() {
+ return 1;
+ }
}
/**
@@ -104,6 +114,17 @@ abstract class AbstractStringMatcher implements
StringMatcher {
public int isMatch(final char[] buffer, final int start, final int
bufferStart, final int bufferEnd) {
return Arrays.binarySearch(chars, buffer[start]) >= 0 ? 1 : 0;
}
+
+ /**
+ * Returns 1.
+ *
+ * @since 1.9
+ */
+ @Override
+ public int size() {
+ return 1;
+ }
+
}
/**
@@ -135,6 +156,17 @@ abstract class AbstractStringMatcher implements
StringMatcher {
public int isMatch(final char[] buffer, final int start, final int
bufferStart, final int bufferEnd) {
return 0;
}
+
+ /**
+ * Returns 0.
+ *
+ * @since 1.9
+ */
+ @Override
+ public int size() {
+ return 0;
+ }
+
}
/**
@@ -171,11 +203,11 @@ abstract class AbstractStringMatcher implements
StringMatcher {
*/
@Override
public int isMatch(final char[] buffer, int start, final int
bufferStart, final int bufferEnd) {
- final int len = chars.length;
+ final int len = size();
if (start + len > bufferEnd) {
return 0;
}
- for (int i = 0; i < chars.length; i++, start++) {
+ for (int i = 0; i < len; i++, start++) {
if (chars[i] != buffer[start]) {
return 0;
}
@@ -187,6 +219,16 @@ abstract class AbstractStringMatcher implements
StringMatcher {
public String toString() {
return super.toString() + ' ' + Arrays.toString(chars);
}
+
+ /**
+ * Returns the size of the string to match given in the constructor.
+ *
+ * @since 1.9
+ */
+ @Override
+ public int size() {
+ return chars.length;
+ }
}
@@ -224,6 +266,16 @@ abstract class AbstractStringMatcher implements
StringMatcher {
public int isMatch(final char[] buffer, final int start, final int
bufferStart, final int bufferEnd) {
return buffer[start] <= SPACE_INT ? 1 : 0;
}
+
+ /**
+ * Returns 1.
+ *
+ * @since 1.9
+ */
+ @Override
+ public int size() {
+ return 1;
+ }
}
/**
diff --git a/src/main/java/org/apache/commons/text/matcher/StringMatcher.java
b/src/main/java/org/apache/commons/text/matcher/StringMatcher.java
index 1a69e2c..07925fa 100644
--- a/src/main/java/org/apache/commons/text/matcher/StringMatcher.java
+++ b/src/main/java/org/apache/commons/text/matcher/StringMatcher.java
@@ -56,4 +56,14 @@ public interface StringMatcher {
*/
int isMatch(char[] buffer, int start, int bufferStart, int bufferEnd);
+ /**
+ * Returns the size of the matching string. Defaults to 0.
+ *
+ * @return the size of the matching string.
+ * @since 1.9
+ */
+ default int size() {
+ return 0;
+ }
+
}
diff --git
a/src/test/java/org/apache/commons/text/matcher/StringMatcherTest.java
b/src/test/java/org/apache/commons/text/matcher/StringMatcherTest.java
index a46182a..22bf989 100644
--- a/src/test/java/org/apache/commons/text/matcher/StringMatcherTest.java
+++ b/src/test/java/org/apache/commons/text/matcher/StringMatcherTest.java
@@ -17,6 +17,7 @@
package org.apache.commons.text.matcher;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
@@ -32,6 +33,7 @@ public class StringMatcherTest {
@Test
public void testCharMatcher_char() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.charMatcher('c');
+ assertEquals(1, matcher.size());
assertThat(matcher.isMatch(BUFFER2, 0, 0,
BUFFER2.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER2, 1, 0,
BUFFER2.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER2, 2, 0,
BUFFER2.length)).isEqualTo(1);
@@ -43,6 +45,7 @@ public class StringMatcherTest {
@Test
public void testCharSetMatcher_charArray() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.charSetMatcher("ace".toCharArray());
+ assertEquals(1, matcher.size());
assertThat(matcher.isMatch(BUFFER2, 0, 0,
BUFFER2.length)).isEqualTo(1);
assertThat(matcher.isMatch(BUFFER2, 1, 0,
BUFFER2.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER2, 2, 0,
BUFFER2.length)).isEqualTo(1);
@@ -60,6 +63,7 @@ public class StringMatcherTest {
@Test
public void testCharSetMatcher_String() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.charSetMatcher("ace");
+ assertEquals(1, matcher.size());
assertThat(matcher.isMatch(BUFFER2, 0, 0,
BUFFER2.length)).isEqualTo(1);
assertThat(matcher.isMatch(BUFFER2, 1, 0,
BUFFER2.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER2, 2, 0,
BUFFER2.length)).isEqualTo(1);
@@ -77,6 +81,7 @@ public class StringMatcherTest {
@Test
public void testCommaMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.commaMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.commaMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 0, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 1, 0,
BUFFER1.length)).isEqualTo(1);
@@ -86,6 +91,7 @@ public class StringMatcherTest {
@Test
public void testDoubleQuoteMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.doubleQuoteMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.doubleQuoteMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 11, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 12, 0,
BUFFER1.length)).isEqualTo(1);
@@ -97,6 +103,7 @@ public class StringMatcherTest {
// all the onus is on the caller, so invalid inputs are not
// the concern of StringMatcher, and are not bugs
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.stringMatcher("bc");
+ assertEquals(2, matcher.size());
assertThat(matcher.isMatch(BUFFER2, 1, 1,
BUFFER2.length)).isEqualTo(2);
assertThat(matcher.isMatch(BUFFER2, 1, 0, 3)).isEqualTo(2);
assertThat(matcher.isMatch(BUFFER2, 1, 0, 2)).isEqualTo(0);
@@ -105,6 +112,7 @@ public class StringMatcherTest {
@Test
public void testNoneMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.noneMatcher();
+ assertEquals(0, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.noneMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 0, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 1, 0,
BUFFER1.length)).isEqualTo(0);
@@ -124,6 +132,7 @@ public class StringMatcherTest {
@Test
public void testQuoteMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.quoteMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.quoteMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 10, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 11, 0,
BUFFER1.length)).isEqualTo(1);
@@ -133,6 +142,7 @@ public class StringMatcherTest {
@Test
public void testSingleQuoteMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.singleQuoteMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.singleQuoteMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 10, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 11, 0,
BUFFER1.length)).isEqualTo(1);
@@ -142,6 +152,7 @@ public class StringMatcherTest {
@Test
public void testSpaceMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.spaceMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.spaceMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 4, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 5, 0,
BUFFER1.length)).isEqualTo(1);
@@ -151,6 +162,7 @@ public class StringMatcherTest {
@Test
public void testSplitMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.splitMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.splitMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 2, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 3, 0,
BUFFER1.length)).isEqualTo(1);
@@ -166,6 +178,7 @@ public class StringMatcherTest {
@Test
public void testStringMatcher_String() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.stringMatcher("bc");
+ assertEquals(2, matcher.size());
assertThat(matcher.isMatch(BUFFER2, 0, 0,
BUFFER2.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER2, 1, 0,
BUFFER2.length)).isEqualTo(2);
assertThat(matcher.isMatch(BUFFER2, 2, 0,
BUFFER2.length)).isEqualTo(0);
@@ -182,6 +195,7 @@ public class StringMatcherTest {
@Test
public void testTabMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.tabMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.tabMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 2, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 3, 0,
BUFFER1.length)).isEqualTo(1);
@@ -191,6 +205,7 @@ public class StringMatcherTest {
@Test
public void testTrimMatcher() {
final StringMatcher matcher =
StringMatcherFactory.INSTANCE.trimMatcher();
+ assertEquals(1, matcher.size());
assertThat(StringMatcherFactory.INSTANCE.trimMatcher()).isSameAs(matcher);
assertThat(matcher.isMatch(BUFFER1, 2, 0,
BUFFER1.length)).isEqualTo(0);
assertThat(matcher.isMatch(BUFFER1, 3, 0,
BUFFER1.length)).isEqualTo(1);