Fix parsing of patch version
Add test for all version formats on master.
Bug: 145284180
Change-Id: I87920249df2695c3dddc9efca9036828d7a042ef
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 98c654c..d01ede5 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -27,12 +27,16 @@
* @return Major version or -1 for an unreleased build.
*/
public static int getMajorVersion() {
- if (LABEL.equals("master")) {
+ return getMajorVersion(LABEL);
+ }
+
+ static int getMajorVersion(String label) {
+ if (label.equals("master")) {
return -1;
}
int start = 0;
- int end = LABEL.indexOf('.');
- return Integer.parseInt(LABEL.substring(start, end));
+ int end = label.indexOf('.');
+ return Integer.parseInt(label.substring(start, end));
}
/**
@@ -41,12 +45,16 @@
* @return Minor version or -1 for an unreleased build.
*/
public static int getMinorVersion() {
- if (LABEL.equals("master")) {
+ return getMinorVersion(LABEL);
+ }
+
+ static int getMinorVersion(String label) {
+ if (label.equals("master")) {
return -1;
}
- int start = LABEL.indexOf('.') + 1;
- int end = LABEL.indexOf('.', start);
- return Integer.parseInt(LABEL.substring(start, end));
+ int start = label.indexOf('.') + 1;
+ int end = label.indexOf('.', start);
+ return Integer.parseInt(label.substring(start, end));
}
/**
@@ -55,13 +63,17 @@
* @return Patch version or -1 for an unreleased build.
*/
public static int getPatchVersion() {
- if (LABEL.equals("master")) {
+ return getPatchVersion(LABEL);
+ }
+
+ static int getPatchVersion(String label) {
+ if (label.equals("master")) {
return -1;
}
- int skip = LABEL.indexOf('.') + 1;
- int start = LABEL.indexOf('.', skip) + 1;
- int end = LABEL.indexOf('.', start);
- return Integer.parseInt(LABEL.substring(start, end));
+ int skip = label.indexOf('.') + 1;
+ int start = label.indexOf('.', skip) + 1;
+ int end = label.indexOf('-', start);
+ return Integer.parseInt(label.substring(start, end != -1 ? end : label.length()));
}
/**
@@ -71,12 +83,16 @@
* unreleased build.
*/
public static String getPreReleaseString() {
- if (LABEL.equals("master")) {
+ return getPreReleaseString(LABEL);
+ }
+
+ static String getPreReleaseString(String label) {
+ if (label.equals("master")) {
return null;
}
- int start = LABEL.indexOf('-') + 1;
+ int start = label.indexOf('-') + 1;
if (start > 0) {
- return LABEL.substring(start);
+ return label.substring(start);
}
return "";
}
@@ -87,8 +103,10 @@
* @return True if the build is not a release or if it is a development release.
*/
public static boolean isDevelopmentVersion() {
- return LABEL.equals("master")
- || LABEL.endsWith("-dev")
- || VersionProperties.INSTANCE.isEngineering();
+ return isDevelopmentVersion(LABEL, VersionProperties.INSTANCE.isEngineering());
+ }
+
+ static boolean isDevelopmentVersion(String label, boolean isEngineering) {
+ return label.equals("master") || label.endsWith("-dev") || isEngineering;
}
}
diff --git a/src/test/java/com/android/tools/r8/VersionTests.java b/src/test/java/com/android/tools/r8/VersionTests.java
index ba5ee78..dffaa2b 100644
--- a/src/test/java/com/android/tools/r8/VersionTests.java
+++ b/src/test/java/com/android/tools/r8/VersionTests.java
@@ -5,6 +5,7 @@
import static com.android.tools.r8.Version.LABEL;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -62,4 +63,30 @@
public void testDevelopmentPredicate() {
assertEquals(LABEL.equals("master") || LABEL.contains("-dev"), Version.isDevelopmentVersion());
}
+
+ @Test
+ public void testLabelParsing() {
+ assertEquals(-1, Version.getMajorVersion("master"));
+ assertEquals(-1, Version.getMinorVersion("master"));
+ assertEquals(-1, Version.getPatchVersion("master"));
+ assertNull(Version.getPreReleaseString("master"));
+ // 'master' is checked before 'isEngineering'.
+ assertTrue(Version.isDevelopmentVersion("master", false));
+ assertTrue(Version.isDevelopmentVersion("master", true));
+
+ assertEquals(1, Version.getMajorVersion("1.2.3-dev"));
+ assertEquals(2, Version.getMinorVersion("1.2.3-dev"));
+ assertEquals(3, Version.getPatchVersion("1.2.3-dev"));
+ assertEquals("dev", Version.getPreReleaseString("1.2.3-dev"));
+ // '-dev' suffix is checked before 'isEngineering'.
+ assertTrue(Version.isDevelopmentVersion("1.2.3-dev", false));
+ assertTrue(Version.isDevelopmentVersion("1.2.3-dev", true));
+
+ assertEquals(1, Version.getMajorVersion("1.2.3"));
+ assertEquals(2, Version.getMinorVersion("1.2.3"));
+ assertEquals(3, Version.getPatchVersion("1.2.3"));
+ assertEquals("", Version.getPreReleaseString("1.2.3"));
+ assertFalse(Version.isDevelopmentVersion("1.2.3", false));
+ assertTrue(Version.isDevelopmentVersion("1.2.3", true));
+ }
}