package org.apache.maven.index.artifact; /* * 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. */ import java.text.ParseException; import java.text.SimpleDateFormat; import org.apache.maven.index.artifact.Gav; import org.apache.maven.index.artifact.M1GavCalculator; import junit.framework.TestCase; public class M1GavCalculatorTest extends TestCase { private M1GavCalculator gavCalculator; private SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMdd.HHmmss" ); @Override public void setUp() throws Exception { super.setUp(); gavCalculator = new M1GavCalculator(); } protected Long parseTimestamp( String timeStamp ) throws ParseException { if ( timeStamp == null ) { return null; } else { return Long.valueOf( formatter.parse( timeStamp ).getTime() ); } } public void testGav() throws Exception { Gav gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0RC1-SNAPSHOT-javadoc.jar" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() ); assertEquals( "javadoc", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0RC1-SNAPSHOT-javadoc.jar", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); String path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/javadocs/jruby-1.0RC1-SNAPSHOT-javadoc.jar", path ); gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0RC1-SNAPSHOT.jar", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar", path ); gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar.md5" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getVersion() ); assertEquals( "1.0RC1-SNAPSHOT", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0RC1-SNAPSHOT.jar.md5", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( true, gav.isHash() ); assertEquals( Gav.HashType.md5, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/jars/jruby-1.0RC1-SNAPSHOT.jar.md5", path ); gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0-javadoc.jar" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0", gav.getVersion() ); assertEquals( "1.0", gav.getBaseVersion() ); assertEquals( "javadoc", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0-javadoc.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/javadocs/jruby-1.0-javadoc.jar", path ); gav = gavCalculator.pathToGav( "/org.jruby/javadocs/jruby-1.0-javadoc.jar.sha1" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0", gav.getVersion() ); assertEquals( "1.0", gav.getBaseVersion() ); assertEquals( "javadoc", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0-javadoc.jar.sha1", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( true, gav.isHash() ); assertEquals( Gav.HashType.sha1, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/javadocs/jruby-1.0-javadoc.jar.sha1", path ); gav = gavCalculator.pathToGav( "/org.jruby/jars/jruby-1.0.jar" ); assertEquals( "org.jruby", gav.getGroupId() ); assertEquals( "jruby", gav.getArtifactId() ); assertEquals( "1.0", gav.getVersion() ); assertEquals( "1.0", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "jruby-1.0.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.jruby/jars/jruby-1.0.jar", path ); gav = gavCalculator.pathToGav( "/maven/jars/dom4j-1.7-20060614.jar" ); assertEquals( "maven", gav.getGroupId() ); assertEquals( "dom4j", gav.getArtifactId() ); assertEquals( "1.7-20060614", gav.getVersion() ); assertEquals( "1.7-20060614", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "dom4j-1.7-20060614.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/maven/jars/dom4j-1.7-20060614.jar", path ); gav = gavCalculator.pathToGav( "maven/java-sources/velocity-1.5-SNAPSHOT-sources.jar" ); assertEquals( "maven", gav.getGroupId() ); assertEquals( "velocity", gav.getArtifactId() ); assertEquals( "1.5-SNAPSHOT", gav.getVersion() ); assertEquals( "1.5-SNAPSHOT", gav.getBaseVersion() ); assertEquals( "sources", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "velocity-1.5-SNAPSHOT-sources.jar", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/maven/java-sources/velocity-1.5-SNAPSHOT-sources.jar", path ); gav = gavCalculator.pathToGav( "castor/jars/castor-0.9.9-xml.jar" ); assertEquals( "castor", gav.getGroupId() ); assertEquals( "castor", gav.getArtifactId() ); assertEquals( "0.9.9-xml", gav.getVersion() ); assertEquals( "0.9.9-xml", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "castor-0.9.9-xml.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/castor/jars/castor-0.9.9-xml.jar", path ); gav = gavCalculator.pathToGav( "/org.slf4j/poms/slf4j-log4j12-1.4.3.pom" ); assertEquals( "org.slf4j", gav.getGroupId() ); assertEquals( "slf4j-log4j12", gav.getArtifactId() ); assertEquals( "1.4.3", gav.getVersion() ); assertEquals( "1.4.3", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "pom", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "slf4j-log4j12-1.4.3.pom", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/org.slf4j/poms/slf4j-log4j12-1.4.3.pom", path ); // TODO: fix this! /* There is an "Oh" letter at the end, not a zero! */ gav = gavCalculator.pathToGav( "/xpp3/poms/xpp3_min-1.1.3.4.O.pom" ); assertEquals( "xpp3", gav.getGroupId() ); assertEquals( "xpp3_min", gav.getArtifactId() ); assertEquals( "1.1.3.4.O", gav.getVersion() ); assertEquals( "1.1.3.4.O", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "pom", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "xpp3_min-1.1.3.4.O.pom", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/xpp3/poms/xpp3_min-1.1.3.4.O.pom", path ); } public void testNEXUS1336() throws Exception { Gav gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar" ); assertEquals( "castor", gav.getGroupId() ); assertEquals( "castor-ejb", gav.getArtifactId() ); assertEquals( "1.0.7-SNAPSHOT", gav.getVersion() ); assertEquals( "1.0.7-SNAPSHOT", gav.getBaseVersion() ); assertEquals( "client", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "castor-ejb-1.0.7-SNAPSHOT-client.jar", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); String path = gavCalculator.gavToPath( gav ); assertEquals( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar", path ); gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7.jar" ); assertEquals( "castor", gav.getGroupId() ); assertEquals( "castor-ejb", gav.getArtifactId() ); assertEquals( "1.0.7", gav.getVersion() ); assertEquals( "1.0.7", gav.getBaseVersion() ); assertEquals( null, gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "castor-ejb-1.0.7.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/castor/jars/castor-ejb-1.0.7.jar", path ); gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1" ); assertEquals( "castor", gav.getGroupId() ); assertEquals( "castor-ejb", gav.getArtifactId() ); assertEquals( "1.0.7-SNAPSHOT", gav.getVersion() ); assertEquals( "1.0.7-SNAPSHOT", gav.getBaseVersion() ); assertEquals( "client", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1", gav.getName() ); assertEquals( true, gav.isSnapshot() ); assertEquals( true, gav.isHash() ); assertEquals( Gav.HashType.sha1, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/castor/ejbs/castor-ejb-1.0.7-SNAPSHOT-client.jar.sha1", path ); gav = gavCalculator.pathToGav( "/castor/ejbs/castor-ejb-1.0.7-client.jar" ); assertEquals( "castor", gav.getGroupId() ); assertEquals( "castor-ejb", gav.getArtifactId() ); assertEquals( "1.0.7", gav.getVersion() ); assertEquals( "1.0.7", gav.getBaseVersion() ); assertEquals( "client", gav.getClassifier() ); assertEquals( "jar", gav.getExtension() ); assertEquals( null, gav.getSnapshotBuildNumber() ); assertEquals( null, gav.getSnapshotTimeStamp() ); assertEquals( "castor-ejb-1.0.7-client.jar", gav.getName() ); assertEquals( false, gav.isSnapshot() ); assertEquals( false, gav.isHash() ); assertEquals( null, gav.getHashType() ); path = gavCalculator.gavToPath( gav ); assertEquals( "/castor/ejbs/castor-ejb-1.0.7-client.jar", path ); } public void testGavExtreme() throws Exception { Gav gav = gavCalculator.pathToGav( "/" ); assertEquals( null, gav ); gav = gavCalculator.pathToGav( "/some/stupid/path" ); assertEquals( null, gav ); gav = gavCalculator.pathToGav( "/some/stupid/path/more/in/it" ); assertEquals( null, gav ); gav = gavCalculator.pathToGav( "/something/that/looks/" ); assertEquals( null, gav ); gav = gavCalculator.pathToGav( "/something/that/like-an-artifact.blah" ); assertEquals( null, gav ); // assertEquals( false, gav.isChecksum() ); // assertEquals( false, gav.isPrimary() ); // assertEquals( false, gav.isSnapshot() ); gav = gavCalculator.pathToGav( "/something/that/like-an-artifact.pom" ); assertEquals( null, gav ); // assertEquals( false, gav.isChecksum() ); // assertEquals( false, gav.isPrimary() ); // assertEquals( false, gav.isSnapshot() ); gav = gavCalculator.pathToGav( "/something/that/maven-metadata.xml" ); assertEquals( null, gav ); // assertEquals( false, gav.isChecksum() ); // assertEquals( false, gav.isPrimary() ); // assertEquals( false, gav.isSnapshot() ); gav = gavCalculator.pathToGav( "/something/that/like-SNAPSHOT/maven-metadata.xml" ); assertEquals( null, gav ); } }