You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/02/12 15:56:39 UTC
[groovy] branch master updated: GROOVY-9394: Groovy could provide
some minimal methods to assist with migrating between Groovy versions
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 59dc381 GROOVY-9394: Groovy could provide some minimal methods to assist with migrating between Groovy versions
59dc381 is described below
commit 59dc38127bc6b2a17157533c879fd084aad628b7
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Feb 12 12:48:36 2020 +1000
GROOVY-9394: Groovy could provide some minimal methods to assist with migrating between Groovy versions
---
src/main/java/groovy/lang/GroovySystem.java | 17 ++++++++++++++
.../groovy/runtime/DefaultGroovyMethods.java | 26 ++++++++++++++++++++++
.../groovy/runtime/StringGroovyMethods.java | 13 +++++++++++
.../groovy/runtime/StringGroovyMethodsTest.java | 8 +++++++
.../src/main/java/groovy/test/GroovyAssert.java | 4 +++-
5 files changed, 67 insertions(+), 1 deletion(-)
diff --git a/src/main/java/groovy/lang/GroovySystem.java b/src/main/java/groovy/lang/GroovySystem.java
index cb5ea98..6727cb4 100644
--- a/src/main/java/groovy/lang/GroovySystem.java
+++ b/src/main/java/groovy/lang/GroovySystem.java
@@ -20,6 +20,7 @@ package groovy.lang;
import org.apache.groovy.plugin.GroovyRunner;
import org.apache.groovy.plugin.GroovyRunnerRegistry;
+import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl;
import org.codehaus.groovy.util.ReferenceBundle;
import org.codehaus.groovy.util.ReleaseInfo;
@@ -100,4 +101,20 @@ public final class GroovySystem {
public static String getVersion() {
return ReleaseInfo.getVersion();
}
+
+ /**
+ * Returns the major and minor part of the groovy version excluding the point/patch part of the version.
+ * E.g. 3.0.0, 3.0.0-SNAPSHOT, 3.0.0-rc-1 all have 3.0 as the short version.
+ *
+ * @since 3.0.1
+ */
+ public static String getShortVersion() {
+ String full = getVersion();
+ int firstDot = full.indexOf('.');
+ int secondDot = full.indexOf('.', firstDot + 1);
+ if (secondDot < 0) {
+ throw new GroovyBugError("Unexpected version found: " + full);
+ }
+ return full.substring(0, secondDot);
+ }
}
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 2e42850..9d1f4e9 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -15643,6 +15643,32 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
}
/**
+ * Compare a BigDecimal to another.
+ * A fluent api style alias for {@code compareTo}.
+ *
+ * @param left a BigDecimal
+ * @param right a BigDecimal
+ * @return true if left is equal to or bigger than right
+ * @since 3.0.1
+ */
+ public static Boolean isAtLeast(BigDecimal left, BigDecimal right) {
+ return left.compareTo(right) >= 0;
+ }
+
+ /**
+ * Compare a BigDecimal to a String representing a number.
+ * A fluent api style alias for {@code compareTo}.
+ *
+ * @param left a BigDecimal
+ * @param right a String representing a number
+ * @return true if left is equal to or bigger than the value represented by right
+ * @since 3.0.1
+ */
+ public static Boolean isAtLeast(BigDecimal left, String right) {
+ return isAtLeast(left, new BigDecimal(right));
+ }
+
+ /**
* Power of a Number to a certain exponent. Called by the '**' operator.
*
* @param self a Number
diff --git a/src/main/java/org/codehaus/groovy/runtime/StringGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/StringGroovyMethods.java
index 7191e04..fb8379e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/StringGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/StringGroovyMethods.java
@@ -2524,6 +2524,19 @@ public class StringGroovyMethods extends DefaultGroovyMethodsSupport {
}
/**
+ * Compare a String representing a number to another.
+ * A fluent api style alias for {@code compareTo} on {@code BigDecimal}.
+ *
+ * @param left a String representing a number
+ * @param right a String representing a number
+ * @return true if the value represented by left is equal to or bigger than the value represented by right
+ * @since 3.0.1
+ */
+ public static Boolean isAtLeast(String left, String right) {
+ return DefaultGroovyMethods.isAtLeast(new BigDecimal(left), right);
+ }
+
+ /**
* Convenience method to split a CharSequence (with whitespace as delimiter).
* Similar to tokenize, but returns an Array of String instead of a List.
*
diff --git a/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java b/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
index e892ce4..a7e435e 100644
--- a/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
+++ b/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
@@ -231,6 +231,14 @@ public final class StringGroovyMethodsTest {
assertEquals(expectedResult, result);
}
+ @Test
+ public void testisAtLeast() {
+ assertTrue(StringGroovyMethods.isAtLeast("2.1", "2.1"));
+ assertTrue(StringGroovyMethods.isAtLeast("2.1", "2.0"));
+ assertTrue(StringGroovyMethods.isAtLeast("3.0", "2.1"));
+ assertFalse(StringGroovyMethods.isAtLeast("2.5", "3.0"));
+ }
+
private Closure<String> createClosureForFindOrFindAll() {
return new Closure<String>(this) {
@Override
diff --git a/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java b/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
index cb489b9..1844761 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/GroovyAssert.java
@@ -30,6 +30,8 @@ import java.math.BigDecimal;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
+import static org.codehaus.groovy.runtime.DefaultGroovyMethods.isAtLeast;
+
/**
* <p>{@code GroovyAssert} contains a set of static assertion and test helper methods and is supposed to be a Groovy
* extension of JUnit 4's {@link org.junit.Assert} class. In case JUnit 3 is the choice, the {@link groovy.test.GroovyTestCase}
@@ -341,7 +343,7 @@ public class GroovyAssert extends org.junit.Assert {
public static boolean isAtLeastJdk(String specVersion) {
boolean result = false;
try {
- result = new BigDecimal(System.getProperty("java.specification.version")).compareTo(new BigDecimal(specVersion)) >= 0;
+ result = isAtLeast(new BigDecimal(System.getProperty("java.specification.version")), specVersion);
} catch (Exception ignore) {
}
return result;