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