aboutsummaryrefslogtreecommitdiffstats
path: root/sdkstats
diff options
context:
space:
mode:
authorRaphael Moll <ralf@android.com>2012-10-02 13:40:35 -0700
committerRaphael Moll <ralf@android.com>2012-10-02 14:15:19 -0700
commit44d297b277b5bd3fd99c2f9295b7c3e6b72c49ff (patch)
treea1bce4ac11adc56d4bdd1b4ed4f50bb1cc1aaeb0 /sdkstats
parenteaa200cfa7deb9e487c2992f2ac8ce3dd1ecd45c (diff)
downloadsdk-44d297b277b5bd3fd99c2f9295b7c3e6b72c49ff.zip
sdk-44d297b277b5bd3fd99c2f9295b7c3e6b72c49ff.tar.gz
sdk-44d297b277b5bd3fd99c2f9295b7c3e6b72c49ff.tar.bz2
SDK Ping: properly parse new "21 rc7" format as "21.0.0.7"
Change-Id: I6c57e64dbf2586b597826c6ab7cd5eca1fc18580
Diffstat (limited to 'sdkstats')
-rw-r--r--sdkstats/src/com/android/sdkstats/SdkStatsService.java42
-rwxr-xr-xsdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java133
2 files changed, 161 insertions, 14 deletions
diff --git a/sdkstats/src/com/android/sdkstats/SdkStatsService.java b/sdkstats/src/com/android/sdkstats/SdkStatsService.java
index c490fed..79c2ef5 100644
--- a/sdkstats/src/com/android/sdkstats/SdkStatsService.java
+++ b/sdkstats/src/com/android/sdkstats/SdkStatsService.java
@@ -505,23 +505,37 @@ public class SdkStatsService {
*/
protected String normalizeVersion(String version) {
- // Version must be between 1 and 4 dotted numbers
- String[] numbers = version.split("\\."); //$NON-NLS-1$
- if (numbers.length > 4) {
- throw new IllegalArgumentException("Bad version: " + version); //$NON-NLS-1$
- }
- for (String part: numbers) {
- if (!part.matches("\\d+")) { //$NON-NLS-1$
- throw new IllegalArgumentException("Bad version: " + version); //$NON-NLS-1$
+ Pattern regex = Pattern.compile(
+ //1=major 2=minor 3=micro 4=build | 5=rc
+ "^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:\\.(\\d+)| +rc(\\d+))?"); //$NON-NLS-1$
+
+ Matcher m = regex.matcher(version);
+ if (m != null && m.lookingAt()) {
+ StringBuilder normal = new StringBuilder();
+ for (int i = 1; i <= 4; i++) {
+ int v = 0;
+ // If build is null but we have an rc, take that number instead as the 4th part.
+ if (i == 4 &&
+ i < m.groupCount() &&
+ m.group(i) == null &&
+ m.group(i+1) != null) {
+ i++;
+ }
+ if (m.group(i) != null) {
+ try {
+ v = Integer.parseInt(m.group(i));
+ } catch (Exception ignore) {
+ }
+ }
+ if (i > 1) {
+ normal.append('.');
+ }
+ normal.append(v);
}
+ return normal.toString();
}
- // Always output 4 numbers, even if fewer were supplied (pad with .0)
- StringBuffer normal = new StringBuffer(numbers[0]);
- for (int i = 1; i < 4; i++) {
- normal.append('.').append(i < numbers.length ? numbers[i] : "0"); //$NON-NLS-1$
- }
- return normal.toString();
+ throw new IllegalArgumentException("Bad version: " + version); //$NON-NLS-1$
}
/**
diff --git a/sdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java b/sdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java
index b1db42b..9982bb7 100755
--- a/sdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java
+++ b/sdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java
@@ -306,6 +306,139 @@ public class SdkStatsServiceTest extends TestCase {
assertEquals("one3456789ten3456789twenty6789th", m.getOsName());
}
+ public void testSdkStatsService_parseVersion() {
+ // Tests that the version parses supports the new "major.minor.micro rcPreview" format
+ // as well as "x.y.z.t" formats as well as Eclipse's "x.y.z.v2012somedate" formats.
+
+ MockSdkStatsService m;
+ m = new MockSdkStatsService("Windows", "6.2", "x86_64", "1.7.8_09");
+
+ m.ping("monitor", "21");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.0.0.0&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.1");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.1.0.0&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.2.03");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.0&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.2.3.4");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.4&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ // More than 4 parts or extra stuff that is not an "rc" preview are ignored.
+ m.ping("monitor", "21.2.3.4.5.6.7.8");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.4&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.2.3.4.v20120101 the rest is ignored");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.4&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ // If the "rc" preview integer is present, it's equivalent to a 4th number.
+ m.ping("monitor", "21 rc4");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.0.0.4&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.01 rc5");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.1.0.5&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ m.ping("monitor", "21.02.03 rc6");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.6&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ // If there's a 4-part version number, the rc preview number isn't used.
+ m.ping("monitor", "21.2.3.4 rc7");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_monitor&" +
+ "id=42&" +
+ "version=21.2.3.4&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+
+ // For Eclipse plugins, the 4th part might be a date. It is ignored.
+ m.ping("eclipse", "21.2.3.v20120102235958");
+ assertEquals(
+ "http://tools.google.com/service/update?" +
+ "as=androidsdk_eclipse&" +
+ "id=42&" +
+ "version=21.2.3.0&" +
+ "os=win-6.2&" +
+ "osa=x86_64&" +
+ "vma=1.7-x86_64",
+ m.getPingUrlResult().toString());
+ }
+
public void testSdkStatsService_glPing() {
MockSdkStatsService m;
m = new MockSdkStatsService("Windows", "6.2", "x86_64", "1.7.8_09");