Author: brett
Date: Thu Feb 21 21:50:14 2008
New Revision: 630098

URL: http://svn.apache.org/viewvc?rev=630098&view=rev
Log:
[MRM-674] correct problems with test-sources classifier and alternate version 
approaches
Merged from: r630092,r630094 on archiva-1.0.x branch

Modified:
    
maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactClassifierMapping.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyPathParser.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
    
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyPathParserTest.java

Modified: 
maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
 Thu Feb 21 21:50:14 2008
@@ -44,7 +44,7 @@
         "(alpha[_.0-9]*)",
         "(beta[_.0-9]*)",
         "(rc[_.0-9]*)",
-        "(test[_.0-9]*)",
+//        "(test[_.0-9]*)", -- omitted for MRM-681, can be reinstated as part 
of MRM-712
         "(debug[_.0-9]*)",
         "(unofficial[_.0-9]*)",
         "(current)",
@@ -57,8 +57,6 @@
         "(incubator)",
         "([ab][_.0-9]+)" };
 
-    private static final String VersionMegaPattern = StringUtils.join( 
versionPatterns, '|' );
-
     public static final String SNAPSHOT = "SNAPSHOT";
 
     public static final Pattern UNIQUE_SNAPSHOT_PATTERN = Pattern.compile( 
"^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );
@@ -66,7 +64,9 @@
     public static final Pattern TIMESTAMP_PATTERN = Pattern.compile( 
"^([0-9]{8})\\.([0-9]{6})$" );
 
     public static final Pattern GENERIC_SNAPSHOT_PATTERN = Pattern.compile( 
"^(.*)-" + SNAPSHOT );
-    
+
+    private static final Pattern VERSION_MEGA_PATTERN = Pattern.compile( 
StringUtils.join( versionPatterns, '|' ), Pattern.CASE_INSENSITIVE );
+
     /**
      * <p>
      * Tests if the unknown string contains elements that identify it as a 
version string (or not).
@@ -85,7 +85,6 @@
     {
         String versionParts[] = StringUtils.split( unknown, '-' );
 
-        Pattern pat = Pattern.compile( VersionMegaPattern, 
Pattern.CASE_INSENSITIVE );
         Matcher mat;
 
         int countValidParts = 0;
@@ -93,7 +92,7 @@
         for ( int i = 0; i < versionParts.length; i++ )
         {
             String part = versionParts[i];
-            mat = pat.matcher( part );
+            mat = VERSION_MEGA_PATTERN.matcher( part );
 
             if ( mat.matches() )
             {
@@ -124,8 +123,7 @@
      */
     public static boolean isSimpleVersionKeyword( String identifier )
     {
-        Pattern pat = Pattern.compile( VersionMegaPattern, 
Pattern.CASE_INSENSITIVE );
-        Matcher mat = pat.matcher( identifier );
+        Matcher mat = VERSION_MEGA_PATTERN.matcher( identifier );
 
         return mat.matches();
     }

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactClassifierMapping.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactClassifierMapping.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactClassifierMapping.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactClassifierMapping.java
 Thu Feb 21 21:50:14 2008
@@ -19,12 +19,8 @@
  * under the License.
  */
 
-import org.apache.commons.lang.StringUtils;
-
-import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 /**
  * ArtifactExtensionMapping
@@ -38,9 +34,9 @@
     static
     {
         typeToClassifierMap = new HashMap<String, String>();
-        typeToClassifierMap.put( "java-source", "sources" );
-        typeToClassifierMap.put( "javadoc.jar", "javadoc" );
-        typeToClassifierMap.put( "javadoc", "javadoc" );
+        typeToClassifierMap.put( "java-sources", "sources" );
+        typeToClassifierMap.put( "javadoc.jars", "javadoc" );
+        typeToClassifierMap.put( "javadocs", "javadoc" );
     }
 
     public static String getClassifier( String type )

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
 Thu Feb 21 21:50:14 2008
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import org.apache.commons.lang.StringUtils;
-
-import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Pattern;
@@ -70,60 +67,44 @@
         return type.replace( '-', '.' );
     }
 
-    public static String guessTypeFromFilename( File file )
+    /**
+     * Determine if a given artifact Id conforms to the naming scheme for a 
maven plugin.
+     *
+     * @param artifactId the artifactId to test.
+     * @return true if this artifactId conforms to the naming scheme for a 
maven plugin.
+     */
+    public static boolean isMavenPlugin( String artifactId )
     {
-        return guessTypeFromFilename( file.getName() );
+        return mavenPluginPattern.matcher( artifactId ).matches();
     }
 
-    public static String guessTypeFromFilename( String filename )
+    public static String mapExtensionAndClassifierToType( String classifier, 
String extension )
     {
-        if ( StringUtils.isBlank( filename ) )
+        if ( "sources".equals( classifier ) )
         {
-            return null;
+            return "java-source";
         }
-
-        String normalizedName = filename.toLowerCase().trim();
-        int idx = normalizedName.lastIndexOf( '.' );
-
-        if ( idx == ( -1 ) )
+        else if ( "javadoc".equals( classifier ) )
         {
-            return null;
+            return "javadoc";
         }
+        return mapExtensionToType( extension );
+    }
 
-        if ( normalizedName.endsWith( ".tar.gz" ) )
+    public static String mapExtensionToType( String extension )
+    {
+        if ( extension.equals( "tar.gz" ) )
         {
             return "distribution-tgz";
         }
-        if ( normalizedName.endsWith( ".tar.bz2" ) )
+        else  if ( extension.equals( "tar.bz2" ) )
         {
             return "distribution-bzip";
         }
-        else if ( normalizedName.endsWith( ".zip" ) )
+        else  if ( extension.equals( "zip" ) )
         {
             return "distribution-zip";
         }
-        else if ( normalizedName.endsWith( "-sources.jar" ) )
-        {
-            return "java-source";
-        }
-        else if ( normalizedName.endsWith( "-javadoc.jar" ) )
-        {
-            return "javadoc";
-        }
-        else
-        {
-            return normalizedName.substring( idx + 1 );
-        }
-    }
-
-    /**
-     * Determine if a given artifact Id conforms to the naming scheme for a 
maven plugin.
-     *
-     * @param artifactId the artifactId to test.
-     * @return true if this artifactId conforms to the naming scheme for a 
maven plugin.
-     */
-    public static boolean isMavenPlugin( String artifactId )
-    {
-        return mavenPluginPattern.matcher( artifactId ).matches();
+        return extension;
     }
 }

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/DefaultPathParser.java
 Thu Feb 21 21:50:14 2008
