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;
}
}