Adding new unit test for MASSEMBLY-210. It doesn't work yet, even to the extent that it should without fixing MASSEMBLY-210, so I've excluded it in the POM's surefire config.
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@548535 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 2e7cecc..444f3e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,18 @@
</dependency>
</dependencies>
<build>
- <plugins>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.3</version>
+
+ <configuration>
+ <excludes>
+ <exclude>**/DefaultRepositoryAssemblerTest.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-maven-plugin</artifactId>
diff --git a/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java b/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
index 0569275..348369d 100755
--- a/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
+++ b/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
@@ -111,6 +111,24 @@
*/
protected MavenProjectBuilder projectBuilder;
+ public DefaultRepositoryAssembler()
+ {
+ // used for plexus init.
+ }
+
+ public DefaultRepositoryAssembler( ArtifactFactory artifactFactory, ArtifactResolver artifactResolver,
+ ArtifactRepositoryLayout repositoryLayout,
+ ArtifactRepositoryFactory artifactRepositoryFactory,
+ ArtifactMetadataSource metadataSource, MavenProjectBuilder projectBuilder )
+ {
+ this.artifactFactory = artifactFactory;
+ this.artifactResolver = artifactResolver;
+ this.repositoryLayout = repositoryLayout;
+ this.artifactRepositoryFactory = artifactRepositoryFactory;
+ this.metadataSource = metadataSource;
+ this.projectBuilder = projectBuilder;
+ }
+
public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository,
RepositoryBuilderConfigSource configSource )
throws RepositoryAssemblyException
diff --git a/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java b/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java
new file mode 100644
index 0000000..4c2c93f
--- /dev/null
+++ b/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java
@@ -0,0 +1,127 @@
+package org.apache.maven.shared.repository;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.shared.repository.model.DefaultRepositoryInfo;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+public class DefaultRepositoryBuilderTest
+ extends PlexusTestCase
+{
+
+ private MavenProjectBuilder projectBuilder;
+
+ private ArtifactRepositoryLayout defaultLayout;
+
+ private ArtifactRepositoryFactory repoFactory;
+
+ private ArtifactFactory artifactFactory;
+
+ private ArtifactRepository localRepository;
+
+ private ArtifactResolver artifactResolver;
+
+ private ArtifactMetadataSource metadataSource;
+
+ private DefaultProfileManager profileManager;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() );
+
+ File localRepo = new File( getBasedir(), "target/local-repository" );
+
+ defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.class.getName(), "default" );
+ repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class.getName() );
+ artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class.getName() );
+ artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.class.getName() );
+ metadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.class.getName() );
+
+ localRepository = repoFactory.createArtifactRepository( "local", localRepo.getAbsolutePath(), defaultLayout,
+ null, null );
+
+ }
+
+ private MavenProject getProject( String projectResource )
+ throws ProjectBuildingException, IOException
+ {
+ ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+ URL res = cloader.getResource( projectResource );
+
+ File projectFile = new File( res.getPath() );
+
+ return projectBuilder.build( projectFile, localRepository, getProfileManager() );
+ }
+
+ private ProfileManager getProfileManager() throws IOException
+ {
+ if ( profileManager == null )
+ {
+ ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+ URL res = cloader.getResource( "marker.txt" );
+
+ File markerFile = new File( res.getPath() );
+ markerFile = markerFile.getCanonicalFile();
+
+ File repoDir = new File( markerFile.getParentFile(), "remote-repository" );
+
+ Profile profile = new Profile();
+ Repository repo = new Repository();
+ repo.setId( "test.repo" );
+ repo.setUrl( repoDir.toURL().toExternalForm() );
+
+ repo.setReleases( new RepositoryPolicy() );
+ repo.setSnapshots( new RepositoryPolicy() );
+
+ profileManager = new DefaultProfileManager( getContainer() );
+ profileManager.addProfile( profile );
+ profileManager.explicitlyActivate( "test.repo" );
+ }
+
+ return profileManager;
+ }
+
+ public void test_MASSEMBLY_210_projectParentIsIncludedInRepository()
+ throws ProjectBuildingException, RepositoryAssemblyException, IOException
+ {
+ MavenProject project = getProject( "projects/massembly-210-direct-parent/pom.xml" );
+
+ TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource();
+ cs.setProject( project );
+ cs.setLocalRepository( localRepository );
+
+ DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver,
+ defaultLayout, repoFactory,
+ metadataSource, projectBuilder );
+
+ File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent" );
+
+ DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo();
+
+ assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs );
+
+ File parentFile = new File( repositoryDirectory, "massembly/210/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom" );
+
+ assertTrue( parentFile.exists() );
+ }
+
+}
diff --git a/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java b/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java
new file mode 100644
index 0000000..5e77b23
--- /dev/null
+++ b/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java
@@ -0,0 +1,34 @@
+package org.apache.maven.shared.repository;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.MavenProject;
+
+public class TestRepositoryBuilderConfigSource
+ implements RepositoryBuilderConfigSource
+{
+
+ private ArtifactRepository localRepository;
+
+ private MavenProject project;
+
+ public void setLocalRepository( ArtifactRepository localRepository )
+ {
+ this.localRepository = localRepository;
+ }
+
+ public void setProject( MavenProject project )
+ {
+ this.project = project;
+ }
+
+ public ArtifactRepository getLocalRepository()
+ {
+ return localRepository;
+ }
+
+ public MavenProject getProject()
+ {
+ return project;
+ }
+
+}
diff --git a/src/test/resources/marker.txt b/src/test/resources/marker.txt
new file mode 100644
index 0000000..f529739
--- /dev/null
+++ b/src/test/resources/marker.txt
@@ -0,0 +1 @@
+marker file for classpath basedir location...
\ No newline at end of file
diff --git a/src/test/resources/projects/massembly-210-direct-parent/pom.xml b/src/test/resources/projects/massembly-210-direct-parent/pom.xml
new file mode 100644
index 0000000..85b4f66
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/pom.xml
@@ -0,0 +1,24 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>massembly.210</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>massembly.210.test</groupId>
+ <artifactId>massembly-210-direct-parent</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>massembly-210-direct-parent</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml b/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml
new file mode 100644
index 0000000..da508cc
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml
@@ -0,0 +1,15 @@
+<assembly>
+ <id>repo</id>
+ <formats>
+ <format>dir</format>
+ </formats>
+
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <repositories>
+ <repository>
+ <includeMetadata>true</includeMetadata>
+ <outputDirectory>/</outputDirectory>
+ </repository>
+ </repositories>
+</assembly>
\ No newline at end of file
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java b/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java
new file mode 100644
index 0000000..3e62020
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java
@@ -0,0 +1,13 @@
+package massembly210;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java b/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java
new file mode 100644
index 0000000..3313742
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java
@@ -0,0 +1,38 @@
+package massembly210;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}