@@ -147,7 +147,7 @@
                     artifact.setClassifier( parser.remaining() );
 
                     // Set the type.
-                    artifact.setType( 
ArtifactExtensionMapping.guessTypeFromFilename( filename ) );
+                    artifact.setType( 
ArtifactExtensionMapping.mapExtensionAndClassifierToType( 
artifact.getClassifier(), parser.getExtension() ) );
                     break;
                 case '.':
                     // We have an dual extension possibility.
@@ -156,7 +156,7 @@
                     break;
                 case 0:
                     // End of the filename, only a simple extension left. - 
Set the type.
-                    artifact.setType( 
ArtifactExtensionMapping.guessTypeFromFilename( filename ) );
+                    artifact.setType( 
ArtifactExtensionMapping.mapExtensionToType( parser.getExtension() ) );
                     break;
             }
 

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/FilenameParser.java
 Thu Feb 21 21:50:14 2008
@@ -40,8 +40,10 @@
 
     private static final Pattern mavenPluginPattern = Pattern.compile( 
"(maven-.*-plugin)|(.*-maven-plugin)" );
 
-    private static final Pattern extensionPattern = Pattern.compile( 
"(.tar.gz$)|(.tar.bz2$)|(.[a-z0-9]*$)",
-                                                                     
Pattern.CASE_INSENSITIVE );
+    private static final Pattern extensionPattern =
+        Pattern.compile( "(.tar.gz$)|(.tar.bz2$)|(.[a-z0-9]*$)", 
Pattern.CASE_INSENSITIVE );
+
+    private static final Pattern SNAPSHOT_PATTERN = Pattern.compile( 
"^([0-9]{8}\\.[0-9]{6}-[0-9]+)(.*)$" );
 
     private static final Pattern section = Pattern.compile( "([^-]*)" );
 
@@ -90,16 +92,39 @@
 
     protected String expect( String expected )
     {
+        String value = null;
+
         if ( name.startsWith( expected, offset ) )
         {
+            value = expected;
+        }
+        else if ( VersionUtil.isGenericSnapshot( expected ) )
+        {
+            String version = name.substring( offset );
+
+            // check it starts with the same version up to the snapshot part
+            int leadingLength = expected.length() - 9;
+            if ( version.startsWith( expected.substring( 0, leadingLength ) ) 
&& version.length() > leadingLength )
+            {
+                // If we expect a non-generic snapshot - look for the timestamp
+                Matcher m = SNAPSHOT_PATTERN.matcher( version.substring( 
leadingLength + 1 ) );
+                if ( m.matches() )
+                {
+                    value = version.substring( 0, leadingLength + 1 ) + 
m.group( 1 );
+                }
+            }
+        }
+
+        if ( value != null )
+        {
             // Potential hit. check for '.' or '-' at end of expected.
-            int seperatorOffset = offset + expected.length();
+            int seperatorOffset = offset + value.length();
 
             // Test for "out of bounds" first. 
             if ( seperatorOffset >= name.length() )
             {
                 offset = name.length();
-                return expected;
+                return value;
             }
 
             // Test for seperator char.
@@ -107,16 +132,16 @@
             if ( ( seperatorChar == '-' ) || ( seperatorChar == '.' ) )
             {
                 offset = seperatorOffset + 1;
-                return expected;
+                return value;
             }
         }
 
         return null;
     }
