/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.apache.maven.artifact.versioning; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Test; @Test public class ComparableVersionTest { private static List<String> RHQ_VERSIONS = new ArrayList<String>(); static { RHQ_VERSIONS.add("4.0.0.GA"); RHQ_VERSIONS.add("4.1.0.GA"); RHQ_VERSIONS.add("4.2.0.GA"); RHQ_VERSIONS.add("4.2.1.GA"); RHQ_VERSIONS.add("4.3.0.GA"); RHQ_VERSIONS.add("4.3.1.RC1"); RHQ_VERSIONS.add("4.3.1.RC2"); RHQ_VERSIONS.add("4.3.1.GA"); RHQ_VERSIONS.add("4.4.0.RC1"); RHQ_VERSIONS.add("4.4.0.RC2"); RHQ_VERSIONS.add("4.4.0.GA"); } private static List<String> JON_VERSIONS = new ArrayList<String>(); static { JON_VERSIONS.add("2.4.0.GA"); JON_VERSIONS.add("2.4.1.GA"); JON_VERSIONS.add("4.2.0.JON300.GA"); JON_VERSIONS.add("4.2.0.JON.3.0.1.GA"); JON_VERSIONS.add("4.2.0.JON302GA"); JON_VERSIONS.add("4.4.0.JON310BETA1"); JON_VERSIONS.add("4.4.0.JON310CR1"); JON_VERSIONS.add("4.4.0.JON310GA"); JON_VERSIONS.add("4.4.0.JON311GA"); JON_VERSIONS.add("4.4.0.JON312CR1"); JON_VERSIONS.add("4.4.0.JON312GA"); } public void testRHQVersions() { testListOfVersionsStepByStep(RHQ_VERSIONS); testListOfVersionsSkippingVersions(RHQ_VERSIONS); } public void testJONVersions() { testListOfVersionsStepByStep(JON_VERSIONS); testListOfVersionsSkippingVersions(JON_VERSIONS); } private void testListOfVersionsStepByStep(List<String> versions) { String oldVer = null; String newVer = null; for (String ver : versions) { if (newVer != null) { oldVer = newVer; newVer = ver; compareVersions(oldVer, newVer); } else { newVer = ver; } } } private void testListOfVersionsSkippingVersions(List<String> versions) { // Start with the oldest, and test all versions after it making sure they are all newer. // After testing the oldest, go to the next oldest and do it again. // This tests a person skipping one or more versions when upgrading (say, upgrading from 2.0 to 4.0, skipping 3.0) if (versions.size() <= 1) { return; } String oldest = versions.get(0); for (int i = 1; i < versions.size(); i++) { compareVersions(oldest, versions.get(i)); } testListOfVersionsSkippingVersions(versions.subList(1, versions.size())); } public void testBZ_813967() { compareVersions("4.2.0.JON300.GA", "4.2.0.JON.3.0.1.GA"); } public void testSimpleVersionCompare() { compareVersions("1.0", "1.1"); compareVersions("1.0", "2.0"); compareVersions("1.0.0", "1.0.1"); } public void testSnapshotVersionCompare() { compareVersions("1.0-SNAPSHOT", "1.1-SNAPSHOT"); compareVersions("1.1-SNAPSHOT", "1.1.0.RC1"); compareVersions("1.1-SNAPSHOT", "1.1.0.GA"); compareVersions("1.1-SNAPSHOT", "1.1.0.GA"); compareVersions("1.1.1-SNAPSHOT", "1.1.1.GA"); compareVersions("1.1.0.GA", "1.1.1-SNAPSHOT"); // ver2 version number is still after ver1 version number, although ver2 is not production ready } public void testRCVersionCompare() { compareVersions("1.0.0.RC1", "1.1.0.RC1"); compareVersions("1.1.0.RC1", "1.1.0.RC2"); compareVersions("1.1.0.RC1", "1.1.0.RC10"); compareVersions("1.1.0.RC1", "1.1.0.GA"); compareVersions("1.1.0.GA", "1.1.1.RC1"); // ver2 version number is still after ver1 version number, although ver2 is not production ready compareVersions("4.0.0-SNAPSHOT", "4.0.0.CR2"); // CR is an alias for RC compareVersions("4.0.0-SNAPSHOT", "4.0.0.CR"); // CR is an alias for RC } public void testSnapshotBetaGACompare() { compareVersions("4.0.0-SNAPSHOT", "4.0.0.Beta1"); compareVersions("4.0.0.Beta1", "4.0.0"); compareVersions("4.0.0.Beta1", "4.0.0.GA"); } public void testBZ916790() { new ComparableVersion("3.13.1.201302221022"); // a bug caused this to throw an exception before compareVersions("3.13.1.201302221022", "3.13.1.201302221023"); compareVersions("3.13.1.201202221022", "3.13.1.201302221022"); } private void compareVersions(String ver1String, String ver2String) { //System.out.println("Testing: " + ver1String + "\t" + ver2String); ComparableVersion ver1 = new ComparableVersion(ver1String); ComparableVersion ver2 = new ComparableVersion(ver2String); assert !ver1.equals(ver2) : "Should not be equal 1=[" + ver1String + "]; 2=[" + ver2String + "]"; assert !ver2.equals(ver1) : "Should not be equal 1=[" + ver1String + "]; 2=[" + ver2String + "]"; assert ver1.compareTo(ver1) == 0 : "Identity compare failed 1=[" + ver1String + "]; 2=[" + ver2String + "]"; assert ver2.compareTo(ver2) == 0 : "Identity compare failed 1=[" + ver1String + "]; 2=[" + ver2String + "]"; assert ver1.compareTo(ver2) < 0 : "1 should be before 2: 1=[" + ver1String + "]; 2=[" + ver2String + "]"; assert ver2.compareTo(ver1) > 0 : "2 should be after 1: 1=[" + ver1String + "]; 2=[" + ver2String + "]"; } }