diff options
author | Raphael Moll <ralf@android.com> | 2012-10-02 13:40:35 -0700 |
---|---|---|
committer | Raphael Moll <ralf@android.com> | 2012-10-02 14:15:19 -0700 |
commit | 44d297b277b5bd3fd99c2f9295b7c3e6b72c49ff (patch) | |
tree | a1bce4ac11adc56d4bdd1b4ed4f50bb1cc1aaeb0 /sdkstats | |
parent | eaa200cfa7deb9e487c2992f2ac8ce3dd1ecd45c (diff) | |
download | sdk-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.java | 42 | ||||
-rwxr-xr-x | sdkstats/tests/com/android/sdkstats/SdkStatsServiceTest.java | 133 |
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"); |