You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2018/02/26 11:06:16 UTC
ant-ivy git commit: Support parsing multiple ranges for Maven versions
Repository: ant-ivy
Updated Branches:
refs/heads/master 046623755 -> 86eacb6b5
Support parsing multiple ranges for Maven versions
Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/86eacb6b
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/86eacb6b
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/86eacb6b
Branch: refs/heads/master
Commit: 86eacb6b576208fd7a6d6a37ba624892a1c9ccd6
Parents: 0466237
Author: Jaikiran Pai <ja...@apache.org>
Authored: Mon Feb 26 16:35:42 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Mon Feb 26 16:35:42 2018 +0530
----------------------------------------------------------------------
.../parser/m2/MavenVersionRangeParser.java | 23 ++++++++++--
.../parser/m2/MavenVersionRangeParserTest.java | 37 ++++++++++++++++++++
2 files changed, 57 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/86eacb6b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
index f67b338..0f13745 100644
--- a/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
+++ b/src/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParser.java
@@ -17,6 +17,7 @@
package org.apache.ivy.plugins.parser.m2;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;
@@ -121,8 +122,24 @@ class MavenVersionRangeParser {
return new BasicRange(lowerBound, !lowerBoundVal.startsWith("("), upperBound, !upperBoundVal.endsWith(")"));
}
if (versionParts.length > 2) {
- // TODO: we do not yet support multi-range format (which is a valid range in maven
- return null;
+ // each range part can itself be a range, which is valid in maven
+ final Collection<Range> ranges = new ArrayList<>();
+ for (int i = 0; i < versionParts.length; i = (i + 2 < versionParts.length) ? i + 2 : i + 1) {
+ final String partOne = versionParts[i];
+ final String partTwo;
+ if (i + 1 < versionParts.length) {
+ partTwo = versionParts[i + 1];
+ } else {
+ partTwo = "";
+ }
+ final Range rangePart = parse(partOne + "," + partTwo);
+ if (rangePart == null) {
+ continue;
+ }
+ ranges.add(rangePart);
+
+ }
+ return (ranges == null || ranges.isEmpty()) ? null : new MultiSetRange(ranges);
}
return null;
} catch (NumberFormatException nfe) {
@@ -177,7 +194,7 @@ class MavenVersionRangeParser {
}
}
- private final class MultiSetRange implements Range {
+ private static final class MultiSetRange implements Range {
private final Collection<Range> ranges;
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/86eacb6b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
index bf60f3d..1ac141a 100644
--- a/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
+++ b/test/java/org/apache/ivy/plugins/parser/m2/MavenVersionRangeParserTest.java
@@ -136,4 +136,41 @@ public class MavenVersionRangeParserTest {
assertFalse("'>' range wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "11"));
assertFalse("'>' range wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "11.0"));
}
+
+ /**
+ * Tests the {@link MavenVersionRangeParser#rangeAccepts(String, String)} works correctly when a range of the form
+ * {@code (,1.0],[1.2,)} is used to compare against some value.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testMultiRange() throws Exception {
+ final String range = "(,1.0],[1.2,)"; // x <= 1.0 or x >= 1.2
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "0.9"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "0.9.5"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "22"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2.0"));
+
+ assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.1"));
+ assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0.1"));
+ }
+
+ /**
+ * Tests the {@link MavenVersionRangeParser#rangeAccepts(String, String)} works correctly when a range of the form
+ * {@code (,1.1),(1.1,)} is used to compare against some value.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testMultiRangeSpecificValue() throws Exception {
+ final String range = "(,1.1),(1.1,)"; // x != 1.1
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.0.1"));
+ assertTrue("Range with multiple sets was expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.2"));
+
+ assertFalse("Range with multiple sets wasn't expected to match", MavenVersionRangeParser.rangeAccepts(range, "1.1"));
+ }
}