From 5af823934e6b5eaee3bcd9994c3dcb1e05e8d189 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Fri, 21 Aug 2020 12:57:03 +0200 Subject: [PATCH 1/6] adding test showing the problematic handling of optional capture groups --- .../lanwen/verbalregex/RealWorldUnitTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java b/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java index cfbbb49..b504100 100644 --- a/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java +++ b/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static ru.lanwen.verbalregex.VerbalExpression.regex; @@ -149,4 +150,21 @@ public void captureAfterNewLineHasANamedGroup() { assertThat(some, equalTo(expression.getText(lineBreak + some + text, captureName))); } + + @Test + public void missingOptionalCaptureGroupReturnsEmptyStringNotStringContainingNullLiteral() { + final VerbalExpression expression = VerbalExpression.regex(). + startOfLine() + .capture("optionalCapture") + .oneOf("a", "b") + .endCapture() + .count(0, 1) + .then("c") + .endOfLine() + .build(); + final String testString = "c"; + assertThat(expression, matchesExactly(testString)); + assertThat(expression.getText("c", "optionalCapture"), not(equalTo("null"))); + assertThat(expression.getText("c", "optionalCapture"), equalTo("")); + } } From 0c1a4e784fbb43138d66b8adb3627ee1a4743c3f Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Fri, 21 Aug 2020 13:05:22 +0200 Subject: [PATCH 2/6] do not return "null"-String when an optional capture group is actually not matched --- .../java/ru/lanwen/verbalregex/VerbalExpression.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java b/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java index 75d1945..57ef244 100644 --- a/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java +++ b/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java @@ -762,7 +762,10 @@ public String getText(final String toTest, final int group) { Matcher m = pattern.matcher(toTest); StringBuilder result = new StringBuilder(); while (m.find()) { - result.append(m.group(group)); + String groupValue = m.group(group); + if (groupValue != null) { + result.append(groupValue); + } } return result.toString(); } @@ -781,7 +784,10 @@ public String getText(final String toTest, final String group) { Matcher m = pattern.matcher(toTest); StringBuilder result = new StringBuilder(); while (m.find()) { - result.append(m.group(group)); + String groupValue = m.group(group); + if (groupValue != null) { + result.append(groupValue); + } } return result.toString(); } From c20792346db9f1adda08b9c57a56a4a1bed63bd1 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Fri, 21 Aug 2020 13:16:35 +0200 Subject: [PATCH 3/6] upgrading travis jdk version since it no longer supports jdk's older than 9: > $ ~/bin/install-jdk.sh --target "/home/travis/oraclejdk8" --workspace "/home/travis/.cache/install-jdk" --feature "8" --license "BCL" > Ignoring license option: BCL -- using GPLv2+CE by default > install-jdk.sh 2020-06-02 > Expected feature release number in range of 9 to 16, but got: 8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 22fa1e3..80e3e2c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: java sudo: false jdk: - - oraclejdk8 + - openjdk11 install: - mvn --settings .travis/settings.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V From a97d327045d52a5bce95e5e57820b20327f66e33 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Fri, 21 Aug 2020 13:23:49 +0200 Subject: [PATCH 4/6] we no longer return the "null" string literal --- .../BasicFunctionalityUnitTest.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java b/src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java index 856df68..900e9e7 100644 --- a/src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java +++ b/src/test/java/ru/lanwen/verbalregex/BasicFunctionalityUnitTest.java @@ -497,9 +497,9 @@ public void testOrWithCapture() { assertThat("Starts with abc or def", testRegex, matchesTo("abczzz")); assertThat("Doesn't start with abc or def", testRegex, not(matchesExactly("xyzabcefg"))); - assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abcnull")); - assertThat(testRegex.getText("xxxdefzzz", 1), equalTo("null")); - assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abcnull")); + assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abc")); + assertThat(testRegex.getText("xxxdefzzz", 1), equalTo("")); + assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abc")); } @Test @@ -516,11 +516,11 @@ public void testOrWithNamedCapture() { testRegex, not(matchesExactly("xyzabcefg"))); assertThat(testRegex.getText("xxxabcdefzzz", captureName), - equalTo("abcnull")); + equalTo("abc")); assertThat(testRegex.getText("xxxdefzzz", captureName), - equalTo("null")); + equalTo("")); assertThat(testRegex.getText("xxxabcdefzzz", captureName), - equalTo("abcnull")); + equalTo("abc")); } @Test @@ -535,9 +535,9 @@ public void testOrWithClosedCapture() { assertThat("Starts with abc or def", testRegex, matchesTo("abczzz")); assertThat("Doesn't start with abc or def", testRegex, not(matchesExactly("xyzabcefg"))); - assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abcnull")); - assertThat(testRegex.getText("xxxdefzzz", 1), equalTo("null")); - assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abcnull")); + assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abc")); + assertThat(testRegex.getText("xxxdefzzz", 1), equalTo("")); + assertThat(testRegex.getText("xxxabcdefzzz", 1), equalTo("abc")); } @Test @@ -555,11 +555,11 @@ public void testOrWithClosedNamedCapture() { testRegex, not(matchesExactly("xyzabcefg"))); assertThat(testRegex.getText("xxxabcdefzzz", captureName), - equalTo("abcnull")); + equalTo("abc")); assertThat(testRegex.getText("xxxdefzzz", captureName), - equalTo("null")); + equalTo("")); assertThat(testRegex.getText("xxxabcdefzzz", captureName), - equalTo("abcnull")); + equalTo("abc")); } @Test From 2ea705f5e0ddb2b92d06af86482695a1b19515a9 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Fri, 19 Mar 2021 13:27:21 +0100 Subject: [PATCH 5/6] reduce assertions Co-authored-by: Kirill Merkushev --- src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java b/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java index b504100..d7dbbaa 100644 --- a/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java +++ b/src/test/java/ru/lanwen/verbalregex/RealWorldUnitTest.java @@ -164,7 +164,6 @@ public void missingOptionalCaptureGroupReturnsEmptyStringNotStringContainingNull .build(); final String testString = "c"; assertThat(expression, matchesExactly(testString)); - assertThat(expression.getText("c", "optionalCapture"), not(equalTo("null"))); assertThat(expression.getText("c", "optionalCapture"), equalTo("")); } } From 7b758c94b6d4e60fd611570e524d2f6b5d639c7f Mon Sep 17 00:00:00 2001 From: Kirill Merkushev Date: Fri, 19 Mar 2021 14:50:55 +0100 Subject: [PATCH 6/6] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 80e3e2c..c55b796 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: java sudo: false jdk: - - openjdk11 + - openjdk8 install: - mvn --settings .travis/settings.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V