You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2006/06/08 18:18:05 UTC

svn commit: r412788 [1/2] - in /maven/shared/trunk/maven-shared-io: ./ src/main/java/org/apache/maven/shared/io/download/ src/main/java/org/apache/maven/shared/io/location/ src/main/resources/META-INF/plexus/ src/test/java/org/apache/maven/shared/io/ s...

Author: jdcasey
Date: Thu Jun  8 09:18:03 2006
New Revision: 412788

URL: http://svn.apache.org/viewvc?rev=412788&view=rev
Log:
All but the scanning tools are tested with coverage of 97+%, and both location and download tools use the MessageHolder for debug messages.

Added:
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java   (contents, props changed)
      - copied, changed from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactBasedLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java   (contents, props changed)
      - copied, changed from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileBasedLocation.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java   (contents, props changed)
      - copied, changed from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/UrlBasedLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java   (with props)
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java   (contents, props changed)
      - copied, changed from r412235, maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileBasedLocationTest.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/URLLocatorStrategyTest.java   (with props)
Removed:
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactBasedLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileBasedLocation.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/UrlBasedLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/AbstractLocationTest.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileBasedLocationTest.java
Modified:
    maven/shared/trunk/maven-shared-io/pom.xml
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DefaultDownloadManager.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DownloadManager.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocation.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocatorStrategy.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Locator.java
    maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocation.java
    maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocationTest.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocatorStrategyTest.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/LocatorTest.java
    maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/URLLocationTest.java

Modified: maven/shared/trunk/maven-shared-io/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/pom.xml?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/pom.xml (original)
+++ maven/shared/trunk/maven-shared-io/pom.xml Thu Jun  8 09:18:03 2006
@@ -25,6 +25,12 @@
   
   <dependencies>
     <dependency>
+      <groupId>easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <version>1.2_Java1.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact</artifactId>
       <version>[2.0,)</version>
@@ -45,6 +51,32 @@
       <version>[1.0.4,1.2]</version>
     </dependency>
   </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-clean-plugin</artifactId>
+        <configuration>
+          <fileSets>
+            <fileSet>
+              <directory>${basedir}</directory>
+              <includes>
+                <include>cobertura.ser</include>
+              </includes>
+            </fileSet>
+          </fileSets>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/TestUtils*</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 
   <reporting>
     <plugins>

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DefaultDownloadManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DefaultDownloadManager.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DefaultDownloadManager.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DefaultDownloadManager.java Thu Jun  8 09:18:03 2006
@@ -5,10 +5,13 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.shared.io.logging.MessageHolder;
 import org.apache.maven.wagon.ConnectionException;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
@@ -19,27 +22,43 @@
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.repository.Repository;
 
