You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/04/03 09:33:50 UTC

svn commit: r390972 - /maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java

Author: brett
Date: Mon Apr  3 00:33:47 2006
New Revision: 390972

URL: http://svn.apache.org/viewcvs?rev=390972&view=rev
Log:
[ARCHETYPE-13] make the test case useful
Submitted by: Eric Redmond

Modified:
    maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java

Modified: maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java
URL: http://svn.apache.org/viewcvs/maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java?rev=390972&r1=390971&r2=390972&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java (original)
+++ maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java Mon Apr  3 00:33:47 2006
@@ -16,14 +16,33 @@
  * limitations under the License.
  */
 
+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.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+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.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.context.Context;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.velocity.VelocityComponent;
 
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -74,9 +93,137 @@
 
         remoteRepositories.add( remoteRepository );
 
-        archetype.createArchetype( "org.apache.maven.archetypes", "maven-archetype-quickstart", "1.0-alpha-1-SNAPSHOT",
-                                   localRepository, remoteRepositories, parameters );
+        String archetypeGroupId = "org.apache.maven.archetypes";
+        String archetypeArtifactId = "maven-archetype-quickstart";
+        String archetypeVersion = "1.0-alpha-1-SNAPSHOT";
+        archetype.createArchetype( archetypeGroupId, archetypeArtifactId, archetypeVersion, localRepository,
+                                   remoteRepositories, parameters );
 
-        // TODO: validate output
+        // ----------------------------------------------------------------------
+        // Set up the Velocity context
+        // ----------------------------------------------------------------------
+
+        Context context = new VelocityContext();
+
+        for ( Iterator iterator = parameters.keySet().iterator(); iterator.hasNext(); )
+        {
+            String key = (String) iterator.next();
+
+            Object value = parameters.get( key );
+
+            context.put( key, value );
+        }
+
+        // ----------------------------------------------------------------------
+        // Validate POM generation
+        // ----------------------------------------------------------------------
+
+        ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class.getName() );
+        Artifact archetypeArtifact = artifactFactory.createArtifact( archetypeGroupId, archetypeArtifactId,
+                                                                     archetypeVersion, Artifact.SCOPE_RUNTIME, "jar" );
+
+        StringWriter writer = new StringWriter();
+
+        ClassLoader old = Thread.currentThread().getContextClassLoader();
+
+        Thread.currentThread().setContextClassLoader(
+            getContextClassloader( archetypeArtifact, localRepository, remoteRepositories ) );
+
+        try
+        {
+            VelocityComponent velocity = (VelocityComponent) lookup( VelocityComponent.class.getName() );
+
+            velocity.getEngine().mergeTemplate( Archetype.ARCHETYPE_RESOURCES + "/" + Archetype.ARCHETYPE_POM, context,
+                                                writer );
+        }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader( old );
+        }
+
+        Model generatedModel, templateModel;
+        try
+        {
+            StringReader strReader = new StringReader( writer.toString() );
+
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+
+            templateModel = reader.read( strReader );
+        }
+        catch ( IOException e )
+        {
+            throw new ArchetypeTemplateProcessingException( "Error reading template POM", e );
+        }
+
+        File artifactDir = getTestFile( "target", (String) parameters.get( "artifactId" ) );
+        File pomFile = getTestFile( artifactDir.getAbsolutePath(), Archetype.ARCHETYPE_POM );
+
+        try
+        {
+            FileReader pomReader = new FileReader( pomFile );
+
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+
+            generatedModel = reader.read( pomReader );
+        }
+        catch ( IOException e )
+        {
+            throw new ArchetypeTemplateProcessingException( "Error reading generated POM", e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new ArchetypeTemplateProcessingException( "Error reading generated POM", e );
+        }
+        assertEquals( "Generated POM ArtifactId is not equivalent to expected result.", generatedModel.getArtifactId(),
+                      templateModel.getArtifactId() );
+        assertEquals( "Generated POM GroupId is not equivalent to expected result.", generatedModel.getGroupId(),
+                      templateModel.getGroupId() );
+        assertEquals( "Generated POM Id is not equivalent to expected result.", generatedModel.getId(),
+                      templateModel.getId() );
+        assertEquals( "Generated POM Version is not equivalent to expected result.", generatedModel.getVersion(),
+                      templateModel.getVersion() );
+        assertEquals( "Generated POM Packaging is not equivalent to expected result.", generatedModel.getPackaging(),
+                      templateModel.getPackaging() );
+        assertEquals( "Generated POM Developers is not equivalent to expected result.", generatedModel.getDevelopers(),
+                      templateModel.getDevelopers() );
+        assertEquals( "Generated POM Scm is not equivalent to expected result.", generatedModel.getScm(),
+                      templateModel.getScm() );
+    }
+
+    // Gets the classloader for this artifact's file.
+    private ClassLoader getContextClassloader( Artifact archetypeArtifact, ArtifactRepository localRepository,
+                                               List remoteRepositories )
+        throws Exception
+    {
+        ArtifactResolver artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.class.getName() );
+        try
+        {
+            artifactResolver.resolve( archetypeArtifact, remoteRepositories, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new ArchetypeDescriptorException( "Error attempting to download archetype: " + e.getMessage(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new ArchetypeNotFoundException( "Archetype does not exist: " + e.getMessage(), e );
+        }
+
+        URLClassLoader archetypeJarLoader;
+        try
+        {
+            URL[] urls = new URL[1];
+
+            urls[0] = archetypeArtifact.getFile().toURL();
+
+            archetypeJarLoader = new URLClassLoader( urls );
+        }
+        catch ( IOException e )
+        {
+            throw new ArchetypeDescriptorException(
+                "Error reading the " + Archetype.ARCHETYPE_DESCRIPTOR + " descriptor.", e );
+        }
+
+        return archetypeJarLoader;
     }
 }