-    
+
     /**
      * Get the current seperator character.
-     * 
+     *
      * @return the seperator character (either '.' or '-'), or 0 if no 
seperator character available.
      */
     protected char seperator()
@@ -230,5 +255,5 @@
         return ver.toString();
     }
 
-    
+
 }

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyPathParser.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyPathParser.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyPathParser.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/LegacyPathParser.java
 Thu Feb 21 21:50:14 2008
@@ -19,16 +19,15 @@
  * under the License.
  */
 
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Properties;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.LegacyArtifactPath;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.layout.LayoutException;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 /**
  * LegacyPathParser is a parser for maven 1 (legacy layout) paths to
  * ArtifactReference.
@@ -163,8 +162,23 @@
             }
         }
 
+        String classifier = ArtifactClassifierMapping.getClassifier( 
expectedType );
+        if ( classifier != null )
+        {
+            String version = artifact.getVersion();
+            if ( ! version.endsWith( "-" + classifier ) )
+            {
+                throw new LayoutException( INVALID_ARTIFACT_PATH + 
expectedType + " artifacts must use the classifier " + classifier );
+            }
+            version = version.substring( 0, version.length() - 
classifier.length() - 1 );
+            artifact.setVersion( version );
+            artifact.setClassifier( classifier );
+        }
+
+        String extension = parser.getExtension();
+
         // Set Type
-        artifact.setType( ArtifactExtensionMapping.guessTypeFromFilename( 
filename ) );
+        artifact.setType( 
ArtifactExtensionMapping.mapExtensionAndClassifierToType( classifier, extension 
) );
 
         // Sanity Check: does it have an extension?
         if ( StringUtils.isEmpty( artifact.getType() ) )
@@ -183,27 +197,13 @@
             String trimPathType = expectedType.substring( 0, 
expectedType.length() - 1 );
 
             String expectedExtension = ArtifactExtensionMapping.getExtension( 
trimPathType );
-            String actualExtension = parser.getExtension();
 
-            if ( !expectedExtension.equals( actualExtension ) )
+            if ( !expectedExtension.equals( extension ) )
             {
-                throw new LayoutException( INVALID_ARTIFACT_PATH + "mismatch 
on extension [" + actualExtension
+                throw new LayoutException( INVALID_ARTIFACT_PATH + "mismatch 
on extension [" + extension
                     + "] and layout specified type [" + expectedType + "] 
(which maps to extension: ["
                     + expectedExtension + "]) on path [" + path + "]" );
             }
-        }
-
-        String classifier = ArtifactClassifierMapping.getClassifier( 
artifact.getType() );
-        if ( classifier != null )
-        {
-            String version = artifact.getVersion();
-            if ( ! version.endsWith( "-" + classifier ) )
-            {
-                throw new LayoutException( INVALID_ARTIFACT_PATH + 
expectedType + " artifacts must use the classifier " + classifier );
-            }
-            version = version.substring( 0, version.length() - 
classifier.length() - 1 );
-            artifact.setVersion( version );
-            artifact.setClassifier( classifier );
         }
 
         return artifact;

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/DefaultPathParserTest.java
 Thu Feb 21 21:50:14 2008
@@ -260,6 +260,40 @@
     }
 
     /**
+     * A timestamped versioned artifact, should reside in a SNAPSHOT 
baseversion directory.
+     * @throws LayoutException
+     */
+    public void testGoodLongSnapshotMavenTest()
+        throws LayoutException
+    {
+        String groupId = "a.group.id";
+        String artifactId = "artifact-id";
+        String version = "1.0-abc-1.1-20080221.062205-9";
+        String classifier = null;
+        String type = "pom";
+        String path = 
"a/group/id/artifact-id/1.0-abc-1.1-SNAPSHOT/artifact-id-1.0-abc-1.1-20080221.062205-9.pom";
+
+        assertLayout( path, groupId, artifactId, version, classifier, type );
+    }
+
+    /**
+     * A timestamped versioned artifact, should reside in a SNAPSHOT 
baseversion directory.
+     * @throws LayoutException
+     */
+    public void testClassifiedSnapshotMavenTest()
+        throws LayoutException
+    {
+        String groupId = "a.group.id";
+        String artifactId = "artifact-id";
+        String version = "1.0-20070219.171202-34";
+        String classifier = "test-sources";
+        String type = "jar";
+        String path = 
"a/group/id/artifact-id/1.0-SNAPSHOT/artifact-id-1.0-20070219.171202-34-test-sources.jar";
+
+        assertLayout( path, groupId, artifactId, version, classifier, type );
+    }
+
+    /**
      * [MRM-519] version identifiers within filename cause misidentification 
of version.
      * Example uses "test" in artifact Id, which is also part of the 
versionKeyword list.
      */

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/FilenameParserTest.java
 Thu Feb 21 21:50:14 2008
