/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.brooklyn.util.text;
import static org.testng.Assert.assertEquals;
import java.util.List;
import org.apache.brooklyn.util.collections.MutableList;
import org.testng.Assert;
import org.testng.annotations.Test;
public class VersionComparatorTest {
@Test
public void testStaticHelpers() {
Assert.assertEquals(VersionComparator.splitOnDot("a.b.cc"), new String[] { "a", ".", "b", ".", "cc" });
Assert.assertEquals(VersionComparator.splitOnDot("a..b-c"), new String[] { "a", ".", ".", "b-c" });
Assert.assertEquals(VersionComparator.splitOnNonWordChar("a1-b__cc9c"), new String[] {
"a1", "-", "b", "_", "_", "cc9c" });
Assert.assertEquals(VersionComparator.isNumberInFirstChar("1a"), true);
Assert.assertEquals(VersionComparator.isNumberInFirstChar("a1"), false);
Assert.assertEquals(VersionComparator.isNumberInFirstChar(""), false);
Assert.assertEquals(VersionComparator.isNumberInFirstChar(null), false);
Assert.assertEquals(VersionComparator.isNumber("1"), true);
Assert.assertEquals(VersionComparator.isNumber("1111"), true);
Assert.assertEquals(VersionComparator.isNumber("1a"), false);
Assert.assertEquals(VersionComparator.isNumber("a1"), false);
Assert.assertEquals(VersionComparator.isNumber(""), false);
Assert.assertEquals(VersionComparator.isNumber(null), false);
}
@Test
public void testComparison() {
VersionComparator.INSTANCE.compare("B", "B-2");
assertVersionOrder("0", "1");
assertVersionOrder("0", "0.0", "0.9", "0.10", "0.10.0", "1");
assertVersionOrder("a", "b");
assertVersionOrder("1beta", "1", "2beta", "11beta");
assertVersionOrder("beta", "0", "1beta", "1-alpha", "1", "11beta", "11-alpha", "11");
assertVersionOrder("1.0-a", "1.0-b", "1.0");
assertVersionOrder("qualifier", "0qualifier", "0-qualifier", "0", "1-qualifier", "1");
assertVersionOrder("2.0.qualifier", "2.0", "2.0.0qualifier", "2.0.0-qualifier", "2.0.0.qualifier", "2.0.0");
assertVersionOrder("2.0.qualifier.0", "2.0", "2.0.0qualifier.0", "2.0.0-qualifier.0", "2.0.0.qualifier.0", "2.0.0", "2.0.0.0");
assertVersionOrder("0", "0.0", "0.1", "0.1.0", "0.1.1", "0.2", "0.2.1", "1", "1.0", "2");
// case sensitive
assertVersionOrder("AA", "Aa", "aa");
// letters in order, ignoring case, and using natural order on numbers, splitting at word boundaries
assertVersionOrder("A", "B-2", "B-10", "B", "B0", "C", "b", "b1", "b9", "b10", "c", "0");
// and non-letter symbols are compared, in alpha order (e.g. - less than _) with dots even higher
assertVersionOrder("0-qual", "0", "0.1", "1-qualC", "1_qualB", "1.qualA", "1", "1.0");
// numeric comparison works with qualifiers, preferring unqualified
assertVersionOrder("0--qual", "0-qual", "0-qualB", "0-qualB2", "0-qualB10", "0-qualC", "0.qualA", "0", "0.1.qual", "0.1", "1");
// all snapshots rated lower
assertVersionOrder(
"0_SNAPSHOT", "0.1.SNAPSHOT", "1-SNAPSHOT-X-X", "1-SNAPSHOT-X", "1-SNAPSHOT-XX-X", "1-SNAPSHOT-XX", "1-SNAPSHOT",
"1.0-SNAPSHOT-B", "1.0.SNAPSHOT-A",
"1.2-SNAPSHOT", "1.10-SNAPSHOT",
"qualifer",
"0", "0.1", "1");
}
private static void assertVersionOrder(String v1, String v2, String ...otherVersions) {
List<String> versions = MutableList.<String>of().append(v1, v2, otherVersions);
for (int i=0; i<versions.size(); i++) {
for (int j=0; j<versions.size(); j++) {
assertEquals(VersionComparator.getInstance().compare(
versions.get(i), versions.get(j)),
new Integer(i).compareTo(j), "comparing "+versions.get(i)+" and "+versions.get(j));
}
}
}
}