/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ide.common.repository;
import com.android.ide.common.res2.BaseTestCase;
import com.google.common.collect.Lists;
import java.util.List;
import static com.android.ide.common.repository.GradleCoordinate.COMPARE_PLUS_HIGHER;
import static com.android.ide.common.repository.GradleCoordinate.COMPARE_PLUS_LOWER;
/**
* Test class for {@see GradleCoordinate}
*/
public class GradleCoordinateTest extends BaseTestCase {
public void testParseCoordinateString() throws Exception {
GradleCoordinate expected = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
GradleCoordinate actual = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.2");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package", 5, 4, GradleCoordinate.PLUS_REV_VALUE);
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.+");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package", 5, GradleCoordinate.PLUS_REV_VALUE);
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:5.+");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package", GradleCoordinate.PLUS_REV);
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:+");
assertEquals(expected, actual);
List<GradleCoordinate.RevisionComponent> revisionList =
Lists.<GradleCoordinate.RevisionComponent>newArrayList(GradleCoordinate.PLUS_REV);
expected = new GradleCoordinate("a.b.c", "package", revisionList,
GradleCoordinate.ArtifactType.JAR);
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:+@jar");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package", revisionList,
GradleCoordinate.ArtifactType.AAR);
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:+@AAR");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package",
new GradleCoordinate.StringComponent("v1"),
new GradleCoordinate.StringComponent("v2"));
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:v1.v2");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package",
GradleCoordinate.ListComponent.of(
new GradleCoordinate.StringComponent("v1"),
new GradleCoordinate.NumberComponent(1)));
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:v1-1");
assertEquals(expected, actual);
expected = new GradleCoordinate("a.b.c", "package",
GradleCoordinate.ListComponent.of(
new GradleCoordinate.StringComponent("v1"),
new GradleCoordinate.NumberComponent(1)),
new GradleCoordinate.NumberComponent(17),
GradleCoordinate.ListComponent.of(
new GradleCoordinate.NumberComponent(0),
new GradleCoordinate.StringComponent("rc"),
new GradleCoordinate.StringComponent("SNAPSHOT")));
actual = GradleCoordinate.parseCoordinateString("a.b.c:package:v1-1.17.0-rc-SNAPSHOT");
assertEquals(expected, actual);
}
public void testToString() throws Exception {
String expected = "a.b.c:package:5.4.2";
String actual = new GradleCoordinate("a.b.c", "package", 5, 4, 2).toString();
assertEquals(expected, actual);
expected = "a.b.c:package:5.4.+";
actual = new GradleCoordinate("a.b.c", "package", 5, 4, GradleCoordinate.PLUS_REV_VALUE)
.toString();
assertEquals(expected, actual);
expected = "a.b.c:package:5.+";
actual = new GradleCoordinate("a.b.c", "package", 5, GradleCoordinate.PLUS_REV_VALUE)
.toString();
assertEquals(expected, actual);
expected = "a.b.c:package:+";
actual = new GradleCoordinate("a.b.c", "package", GradleCoordinate.PLUS_REV).toString();
assertEquals(expected, actual);
expected = "a.b.c:package:+@jar";
List<GradleCoordinate.RevisionComponent> revisionList =
Lists.<GradleCoordinate.RevisionComponent>newArrayList(GradleCoordinate.PLUS_REV);
actual = new GradleCoordinate("a.b.c", "package", revisionList,
GradleCoordinate.ArtifactType.JAR).toString();
assertEquals(expected, actual);
expected = "a.b.c:package:+@aar";
actual = new GradleCoordinate("a.b.c", "package", revisionList,
GradleCoordinate.ArtifactType.AAR).toString();
assertEquals(expected, actual);
expected = "com.google.maps.android:android-maps-utils:0.3";
actual = GradleCoordinate.parseCoordinateString(expected).toString();
assertEquals(expected, actual);
expected = "a.b.c:package:v1.v2";
actual = new GradleCoordinate("a.b.c", "package",
new GradleCoordinate.StringComponent("v1"),
new GradleCoordinate.StringComponent("v2")).toString();
assertEquals(expected, actual);
expected = "a.b.c:package:v1-1.17.0-rc-SNAPSHOT";
actual = new GradleCoordinate("a.b.c", "package",
GradleCoordinate.ListComponent.of(
new GradleCoordinate.StringComponent("v1"),
new GradleCoordinate.NumberComponent(1)),
new GradleCoordinate.NumberComponent(17),
GradleCoordinate.ListComponent.of(
new GradleCoordinate.NumberComponent(0),
new GradleCoordinate.StringComponent("rc"),
new GradleCoordinate.StringComponent("SNAPSHOT"))).toString();
assertEquals(expected, actual);
}
public void testIsSameArtifact() throws Exception {
GradleCoordinate a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
GradleCoordinate b = new GradleCoordinate("a.b.c", "package", 5, 5, 5);
assertTrue(a.isSameArtifact(b));
assertTrue(b.isSameArtifact(a));
a = new GradleCoordinate("a.b", "package", 5, 4, 2);
b = new GradleCoordinate("a.b.c", "package", 5, 5, 5);
assertFalse(a.isSameArtifact(b));
assertFalse(b.isSameArtifact(a));
a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
b = new GradleCoordinate("a.b.c", "feature", 5, 5, 5);
assertFalse(a.isSameArtifact(b));
assertFalse(b.isSameArtifact(a));
}
public void testCompareVersions() {
// Requirements order
GradleCoordinate a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
GradleCoordinate b = new GradleCoordinate("a.b.c", "package", 5, 5, 5);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
a = new GradleCoordinate("a.b.c", "package", 5, 4, 10);
b = new GradleCoordinate("a.b.c", "package", 5, 4, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, GradleCoordinate.PLUS_REV_VALUE);
b = new GradleCoordinate("a.b.c", "package", 6, 0, 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) == 0);
a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
b = new GradleCoordinate("a.b.c", "feature", 5, 4, 2);
assertTrue((COMPARE_PLUS_HIGHER.compare(a, b) < 0) == ("package".compareTo("feature") < 0));
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, 6, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
a = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.2");
b = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.+");
assert a != null;
assert b != null;
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
a = GradleCoordinate.parseCoordinateString("a.b.c:package:5");
b = GradleCoordinate.parseCoordinateString("a.b.c:package:+");
assert a != null;
assert b != null;
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
a = GradleCoordinate.parseCoordinateString("a.b.c:package:1.any");
b = GradleCoordinate.parseCoordinateString("a.b.c:package:1.1");
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
a = GradleCoordinate.parseCoordinateString("a.b.c:package:1-1");
b = GradleCoordinate.parseCoordinateString("a.b.c:package:1-2");
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
}
public void testCompareSpecificity() {
// Order of specificity
GradleCoordinate a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
GradleCoordinate b = new GradleCoordinate("a.b.c", "package", 5, 5, 5);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_LOWER.compare(b, a) > 0);
a = new GradleCoordinate("a.b.c", "package", 5, 4, 10);
b = new GradleCoordinate("a.b.c", "package", 5, 4, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) > 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, GradleCoordinate.PLUS_REV_VALUE);
b = new GradleCoordinate("a.b.c", "package", 6, 0, 0);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) < 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) == 0);
a = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
b = new GradleCoordinate("a.b.c", "feature", 5, 4, 2);
assertTrue((COMPARE_PLUS_LOWER.compare(a, b) < 0) == ("package".compareTo("feature") < 0));
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, 6, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) > 0);
a = new GradleCoordinate("a.b.c", "package", 5, 6, 0);
b = new GradleCoordinate("a.b.c", "package", 5, GradleCoordinate.PLUS_REV_VALUE);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) > 0);
a = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.2");
b = GradleCoordinate.parseCoordinateString("a.b.c:package:5.4.+");
assert a != null;
assert b != null;
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) > 0);
assertTrue(COMPARE_PLUS_LOWER.compare(b, a) < 0);
}
public void testGetVersions() {
GradleCoordinate c = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
assertEquals(5, c.getMajorVersion());
assertEquals(4, c.getMinorVersion());
assertEquals(2, c.getMicroVersion());
}
public void testSameSharedDifferentLengths() {
GradleCoordinate a = new GradleCoordinate("a.b.c", "package", 5, 4);
GradleCoordinate b = new GradleCoordinate("a.b.c", "package", 5, 4, 2);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) > 0);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) < 0);
assertTrue(COMPARE_PLUS_LOWER.compare(b, a) > 0);
}
public void testSameSharedDifferentLengthsWithZeros() {
GradleCoordinate a = new GradleCoordinate("a.b.c", "package", 5, 4);
GradleCoordinate b = new GradleCoordinate("a.b.c", "package", 5, 4, 0, 0, 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(a, b) == 0);
assertTrue(COMPARE_PLUS_HIGHER.compare(b, a) == 0);
assertTrue(COMPARE_PLUS_LOWER.compare(a, b) == 0);
assertTrue(COMPARE_PLUS_LOWER.compare(b, a) == 0);
}
public void testParseVersionOnly() {
String revision = "15.32.64";
GradleCoordinate a = GradleCoordinate.parseVersionOnly(revision);
assertEquals(revision, a.getFullRevision());
String revisionB = "16.12.0-rc1";
GradleCoordinate b = GradleCoordinate.parseVersionOnly(revisionB);
assertEquals(revisionB, b.getFullRevision());
assertTrue(b.isPreview());
}
public void testIsPreview_ignoresFalsePositives() {
String revisionB = "16.12.0-march";
GradleCoordinate b = GradleCoordinate.parseVersionOnly(revisionB);
assertFalse(b.isPreview());
}
public void testLeadingZeroes() {
// Regression test for https://code.google.com/p/android/issues/detail?id=74612
// The Gradle dependency
// compile 'com.google.android.gms:play-services:5.2.08'
// is not the same as
// compile 'com.google.android.gms:play-services:5.2.8'
// So we have to keep string representations around
GradleCoordinate v5_0_89 = GradleCoordinate.parseCoordinateString(
"com.google.android.gms:play-services:5.0.89");
assertNotNull(v5_0_89);
assertEquals("com.google.android.gms:play-services:5.0.89", v5_0_89.toString());
assertEquals("5.0.89", v5_0_89.getFullRevision());
GradleCoordinate v5_2_08 = GradleCoordinate.parseCoordinateString(
"com.google.android.gms:play-services:5.2.08");
assertNotNull(v5_2_08);
assertEquals("5.2.08", v5_2_08.getFullRevision());
assertEquals("com.google.android.gms:play-services:5.2.08", v5_2_08.toString());
// Same artifact: 5.2.08 == 5.2.8
//noinspection ConstantConditions
assertFalse(v5_2_08.equals(GradleCoordinate.parseCoordinateString(
"com.google.android.gms:play-services:5.2.8")));
assertEquals(
GradleCoordinate.parseCoordinateString(
"com.google.android.gms:play-services:5.2.08"),
GradleCoordinate.parseCoordinateString(
"com.google.android.gms:play-services:5.2.08"));
}
}