@@ -149,4 +149,34 @@
         assertEquals( "libfobs4jmf-0.4.1.4-20080217.211715-4", 
parser.getName() );
         assertEquals( "jnilib", parser.getExtension() );
     }
+
+    public void testInterveningVersion()
+    {
+        FilenameParser parser = new FilenameParser( 
"artifact-id-1.0-abc-1.1-20080221.062205-9.pom" );
+
+        assertEquals( "artifact-id", parser.nextNonVersion() );
+        assertEquals( "1.0-abc-1.1-20080221.062205-9", parser.expect( 
"1.0-abc-1.1-SNAPSHOT" ) );
+        assertNull( null, parser.remaining() );
+        assertEquals( "artifact-id-1.0-abc-1.1-20080221.062205-9", 
parser.getName() );
+        assertEquals( "pom", parser.getExtension() );
+    }
+
+    public void testExpectWrongSnapshot()
+    {
+        FilenameParser parser = new FilenameParser( 
"artifact-id-1.0-20080221.062205-9.pom" );
+
+        assertEquals( "artifact-id", parser.nextNonVersion() );
+        assertNull( parser.expect( "2.0-SNAPSHOT" ) );
+    }
+
+    public void testClassifier()
+    {
+        FilenameParser parser = new FilenameParser( 
"artifact-id-1.0-20070219.171202-34-test-sources.jar" );
+
+        assertEquals( "artifact-id", parser.nextNonVersion() );
+        assertEquals( "1.0-20070219.171202-34", parser.nextVersion() );
+        assertEquals( "test-sources", parser.remaining() );
+        assertEquals( "artifact-id-1.0-20070219.171202-34-test-sources", 
parser.getName() );
+        assertEquals( "jar", parser.getExtension() );
+    }
 }

Modified: 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyPathParserTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyPathParserTest.java?rev=630098&r1=630097&r2=630098&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyPathParserTest.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/content/LegacyPathParserTest.java
 Thu Feb 21 21:50:14 2008
@@ -21,7 +21,6 @@
 
 
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.DefaultArchivaConfiguration;
 import org.apache.maven.archiva.configuration.LegacyArtifactPath;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.AbstractRepositoryLayerTestCase;
@@ -212,6 +211,8 @@
         String path = 
"com.foo.lib/javadoc.jars/foo-lib-2.1-alpha-1-javadoc.jar";
 
         assertLayout( path, groupId, artifactId, version, classifier, type );
+
+        assertLayout( "com.foo.lib/javadocs/foo-lib-2.1-alpha-1-javadoc.jar", 
"com.foo.lib", "foo-lib", "2.1-alpha-1", "javadoc", "javadoc" );
     }
 
     /**
@@ -227,6 +228,35 @@
         String type = "java-source"; // oddball type-spec (should result in 
jar extension)
         String classifier= "sources";
         String path = 
"com.foo.lib/java-sources/foo-lib-2.1-alpha-1-sources.jar";
+
+        assertLayout( path, groupId, artifactId, version, classifier, type );
+    }
+
+    /**
+     * Test the classifier, and java-source type spec.
+     * @throws LayoutException
+     */
+    public void testBadClassifierFooLibSources()
+        throws LayoutException
+    {
+        assertBadPath( "com.foo.lib/java-sources/foo-lib-2.1-alpha-1.jar", 
"missing required classifier" );
+        assertBadPath( 
"com.foo.lib/java-sources/foo-lib-2.1-alpha-1-javadoc.jar", "incorrect 
classifier" );
+        assertBadPath( 
"com.foo.lib/java-sources/foo-lib-2.1-alpha-1-other.jar", "incorrect 
classifier" );
+    }
+
+    /**
+     * Test the classifier, and java-source type spec.
+     * @throws LayoutException
+     */
+    public void testGoodFooLibTestSources()
+        throws LayoutException
+    {
+        String groupId = "com.foo.lib";
+        String artifactId = "foo-lib";
+        String version = "2.1-alpha-1-test-sources";
+        String type = "jar";
+        String classifier = null; // we can't parse this type of classifier in 
legacy format
+        String path = "com.foo.lib/jars/foo-lib-2.1-alpha-1-test-sources.jar";
 
         assertLayout( path, groupId, artifactId, version, classifier, type );
     }


Reply via email to