-public class DefaultDownloadManager implements DownloadManager
+public class DefaultDownloadManager
+    implements DownloadManager
 {
-    
+
+    public static final String ROLE_HINT = "default";
+
     private WagonManager wagonManager;
-    
+
+    private Map cache = new HashMap();
+
     public DefaultDownloadManager()
     {
     }
-    
+
     public DefaultDownloadManager( WagonManager wagonManager )
     {
         this.wagonManager = wagonManager;
     }
-    
-    public File download( String url ) throws DownloadFailedException
+
+    public File download( String url, MessageHolder messageHolder )
+        throws DownloadFailedException
     {
-        return download( url, Collections.EMPTY_LIST );
+        return download( url, Collections.EMPTY_LIST, messageHolder );
     }
-    
-    public File download( String url, List transferListeners ) throws DownloadFailedException
+
+    public File download( String url, List transferListeners, MessageHolder messageHolder )
+        throws DownloadFailedException
     {
+        File downloaded = (File) cache.get( url );
+
+        if ( downloaded != null && downloaded.exists() )
+        {
+            messageHolder.addMessage( "Using cached download: " + downloaded.getAbsolutePath() );
+
+            return downloaded;
+        }
+
         URL sourceUrl;
         try
         {
@@ -52,44 +71,75 @@
 
         Wagon wagon = null;
 
+        // Retrieve the correct Wagon instance used to download the remote archive
         try
         {
-            // Retrieve the correct Wagon instance used to download the remote archive
             wagon = wagonManager.getWagon( sourceUrl.getProtocol() );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
+        }
+
+        messageHolder.addMessage( "Using wagon: " + wagon + " to download: " + url );
 
+        try
+        {
             // create the landing file in /tmp for the downloaded source archive
-            File downloaded = File.createTempFile( "source-archive-", null );
+            downloaded = File.createTempFile( "download-", null );
+
+            // delete when the JVM exits, to avoid polluting the temp dir...
             downloaded.deleteOnExit();
+        }
+        catch ( IOException e )
+        {
+            throw new DownloadFailedException( url, "Failed to create temporary file target for download. Reason: "
+                + e.getMessage(), e );
+        }
 
-            // split the download URL into base URL and remote path for connecting, then retrieving.
-            String remotePath = sourceUrl.getPath();
-            String baseUrl = url.substring( 0, url.length() - remotePath.length() );
+        messageHolder.addMessage( "Download target is: " + downloaded.getAbsolutePath() );
 
-            for ( Iterator it = transferListeners.iterator(); it.hasNext(); )
-            {
-                TransferListener listener = (TransferListener) it.next();
-                wagon.addTransferListener( listener );
-            }
-
-            // connect to the remote site, and retrieve the archive. Note the separate methods in which
-            // base URL and remote path are used.
-            Repository repo = new Repository( sourceUrl.getHost(), baseUrl );
-            
+        // split the download URL into base URL and remote path for connecting, then retrieving.
+        String remotePath = sourceUrl.getPath();
+        String baseUrl = url.substring( 0, url.length() - remotePath.length() );
+
+        for ( Iterator it = transferListeners.iterator(); it.hasNext(); )
+        {
+            TransferListener listener = (TransferListener) it.next();
+            wagon.addTransferListener( listener );
+        }
+
+        // connect to the remote site, and retrieve the archive. Note the separate methods in which
+        // base URL and remote path are used.
+        Repository repo = new Repository( sourceUrl.getHost(), baseUrl );
+
+        messageHolder.addMessage( "Connecting to: " + repo.getHost() + "(baseUrl: " + repo.getUrl() + ")" );
+
+        try
+        {
             wagon.connect( repo, wagonManager.getAuthenticationInfo( repo.getId() ), wagonManager.getProxy( sourceUrl
                 .getProtocol() ) );
-            
-            wagon.get( remotePath, downloaded );
-            
-            return downloaded;
         }
-        catch ( UnsupportedProtocolException e )
+        catch ( ConnectionException e )
         {
             throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
         }
-        catch ( IOException e )
+        catch ( AuthenticationException e )
         {
             throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
         }
+
+        messageHolder.addMessage( "Getting: " + remotePath );
+
+        try
+        {
+            wagon.get( remotePath, downloaded );
+
+            // cache this for later download requests to the same instance...
+            cache.put( url, downloaded );
+
+            return downloaded;
+        }
         catch ( TransferFailedException e )
         {
             throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
@@ -102,14 +152,6 @@
         {
             throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
         }
-        catch ( ConnectionException e )
-        {
-            throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
-        }
-        catch ( AuthenticationException e )
-        {
-            throw new DownloadFailedException( url, "Download failed. Reason: " + e.getMessage(), e );
-        }
         finally
         {
             // ensure the Wagon instance is closed out properly.
@@ -117,11 +159,13 @@
             {
                 try
                 {
+                    messageHolder.addMessage( "Disconnecting." );
+
                     wagon.disconnect();
                 }
                 catch ( ConnectionException e )
                 {
-//                    getLog().debug( "Failed to disconnect wagon for: " + url, e );
+                    messageHolder.addMessage( "Failed to disconnect wagon for: " + url, e );
                 }
 
                 for ( Iterator it = transferListeners.iterator(); it.hasNext(); )

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DownloadManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DownloadManager.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DownloadManager.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/download/DownloadManager.java Thu Jun  8 09:18:03 2006
@@ -3,13 +3,16 @@
 import java.io.File;
 import java.util.List;
 
+import org.apache.maven.shared.io.logging.MessageHolder;
+
 public interface DownloadManager
 {
+    String ROLE = DownloadManager.class.getName();
 
-    File download( String url )
+    File download( String url, MessageHolder messageHolder )
         throws DownloadFailedException;
 
-    File download( String url, List transferListeners )
+    File download( String url, List transferListeners, MessageHolder messageHolder )
         throws DownloadFailedException;
 
 }

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocation.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocation.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocation.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocation.java Thu Jun  8 09:18:03 2006
@@ -3,7 +3,7 @@
 import org.apache.maven.artifact.Artifact;
 
 public class ArtifactLocation
-    extends FileBasedLocation
+    extends FileLocation
 {
 
     public ArtifactLocation( Artifact artifact, String specification )

Copied: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java (from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactBasedLocatorStrategy.java)
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java?p2=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java&p1=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactBasedLocatorStrategy.java&r1=412235&r2=412788&rev=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactBasedLocatorStrategy.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java Thu Jun  8 09:18:03 2006
@@ -10,7 +10,7 @@
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.shared.io.logging.MessageHolder;
 
-public class ArtifactBasedLocatorStrategy
+public class ArtifactLocatorStrategy
     implements LocatorStrategy
 {
     private final ArtifactFactory factory;
@@ -23,8 +23,8 @@
 
     private final List remoteRepositories;
 
-    public ArtifactBasedLocatorStrategy( ArtifactFactory factory, ArtifactResolver resolver,
-                                         ArtifactRepository localRepository, List remoteRepositories )
+    public ArtifactLocatorStrategy( ArtifactFactory factory, ArtifactResolver resolver,
+                                    ArtifactRepository localRepository, List remoteRepositories )
     {
         this.factory = factory;
         this.resolver = resolver;
@@ -32,9 +32,9 @@
         this.remoteRepositories = remoteRepositories;
     }
 
-    public ArtifactBasedLocatorStrategy( ArtifactFactory factory, ArtifactResolver resolver,
-                                         ArtifactRepository localRepository, List remoteRepositories,
-                                         String defaultArtifactType )
+    public ArtifactLocatorStrategy( ArtifactFactory factory, ArtifactResolver resolver,
+                                    ArtifactRepository localRepository, List remoteRepositories,
+                                    String defaultArtifactType )
     {
         this.factory = factory;
         this.resolver = resolver;
@@ -43,6 +43,11 @@
         this.defaultArtifactType = defaultArtifactType;
     }
 
+    /**
+     * Assumes artifact identity is given in a set of comma-delimited tokens of
+     * the form: <code>groupId:artifactId:version:type:classifier</code>, where
+     * type and classifier are optional.
+     */
     public Location resolve( String locationSpecification, MessageHolder messageHolder )
     {
         String[] parts = locationSpecification.split( ":" );
@@ -58,7 +63,10 @@
             String type = defaultArtifactType;
             if ( parts.length > 3 )
             {
-                type = parts[3];
+                if ( parts[3].trim().length() > 0 )
+                {
+                    type = parts[3];
+                }
             }
 
             String classifier = null;
@@ -67,6 +75,16 @@
                 classifier = parts[4];
             }
 
+            if ( parts.length > 5 )
+            {
+                messageHolder.newMessage().append( "Location specification has unused tokens: \'" );
+
+                for ( int i = 5; i < parts.length; i++ )
+                {
+                    messageHolder.append( ":" + parts[i] );
+                }
+            }
+
             Artifact artifact;
             if ( classifier == null )
             {
@@ -77,24 +95,35 @@
                 artifact = factory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier );
             }
 
-            messageHolder.append( "Resolving artifact: " + artifact.getId() );
             try
             {
                 resolver.resolve( artifact, remoteRepositories, localRepository );
-                
+
                 if ( artifact.getFile() != null )
                 {
                     location = new ArtifactLocation( artifact, locationSpecification );
                 }
+                else
+                {
+                    messageHolder.addMessage( "Supposedly resolved artifact: " + artifact.getId()
+                        + " does not have an associated file." );
+                }
             }
             catch ( ArtifactResolutionException e )
             {
-                messageHolder.append( e );
+                messageHolder.addMessage( "Failed to resolve artifact: " + artifact.getId() + " for location: "
+                    + locationSpecification, e );
             }
             catch ( ArtifactNotFoundException e )
             {
-                messageHolder.append( e );
+                messageHolder.addMessage( "Failed to resolve artifact: " + artifact.getId() + " for location: "
+                    + locationSpecification, e );
             }
+        }
+        else
+        {
+            messageHolder.addMessage( "Invalid artifact specification: \'" + locationSpecification
+                + "\'. Must contain at least three fields, separated by ':'." );
         }
 
         return location;

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategy.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java Thu Jun  8 09:18:03 2006
@@ -31,15 +31,17 @@
 
         URL resource = cloader.getResource( locationSpecification );
 
-        messageHolder.addMessage( "Resolved url: " + resource + " from classloader: " + cloader + " for location: "
-            + locationSpecification );
-        
         Location location = null;
 
         if ( resource != null )
         {
             location = new URLLocation( resource, locationSpecification, tempFilePrefix, tempFileSuffix,
                                         tempFileDeleteOnExit );
+        }
+        else
+        {
+            messageHolder.addMessage( "Failed to resolve classpath resource: " + locationSpecification
+                + " from classloader: " + cloader );
         }
 
         return location;

Copied: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java (from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileBasedLocation.java)
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java?p2=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java&p1=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileBasedLocation.java&r1=412235&r2=412788&rev=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileBasedLocation.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java Thu Jun  8 09:18:03 2006
@@ -7,7 +7,7 @@
 import java.nio.channels.FileChannel;
 
 
-public class FileBasedLocation
+public class FileLocation
     implements Location
 {
 
@@ -15,13 +15,13 @@
     private FileChannel channel;
     private final String specification;
     
-    public FileBasedLocation( File file, String specification )
+    public FileLocation( File file, String specification )
     {
         this.file = file;
         this.specification = specification;
     }
     
-    protected FileBasedLocation( String specification )
+    protected FileLocation( String specification )
     {
         this.specification = specification;
     }

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocation.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocatorStrategy.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocatorStrategy.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocatorStrategy.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/FileLocatorStrategy.java Thu Jun  8 09:18:03 2006
@@ -1,7 +1,6 @@
 package org.apache.maven.shared.io.location;
 
 import java.io.File;
-import java.io.IOException;
 
 import org.apache.maven.shared.io.logging.MessageHolder;
 
@@ -13,21 +12,11 @@
     {
         File file = new File( locationSpecification );
         
-        try
-        {
-            File canFile = file.getCanonicalFile();
-            file = canFile;
-        }
-        catch ( IOException e )
-        {
-            messageHolder.addMessage( "Failed to canonicalize: " + file.getAbsolutePath(), e );
-        }
-        
         Location location = null;
         
         if ( file.exists() )
         {
-            location = new FileBasedLocation( file, locationSpecification );
+            location = new FileLocation( file, locationSpecification );
         }
         else
         {

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Locator.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Locator.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Locator.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/Locator.java Thu Jun  8 09:18:03 2006
@@ -25,6 +25,11 @@
         this.strategies = new ArrayList();
     }
     
+    public MessageHolder getMessageHolder()
+    {
+        return messageHolder;
+    }
+    
     public void addStrategy( LocatorStrategy strategy )
     {
         this.strategies.add( strategy );

Modified: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocation.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocation.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocation.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocation.java Thu Jun  8 09:18:03 2006
@@ -7,7 +7,7 @@
 import org.codehaus.plexus.util.FileUtils;
 
 public class URLLocation
-    extends FileBasedLocation
+    extends FileLocation
 {
 
     private final URL url;

Copied: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java (from r412235, maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/UrlBasedLocatorStrategy.java)
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java?p2=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java&p1=maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/UrlBasedLocatorStrategy.java&r1=412235&r2=412788&rev=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/UrlBasedLocatorStrategy.java (original)
+++ maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java Thu Jun  8 09:18:03 2006
@@ -5,7 +5,7 @@
 
 import org.apache.maven.shared.io.logging.MessageHolder;
 
-public class UrlBasedLocatorStrategy
+public class URLLocatorStrategy
     implements LocatorStrategy
 {
 
@@ -15,11 +15,11 @@
 
     private boolean tempFileDeleteOnExit = true;
 
-    public UrlBasedLocatorStrategy()
+    public URLLocatorStrategy()
     {
     }
 
-    public UrlBasedLocatorStrategy( String tempFilePrefix, String tempFileSuffix, boolean tempFileDeleteOnExit )
+    public URLLocatorStrategy( String tempFilePrefix, String tempFileSuffix, boolean tempFileDeleteOnExit )
     {
         this.tempFilePrefix = tempFilePrefix;
         this.tempFileSuffix = tempFileSuffix;
@@ -30,7 +30,6 @@
     {
         Location location = null;
 
-        messageHolder.append( "Building URL from location: " + locationSpecification );
         try
         {
             URL url = new URL( locationSpecification );
@@ -40,7 +39,7 @@
         }
         catch ( MalformedURLException e )
         {
-            messageHolder.append( e );
+            messageHolder.addMessage( "Building URL from location: " + locationSpecification, e );
         }
 
         return location;

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/main/java/org/apache/maven/shared/io/location/URLLocatorStrategy.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/shared/trunk/maven-shared-io/src/main/resources/META-INF/plexus/components.xml Thu Jun  8 09:18:03 2006
@@ -1,9 +1,9 @@
 <component-set>
   <components>
     <component>
-      <role>org.apache.maven.shared.io.DownloadManager</role>
+      <role>org.apache.maven.shared.io.download.DownloadManager</role>
       <role-hint>default</role-hint>
-      <implementation>org.apache.maven.shared.io.DefaultDownloadManager</implementation>
+      <implementation>org.apache.maven.shared.io.download.DefaultDownloadManager</implementation>
       <requirements>
         <requirement>
           <role>org.apache.maven.artifact.manager.WagonManager</role>

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,39 @@
+package org.apache.maven.shared.io;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.easymock.MockControl;
+
+public class MockManager
+{
+    
+    private List mockControls = new ArrayList();
+    
+    public void add( MockControl control )
+    {
+        mockControls.add( control );
+    }
+    
+    public void replayAll()
+    {
+        for ( Iterator it = mockControls.iterator(); it.hasNext(); )
+        {
+            MockControl control = (MockControl) it.next();
+            
+            control.replay();
+        }
+    }
+    
+    public void verifyAll()
+    {
+        for ( Iterator it = mockControls.iterator(); it.hasNext(); )
+        {
+            MockControl control = (MockControl) it.next();
+            
+            control.verify();
+        }
+    }
+
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/MockManager.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,65 @@
+package org.apache.maven.shared.io;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.codehaus.plexus.util.IOUtil;
+
+public final class TestUtils
+{
+
+    private TestUtils()
+    {
+    }
+
+    public static void writeToFile( File file, String testStr )
+        throws IOException
+    {
+        FileWriter fw = null;
+        try
+        {
+            fw = new FileWriter( file );
+            fw.write( testStr );
+        }
+        finally
+        {
+            IOUtil.close( fw );
+        }
+    }
+    
+    public static String readFile( File file ) throws IOException
+    {
+        StringBuffer buffer = new StringBuffer();
+        
+        BufferedReader reader = new BufferedReader( new FileReader( file ) );
+        
+        String line = null;
+        
+        while( ( line = reader.readLine() ) != null )
+        {
+            if ( buffer.length() > 0 )
+            {
+                buffer.append( '\n' );
+            }
+            
+            buffer.append( line );
+        }
+        
+        return buffer.toString();
+    }
+
+    public static String toString( Throwable error )
+    {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter( sw );
+        
+        error.printStackTrace( pw );
+        
+        return sw.toString();
+    }
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/TestUtils.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,594 @@
+package org.apache.maven.shared.io.download;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+
+import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.shared.io.MockManager;
+import org.apache.maven.shared.io.TestUtils;
+import org.apache.maven.shared.io.logging.DefaultMessageHolder;
+import org.apache.maven.shared.io.logging.MessageHolder;
+import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.UnsupportedProtocolException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.PlexusTestCase;
+import org.easymock.MockControl;
+
+public class DefaultDownloadManagerTest
+    extends PlexusTestCase
+{
+
+    private MockManager mockManager;
+
+    private MockControl wagonManagerControl;
+
+    private WagonManager wagonManager;
+
+    private MockControl wagonControl;
+
+    private Wagon wagon;
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        mockManager = new MockManager();
+
+        wagonManagerControl = MockControl.createControl( WagonManager.class );
+        mockManager.add( wagonManagerControl );
+
+        wagonManager = (WagonManager) wagonManagerControl.getMock();
+
+        wagonControl = MockControl.createControl( Wagon.class );
+        mockManager.add( wagonControl );
+
+        wagon = (Wagon) wagonControl.getMock();
+    }
+
+    public void testShouldConstructWithNoParamsAndHaveNonNullMessageHolder()
+    {
+        new DefaultDownloadManager();
+    }
+
+    public void testShouldConstructWithWagonManager()
+    {
+        MockManager mockManager = new MockManager();
+
+        MockControl ctl = MockControl.createControl( WagonManager.class );
+        mockManager.add( ctl );
+
+        WagonManager wagonManager = (WagonManager) ctl.getMock();
+
+        mockManager.replayAll();
+
+        new DefaultDownloadManager( wagonManager );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldLookupInstanceDefaultRoleHint()
+        throws Exception
+    {
+        lookup( DownloadManager.ROLE, DefaultDownloadManager.ROLE_HINT );
+    }
+
+    public void testShouldFailToDownloadMalformedURL()
+    {
+        MockManager mockManager = new MockManager();
+
+        MockControl ctl = MockControl.createControl( WagonManager.class );
+        mockManager.add( ctl );
+
+        WagonManager wagonManager = (WagonManager) ctl.getMock();
+
+        mockManager.replayAll();
+
+        DownloadManager mgr = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            mgr.download( "://nothing.com/index.html", new DefaultMessageHolder() );
+
+            fail( "Should not download with invalid URL." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( e.getMessage().indexOf( "invalid URL" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldDownloadFromTempFileWithNoTransferListeners()
+        throws IOException, DownloadFailedException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupDefaultMockConfiguration();
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldDownloadFromTempFileTwiceAndUseCache()
+        throws IOException, DownloadFailedException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupDefaultMockConfiguration();
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        File first = downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+        MessageHolder mh = new DefaultMessageHolder();
+
+        File second = downloadManager.download( tempFile.toURL().toExternalForm(), mh );
+
+        assertSame( first, second );
+        assertEquals( 1, mh.size() );
+        assertTrue( mh.render().indexOf( "Using cached" ) > -1 );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldDownloadFromTempFileWithOneTransferListener()
+        throws IOException, DownloadFailedException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupDefaultMockConfiguration();
+
+        MockControl transferListenerControl = MockControl.createControl( TransferListener.class );
+        mockManager.add( transferListenerControl );
+
+        TransferListener transferListener = (TransferListener) transferListenerControl.getMock();
+
+        wagon.addTransferListener( transferListener );
+
+        wagon.removeTransferListener( transferListener );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        downloadManager.download( tempFile.toURL().toExternalForm(), Collections.singletonList( transferListener ),
+                                  new DefaultMessageHolder() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonProtocolNotFound()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonManagerGetException( new UnsupportedProtocolException( "not supported" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to retrieve wagon." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "UnsupportedProtocolException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonConnectThrowsConnectionException()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonConnectionException( new ConnectionException( "connect error" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to connect wagon." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "ConnectionException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonConnectThrowsAuthenticationException()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonConnectionException( new AuthenticationException( "bad credentials" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to connect wagon." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "AuthenticationException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonGetThrowsTransferFailedException()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonGetException( new TransferFailedException( "bad transfer" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to get resource." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "TransferFailedException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonGetThrowsResourceDoesNotExistException()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonGetException( new ResourceDoesNotExistException( "bad resource" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to get resource." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "ResourceDoesNotExistException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonGetThrowsAuthorizationException()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonGetException( new AuthorizationException( "bad transfer" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        try
+        {
+            downloadManager.download( tempFile.toURL().toExternalForm(), new DefaultMessageHolder() );
+
+            fail( "should have failed to get resource." );
+        }
+        catch ( DownloadFailedException e )
+        {
+            assertTrue( TestUtils.toString( e ).indexOf( "AuthorizationException" ) > -1 );
+        }
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToDownloadWhenWagonDisconnectThrowsConnectionException()
+        throws IOException, DownloadFailedException
+    {
+        File tempFile = File.createTempFile( "download-source", "test" );
+        tempFile.deleteOnExit();
+
+        setupMocksWithWagonDisconnectException( new ConnectionException( "not connected" ) );
+
+        mockManager.replayAll();
+
+        DownloadManager downloadManager = new DefaultDownloadManager( wagonManager );
+
+        MessageHolder mh = new DefaultMessageHolder();
+        
+        downloadManager.download( tempFile.toURL().toExternalForm(), mh );
+        
+        assertTrue( mh.render().indexOf( "ConnectionException" ) > -1 );
+
+        mockManager.verifyAll();
+    }
+
+    private void setupDefaultMockConfiguration()
+    {
+        try
+        {
+            wagonManager.getWagon( "file" );
+            wagonManagerControl.setReturnValue( wagon );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        wagonManager.getAuthenticationInfo( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        wagonManager.getProxy( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        try
+        {
+            wagon.connect( new Repository(), new AuthenticationInfo(), new ProxyInfo() );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthenticationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.get( "file:///some/path", new File( "." ) );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        }
+        catch ( TransferFailedException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthorizationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.disconnect();
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+    }
+
+    private void setupMocksWithWagonManagerGetException( Throwable error )
+    {
+        try
+        {
+            wagonManager.getWagon( "file" );
+            wagonManagerControl.setThrowable( error );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+    }
+
+    private void setupMocksWithWagonConnectionException( Throwable error )
+    {
+        try
+        {
+            wagonManager.getWagon( "file" );
+            wagonManagerControl.setReturnValue( wagon );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        wagonManager.getAuthenticationInfo( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        wagonManager.getProxy( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        try
+        {
+            wagon.connect( new Repository(), new AuthenticationInfo(), new ProxyInfo() );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+            wagonControl.setThrowable( error );
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthenticationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+    }
+
+    private void setupMocksWithWagonGetException( Throwable error )
+    {
+        try
+        {
+            wagonManager.getWagon( "file" );
+            wagonManagerControl.setReturnValue( wagon );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        wagonManager.getAuthenticationInfo( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        wagonManager.getProxy( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        try
+        {
+            wagon.connect( new Repository(), new AuthenticationInfo(), new ProxyInfo() );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthenticationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.get( "file:///some/path", new File( "." ) );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+            wagonControl.setThrowable( error );
+        }
+        catch ( TransferFailedException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthorizationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.disconnect();
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+    }
+
+    private void setupMocksWithWagonDisconnectException( Throwable error )
+    {
+        try
+        {
+            wagonManager.getWagon( "file" );
+            wagonManagerControl.setReturnValue( wagon );
+        }
+        catch ( UnsupportedProtocolException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        wagonManager.getAuthenticationInfo( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        wagonManager.getProxy( "" );
+        wagonManagerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        wagonManagerControl.setReturnValue( null );
+
+        try
+        {
+            wagon.connect( new Repository(), new AuthenticationInfo(), new ProxyInfo() );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthenticationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.get( "file:///some/path", new File( "." ) );
+            wagonControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        }
+        catch ( TransferFailedException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+        catch ( AuthorizationException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+
+        try
+        {
+            wagon.disconnect();
+            wagonControl.setThrowable( error );
+        }
+        catch ( ConnectionException e )
+        {
+            fail( "This shouldn't happen!!" );
+        }
+    }
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DefaultDownloadManagerTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,25 @@
+package org.apache.maven.shared.io.download;
+
+import junit.framework.TestCase;
+
+public class DownloadFailedExceptionTest
+    extends TestCase
+{
+    
+    public void testShouldConstructWithUrlAndMessage()
+    {
+        new DownloadFailedException( "http://www.google.com", "can't find." );
+    }
+
+    public void testShouldConstructWithUrlMessageAndException()
+    {
+        new DownloadFailedException( "http://www.google.com", "can't find.", new NullPointerException() );
+    }
+
+    public void testShouldRetrieveUrlFromConstructor()
+    {
+        String url = "http://www.google.com";
+        assertEquals( url, new DownloadFailedException( url, "can't find." ).getUrl() );
+    }
+
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/download/DownloadFailedExceptionTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocationTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocationTest.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocationTest.java (original)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocationTest.java Thu Jun  8 09:18:03 2006
@@ -3,19 +3,23 @@
 import java.io.File;
 import java.io.IOException;
 
+import junit.framework.TestCase;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.shared.io.TestUtils;
 
 public class ArtifactLocationTest
-    extends AbstractLocationTest
+    extends TestCase
 {
     
     public void testShouldConstructFromTempFileSpecification()
         throws IOException
     {
         File f = File.createTempFile( "artifact-location.", ".test" );
+        f.deleteOnExit();
 
         Artifact a = new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar",
                                           null, new DefaultArtifactHandler() );
@@ -31,10 +35,11 @@
         throws IOException
     {
         File f = File.createTempFile( "url-location.", ".test" );
+        f.deleteOnExit();
 
         String testStr = "This is a test";
 
-        writeToFile( f, testStr );
+        TestUtils.writeToFile( f, testStr );
 
         Artifact a = new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar",
                                           null, new DefaultArtifactHandler() );

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,548 @@
+package org.apache.maven.shared.io.location;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.shared.io.MockManager;
+import org.apache.maven.shared.io.logging.DefaultMessageHolder;
+import org.apache.maven.shared.io.logging.MessageHolder;
+import org.easymock.MockControl;
+
+public class ArtifactLocatorStrategyTest
+    extends TestCase
+{
+    
+    private MockManager mockManager = new MockManager();
+
+    private MockControl factoryControl;
+
+    private ArtifactFactory factory;
+
+    private MockControl resolverControl;
+
+    private ArtifactResolver resolver;
+
+    private MockControl localRepositoryControl;
+
+    private ArtifactRepository localRepository;
+
+    public void setUp()
+    {
+        factoryControl = MockControl.createControl( ArtifactFactory.class );
+        mockManager.add( factoryControl );
+
+        factory = (ArtifactFactory) factoryControl.getMock();
+
+        resolverControl = MockControl.createControl( ArtifactResolver.class );
+        mockManager.add( resolverControl );
+
+        resolver = (ArtifactResolver) resolverControl.getMock();
+
+        localRepositoryControl = MockControl.createControl( ArtifactRepository.class );
+        mockManager.add( localRepositoryControl );
+
+        localRepository = (ArtifactRepository) localRepositoryControl.getMock();
+    }
+
+    public void testShouldConstructWithoutDefaultArtifactType()
+    {
+        mockManager.replayAll();
+
+        new ArtifactLocatorStrategy( factory, resolver, localRepository, Collections.EMPTY_LIST );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldConstructWithDefaultArtifactType()
+    {
+        mockManager.replayAll();
+
+        new ArtifactLocatorStrategy( factory, resolver, localRepository, Collections.EMPTY_LIST, "zip" );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToResolveSpecWithOneToken()
+    {
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST, "zip" );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "one-token", mh );
+
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldFailToResolveSpecWithTwoTokens()
+    {
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST, "zip" );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "two:tokens", mh );
+
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithThreeTokensUsingDefaultType()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifact( "group", "artifact", "version", null, "jar" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version", mh );
+
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithThreeTokensUsingCustomizedDefaultType()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifact( "group", "artifact", "version", null, "zip" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST, "zip" );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version", mh );
+
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithFourTokens()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifact( "group", "artifact", "version", null, "zip" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version:zip", mh );
+
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithFiveTokens()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifactWithClassifier( "group", "artifact", "version", "zip", "classifier" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version:zip:classifier", mh );
+
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithFiveTokensAndEmptyTypeToken()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifactWithClassifier( "group", "artifact", "version", "jar", "classifier" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version::classifier", mh );
+
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldResolveSpecWithMoreThanFiveTokens()
+        throws IOException
+    {
+        File tempFile = File.createTempFile( "artifact-location.", ".temp" );
+        tempFile.deleteOnExit();
+
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+        artifact.getFile();
+        artifactControl.setReturnValue( tempFile );
+
+        factory.createArtifactWithClassifier( "group", "artifact", "version", "zip", "classifier" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version:zip:classifier:six:seven", mh );
+
+        assertNotNull( location );
+        assertEquals( 1, mh.size() );
+
+        assertTrue( mh.render().indexOf( ":six:seven" ) > -1 );
+
+        assertSame( tempFile, location.getFile() );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldNotResolveSpecToArtifactWithNullFile()
+        throws IOException
+    {
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+        artifact.getFile();
+        artifactControl.setReturnValue( null );
+        artifact.getId();
+        artifactControl.setReturnValue( "<some-artifact-id>" );
+
+        factory.createArtifact( "group", "artifact", "version", null, "jar" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version", mh );
+
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+
+        assertTrue( mh.render().indexOf( "<some-artifact-id>" ) > -1 );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldNotResolveWhenArtifactNotFoundExceptionThrown()
+        throws IOException
+    {
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+
+        artifact.getId();
+        artifactControl.setReturnValue( "<some-artifact-id>" );
+
+        factory.createArtifact( "group", "artifact", "version", null, "jar" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+            resolverControl.setThrowable( new ArtifactNotFoundException( "not found", "group", "artifact", "version",
+                                                                         "jar", Collections.EMPTY_LIST,
+                                                                         "http://nowhere.com", Collections.EMPTY_LIST,
+                                                                         new NullPointerException() ) );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version", mh );
+
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+
+        assertTrue( mh.render().indexOf( "<some-artifact-id>" ) > -1 );
+        assertTrue( mh.render().indexOf( "not found" ) > -1 );
+
+        mockManager.verifyAll();
+    }
+
+    public void testShouldNotResolveWhenArtifactResolutionExceptionThrown()
+        throws IOException
+    {
+        MockControl artifactControl = MockControl.createControl( Artifact.class );
+        mockManager.add( artifactControl );
+
+        Artifact artifact = (Artifact) artifactControl.getMock();
+
+        artifact.getId();
+        artifactControl.setReturnValue( "<some-artifact-id>" );
+
+        factory.createArtifact( "group", "artifact", "version", null, "jar" );
+        factoryControl.setReturnValue( artifact );
+
+        try
+        {
+            resolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+            resolverControl.setThrowable( new ArtifactResolutionException( "resolution failed", "group", "artifact",
+                                                                           "version", "jar", Collections.EMPTY_LIST,
+                                                                           Collections.EMPTY_LIST,
+                                                                           new NullPointerException() ) );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            // should never happen
+            fail( "This should NEVER happen. It's a mock!" );
+        }
+
+        mockManager.replayAll();
+
+        LocatorStrategy strategy = new ArtifactLocatorStrategy( factory, resolver, localRepository,
+                                                                Collections.EMPTY_LIST );
+        MessageHolder mh = new DefaultMessageHolder();
+
+        Location location = strategy.resolve( "group:artifact:version", mh );
+
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+
+        assertTrue( mh.render().indexOf( "<some-artifact-id>" ) > -1 );
+        assertTrue( mh.render().indexOf( "resolution failed" ) > -1 );
+
+        mockManager.verifyAll();
+    }
+
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ArtifactLocatorStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java?rev=412788&view=auto
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java (added)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java Thu Jun  8 09:18:03 2006
@@ -0,0 +1,40 @@
+package org.apache.maven.shared.io.location;
+
+import org.apache.maven.shared.io.logging.DefaultMessageHolder;
+import org.apache.maven.shared.io.logging.MessageHolder;
+
+import junit.framework.TestCase;
+
+public class ClasspathResourceLocatorStrategyTest
+    extends TestCase
+{
+    
+    public void testShouldConstructWithNoParams()
+    {
+        new ClasspathResourceLocatorStrategy();
+    }
+
+    public void testShouldConstructWithTempFileOptions()
+    {
+        new ClasspathResourceLocatorStrategy( "prefix.", ".suffix", true );
+    }
+
+    public void testShouldFailToResolveMissingClasspathResource()
+    {
+        MessageHolder mh = new DefaultMessageHolder();
+        Location location = new ClasspathResourceLocatorStrategy().resolve( "/some/missing/path", mh );
+        
+        assertNull( location );
+        assertEquals( 1, mh.size() );
+    }
+    
+    public void testShouldResolveExistingClasspathResourceWithoutPrecedingSlash()
+    {
+        MessageHolder mh = new DefaultMessageHolder();
+        Location location = new ClasspathResourceLocatorStrategy().resolve( "META-INF/maven/test.properties", mh );
+        
+        assertNotNull( location );
+        assertEquals( 0, mh.size() );
+    }
+    
+}

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java (from r412235, maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileBasedLocationTest.java)
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java?p2=maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java&p1=maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileBasedLocationTest.java&r1=412235&r2=412788&rev=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileBasedLocationTest.java (original)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java Thu Jun  8 09:18:03 2006
@@ -4,8 +4,12 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
-public class FileBasedLocationTest
-    extends AbstractLocationTest
+import org.apache.maven.shared.io.TestUtils;
+
+import junit.framework.TestCase;
+
+public class FileLocationTest
+    extends TestCase
 {
     
     public void testShouldConstructWithFileThenRetrieveSameFile() throws IOException
@@ -13,7 +17,7 @@
         File file = File.createTempFile( "test.", ".file-location" );
         file.deleteOnExit();
         
-        FileBasedLocation location = new FileBasedLocation( file, file.getAbsolutePath() );
+        FileLocation location = new FileLocation( file, file.getAbsolutePath() );
         
         assertSame( file, location.getFile() );
         assertEquals( file.getAbsolutePath(), location.getSpecification() );
@@ -26,9 +30,9 @@
         
         String testStr = "This is a test";
         
-        writeToFile( file, testStr );
+        TestUtils.writeToFile( file, testStr );
         
-        FileBasedLocation location = new FileBasedLocation( file, file.getAbsolutePath() );
+        FileLocation location = new FileLocation( file, file.getAbsolutePath() );
         
         location.open();
         
@@ -45,9 +49,9 @@
         
         String testStr = "This is a test";
         
-        writeToFile( file, testStr );
+        TestUtils.writeToFile( file, testStr );
         
-        FileBasedLocation location = new FileBasedLocation( file, file.getAbsolutePath() );
+        FileLocation location = new FileLocation( file, file.getAbsolutePath() );
         
         location.open();
         
@@ -64,9 +68,9 @@
         
         String testStr = "This is a test";
         
-        writeToFile( file, testStr );
+        TestUtils.writeToFile( file, testStr );
         
-        FileBasedLocation location = new FileBasedLocation( file, file.getAbsolutePath() );
+        FileLocation location = new FileLocation( file, file.getAbsolutePath() );
         
         location.open();
         
@@ -120,7 +124,7 @@
         assertEquals( file.getAbsolutePath(), location.getSpecification() );
     }
     
-    private static final class TestFileLocation extends FileBasedLocation
+    private static final class TestFileLocation extends FileLocation
     {
 
         TestFileLocation( String specification )

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocationTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocatorStrategyTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocatorStrategyTest.java?rev=412788&r1=412787&r2=412788&view=diff
==============================================================================
--- maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocatorStrategyTest.java (original)
+++ maven/shared/trunk/maven-shared-io/src/test/java/org/apache/maven/shared/io/location/FileLocatorStrategyTest.java Thu Jun  8 09:18:03 2006
@@ -8,14 +8,6 @@
 
 import junit.framework.TestCase;
 
-/*
- * NOTE: Coverage reporting shows that this strategy is a bit on the low side.
- * However, looking deeper it becomes apparent that the reason for this is the 
- * try/catch when trying to canonicalize the file...and I haven't been able to 
- * find a reliable way to break canonicalization. Either way, it will only change
- * the message output, not the resulting location's reachability...so this is
- * non-critical.
- */
 public class FileLocatorStrategyTest
     extends TestCase
 {
@@ -50,6 +42,8 @@
         Location location = fls.resolve( f.getAbsolutePath(), mh );
         
         assertNull( location );
+        
+        System.out.println( mh.render() );
         
         assertEquals( 1, mh.size() );
     }