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