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/27 15:24:09 UTC

svn commit: r397538 - in /maven/plugins/trunk/maven-release-plugin/src: main/java/org/apache/maven/plugins/release/phase/ test/java/org/apache/maven/plugins/release/phase/ test/resources/projects/rewrite-for-release/pom-with-parent/ test/resources/proj...

Author: brett
Date: Thu Apr 27 06:23:43 2006
New Revision: 397538

URL: http://svn.apache.org/viewcvs?rev=397538&view=rev
Log:
[MRELEASE-98] map parent version

Added:
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java   (with props)
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml   (with props)
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml   (with props)
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml   (with props)
    maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml   (with props)
Modified:
    maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java
    maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhaseTest.java

Modified: maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java?rev=397538&r1=397537&r2=397538&view=diff
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhase.java Thu Apr 27 06:23:43 2006
@@ -90,12 +90,12 @@
                 // rewrite DOM as a string to find differences, since text outside the root element is not tracked
                 StringWriter w = new StringWriter();
                 Format format = Format.getRawFormat();
-	        format.setLineSeparator( System.getProperty( "line.separator" ) );
+                format.setLineSeparator( System.getProperty( "line.separator" ) );
                 XMLOutputter out = new XMLOutputter( format );
-	        out.output( document.getRootElement(), w );
+                out.output( document.getRootElement(), w );
 
                 int index = content.indexOf( w.toString() );
-                if ( index > 0 )
+                if ( index >= 0 )
                 {
                     intro = content.substring( 0, index );
                     outtro = content.substring( index + w.toString().length() );
@@ -110,7 +110,7 @@
                 throw new ReleaseExecutionException( "Error reading POM: " + e.getMessage(), e );
             }
 
-            transformPomToReleaseVersionPom( projectId, document.getRootElement(),
+            transformPomToReleaseVersionPom( project, document.getRootElement(),
                                              releaseConfiguration.getReleaseVersions() );
 
             writePom( project.getFile(), releaseConfiguration, document, intro, outtro, project.getModelVersion() );
@@ -125,19 +125,33 @@
 
     }
 
-    private void transformPomToReleaseVersionPom( String projectId, Element rootElement, Map mappedVersions )
+    private void transformPomToReleaseVersionPom( MavenProject project, Element rootElement, Map mappedVersions )
         throws ReleaseExecutionException
     {
         // TODO: what about if version is inherited? shouldn't prompt...
         Element versionElement = rootElement.getChild( "version", rootElement.getNamespace() );
-        String version = (String) mappedVersions.get( projectId );
+        String version = (String) mappedVersions.get(
+            ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) );
         if ( version == null )
         {
-            throw new ReleaseExecutionException( "Version for '" + projectId + "' was not mapped" );
+            throw new ReleaseExecutionException( "Version for '" + project.getName() + "' was not mapped" );
         }
         versionElement.setText( version );
 
-        // TODO: rewrite parent
+        if ( project.hasParent() )
+        {
+            Element parentElement = rootElement.getChild( "parent", rootElement.getNamespace() );
+            versionElement = parentElement.getChild( "version", rootElement.getNamespace() );
+            MavenProject parent = project.getParent();
+            version = (String) mappedVersions.get(
+                ArtifactUtils.versionlessKey( parent.getGroupId(), parent.getArtifactId() ) );
+            if ( version == null )
+            {
+                throw new ReleaseExecutionException( "Version for parent '" + parent.getName() + "' was not mapped" );
+            }
+            versionElement.setText( version );
+        }
+
         // TODO: rewrite SCM
         // TODO: rewrite dependencies
         // TODO: rewrite dependency management
@@ -377,9 +391,9 @@
             }
 
             Format format = Format.getRawFormat();
-	    format.setLineSeparator( System.getProperty( "line.separator" ) );
+            format.setLineSeparator( System.getProperty( "line.separator" ) );
             XMLOutputter out = new XMLOutputter( format );
-	    out.output( document.getRootElement(), writer );
+            out.output( document.getRootElement(), writer );
 
             if ( outtro != null )
             {

Added: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java?rev=397538&view=auto
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java (added)
+++ maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java Thu Apr 27 06:23:43 2006
@@ -0,0 +1,180 @@
+package org.apache.maven.plugins.release.phase;
+
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+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.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.plugins.release.config.ReleaseConfiguration;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectSorter;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+/**
+ * Base class for some release tests.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class AbstractReleaseTestCase
+    extends PlexusTestCase
+{
+    protected MavenProjectBuilder projectBuilder;
+
+    protected ArtifactRepository localRepository;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
+
+        ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+        String localRepoPath = getTestFile( "target/local-repository" ).getAbsolutePath().replace( '\\', '/' );
+        localRepository = new DefaultArtifactRepository( "local", "file://" + localRepoPath, layout );
+    }
+
+    private Map createManagedVersionMap( String projectId, DependencyManagement dependencyManagement,
+                                         ArtifactFactory artifactFactory )
+        throws ProjectBuildingException
+    {
+        Map map;
+        if ( dependencyManagement != null && dependencyManagement.getDependencies() != null )
+        {
+            map = new HashMap();
+            for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); )
+            {
+                Dependency d = (Dependency) i.next();
+
+                try
+                {
+                    VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
+                    Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
+                                                                                  versionRange, d.getType(),
+                                                                                  d.getClassifier(), d.getScope() );
+                    map.put( d.getManagementKey(), artifact );
+                }
+                catch ( InvalidVersionSpecificationException e )
+                {
+                    throw new ProjectBuildingException( projectId, "Unable to parse version '" + d.getVersion() +
+                        "' for dependency '" + d.getManagementKey() + "': " + e.getMessage(), e );
+                }
+            }
+        }
+        else
+        {
+            map = Collections.EMPTY_MAP;
+        }
+        return map;
+    }
+
+    protected ReleaseConfiguration createConfigurationFromProjects( String path, String subpath )
+        throws Exception
+    {
+        File testFile = getTestFile( "target/test-classes/projects/" + path + subpath + "/pom.xml" );
+        Stack projectFiles = new Stack();
+        projectFiles.push( testFile );
+
+        List projects = new ArrayList();
+        while ( !projectFiles.isEmpty() )
+        {
+            File file = (File) projectFiles.pop();
+
+            // Recopy the test resources since they are modified in some tests
+            String filePath = file.getPath();
+            int index = filePath.indexOf( "projects" );
+            filePath = filePath.substring( index );
+
+            FileUtils.copyFile( getTestFile( "src/test/resources/" + filePath ),
+                                getTestFile( "target/test-classes/" + filePath ) );
+
+            MavenProject project = projectBuilder.build( file, localRepository, null );
+
+            for ( Iterator i = project.getModules().iterator(); i.hasNext(); )
+            {
+                String module = (String) i.next();
+
+                projectFiles.push( new File( file.getParentFile(), module + "/pom.xml" ) );
+            }
+
+            projects.add( project );
+        }
+
+        List repos = Collections.singletonList( new DefaultArtifactRepository( "central", getTestFile(
+            "src/test/remote-repository" ).toURL().toExternalForm(), new DefaultRepositoryLayout() ) );
+
+        ProjectSorter sorter = new ProjectSorter( projects );
+
+        projects = sorter.getSortedProjects();
+
+        ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+        ArtifactCollector artifactCollector = (ArtifactCollector) lookup( ArtifactCollector.class.getName() );
+        ArtifactMetadataSource artifactMetadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.ROLE );
+
+        // pass back over and resolve dependencies - can't be done earlier as the order may not be correct
+        for ( Iterator i = projects.iterator(); i.hasNext(); )
+        {
+            MavenProject project = (MavenProject) i.next();
+
+            project.setRemoteArtifactRepositories( repos );
+            project.setPluginArtifactRepositories( repos );
+
+            Artifact projectArtifact = project.getArtifact();
+
+            Map managedVersions = createManagedVersionMap(
+                ArtifactUtils.versionlessKey( projectArtifact.getGroupId(), projectArtifact.getArtifactId() ),
+                project.getDependencyManagement(), artifactFactory );
+
+            project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
+
+            ArtifactResolutionResult result = artifactCollector.collect( project.getDependencyArtifacts(),
+                                                                         projectArtifact, managedVersions,
+                                                                         localRepository, repos, artifactMetadataSource,
+                                                                         null, Collections.EMPTY_LIST );
+
+            project.setArtifacts( result.getArtifacts() );
+        }
+
+        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        releaseConfiguration.setReactorProjects( projects );
+
+        return releaseConfiguration;
+    }
+}

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/AbstractReleaseTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java?rev=397538&r1=397537&r2=397538&view=diff
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/CheckDependencySnapshotsPhaseTest.java Thu Apr 27 06:23:43 2006
@@ -16,36 +16,8 @@
  * limitations under the License.
  */
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.ArtifactUtils;
-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.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.config.ReleaseConfiguration;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.project.ProjectSorter;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
 
 /**
  * Test the dependency snapshot check phase.
@@ -53,26 +25,16 @@
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
 public class CheckDependencySnapshotsPhaseTest
-    extends PlexusTestCase
+    extends AbstractReleaseTestCase
 {
     private ReleasePhase phase;
 
-    private MavenProjectBuilder projectBuilder;
-
-    private ArtifactRepository localRepository;
-
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
         phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "check-dependency-snapshots" );
-
-        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
-
-        ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-        String localRepoPath = getTestFile( "target/local-repository" ).getAbsolutePath().replace( '\\', '/' );
-        localRepository = new DefaultArtifactRepository( "local", "file://" + localRepoPath, layout );
     }
 
     public void testNoSnapshotDependencies()
@@ -563,102 +525,10 @@
         assertTrue( true );
     }
 
-    private Map createManagedVersionMap( String projectId, DependencyManagement dependencyManagement,
-                                         ArtifactFactory artifactFactory )
-        throws ProjectBuildingException
-    {
-        Map map;
-        if ( dependencyManagement != null && dependencyManagement.getDependencies() != null )
-        {
-            map = new HashMap();
-            for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); )
-            {
-                Dependency d = (Dependency) i.next();
-
-                try
-                {
-                    VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() );
-                    Artifact artifact = artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
-                                                                                  versionRange, d.getType(),
-                                                                                  d.getClassifier(), d.getScope() );
-                    map.put( d.getManagementKey(), artifact );
-                }
-                catch ( InvalidVersionSpecificationException e )
-                {
-                    throw new ProjectBuildingException( projectId, "Unable to parse version '" + d.getVersion() +
-                        "' for dependency '" + d.getManagementKey() + "': " + e.getMessage(), e );
-                }
-            }
-        }
-        else
-        {
-            map = Collections.EMPTY_MAP;
-        }
-        return map;
-    }
-
     private ReleaseConfiguration createConfigurationFromProjects( String path )
         throws Exception
     {
-        Stack projectFiles = new Stack();
-        projectFiles.push( getTestFile( "target/test-classes/projects/check-dependencies/" + path + "/pom.xml" ) );
-
-        List projects = new ArrayList();
-        while ( !projectFiles.isEmpty() )
-        {
-            File file = (File) projectFiles.pop();
-
-            MavenProject project = projectBuilder.build( file, localRepository, null );
-
-            for ( Iterator i = project.getModules().iterator(); i.hasNext(); )
-            {
-                String module = (String) i.next();
-
-                projectFiles.push( new File( file.getParentFile(), module + "/pom.xml" ) );
-            }
-
-            projects.add( project );
-        }
-
-        List repos = Collections.singletonList( new DefaultArtifactRepository( "central", getTestFile(
-            "src/test/remote-repository" ).toURL().toExternalForm(), new DefaultRepositoryLayout() ) );
-
-        ProjectSorter sorter = new ProjectSorter( projects );
-
-        projects = sorter.getSortedProjects();
-
-        ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-        ArtifactCollector artifactCollector = (ArtifactCollector) lookup( ArtifactCollector.class.getName() );
-        ArtifactMetadataSource artifactMetadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.ROLE );
-
-        // pass back over and resolve dependencies - can't be done earlier as the order may not be correct
-        for ( Iterator i = projects.iterator(); i.hasNext(); )
-        {
-            MavenProject project = (MavenProject) i.next();
-
-            project.setRemoteArtifactRepositories( repos );
-            project.setPluginArtifactRepositories( repos );
-
-            Artifact projectArtifact = project.getArtifact();
-
-            Map managedVersions = createManagedVersionMap(
-                ArtifactUtils.versionlessKey( projectArtifact.getGroupId(), projectArtifact.getArtifactId() ),
-                project.getDependencyManagement(), artifactFactory );
-
-            project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
-
-            ArtifactResolutionResult result = artifactCollector.collect( project.getDependencyArtifacts(),
-                                                                         projectArtifact, managedVersions,
-                                                                         localRepository, repos, artifactMetadataSource,
-                                                                         null, Collections.EMPTY_LIST );
-
-            project.setArtifacts( result.getArtifacts() );
-        }
-
-        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
-        releaseConfiguration.setReactorProjects( projects );
-
-        return releaseConfiguration;
+        return createConfigurationFromProjects( "check-dependencies/", path );
     }
 
 }

Modified: maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhaseTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhaseTest.java?rev=397538&r1=397537&r2=397538&view=diff
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhaseTest.java (original)
+++ maven/plugins/trunk/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/phase/RewritePomsForReleasePhaseTest.java Thu Apr 27 06:23:43 2006
@@ -4,9 +4,6 @@
  * Copyright 2005-2006 The Apache Software Foundation.  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at       http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  */
 
-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.plugins.release.ReleaseExecutionException;
 import org.apache.maven.plugins.release.config.ReleaseConfiguration;
 import org.apache.maven.plugins.release.scm.DefaultScmRepositoryConfigurator;
@@ -14,8 +11,6 @@
 import org.apache.maven.plugins.release.scm.ReleaseScmRepositoryException;
 import org.apache.maven.plugins.release.scm.ScmRepositoryConfigurator;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.command.edit.EditScmResult;
 import org.apache.maven.scm.manager.NoSuchScmProviderException;
@@ -24,7 +19,6 @@
 import org.apache.maven.scm.provider.ScmProvider;
 import org.apache.maven.scm.provider.ScmProviderStub;
 import org.apache.maven.scm.repository.ScmRepositoryException;
-import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
 import org.jmock.cglib.Mock;
 import org.jmock.core.constraint.IsEqual;
@@ -33,7 +27,7 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -42,70 +36,60 @@
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
 public class RewritePomsForReleasePhaseTest
-    extends PlexusTestCase
+    extends AbstractReleaseTestCase
 {
     private ReleasePhase phase;
 
-    private MavenProjectBuilder projectBuilder;
-
-    private ArtifactRepository localRepository;
-
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
         phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "rewrite-poms-for-release" );
+    }
+
+    public void testRewriteBasicPom()
+        throws Exception
+    {
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
-        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
+        phase.execute( config );
 
-        ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-        String localRepoPath = getTestFile( "target/local-repository" ).getAbsolutePath().replace( '\\', '/' );
-        localRepository = new DefaultArtifactRepository( "local", "file://" + localRepoPath, layout );
+        assertTrue( compareFiles( config.getReactorProjects() ) );
     }
 
-    public void testRewriteBasicPom()
-        throws ReleaseExecutionException, ProjectBuildingException, IOException
+    public void testRewritePomWithParent()
+        throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
+        ReleaseConfiguration config = createConfigurationFromProjects( "pom-with-parent" );
 
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
+        config.mapReleaseVersion( "groupId:subproject1", "2.0" );
 
         phase.execute( config );
 
-        String expected = readTestProjectFile( "basic-pom/expected-pom.xml" );
-        String actual = readTestProjectFile( "basic-pom/pom.xml" );
-        assertEquals( "Check the transformed POM", expected, actual );
+        assertTrue( compareFiles( config.getReactorProjects() ) );
     }
 
     public void testRewriteBasicPomWithEditMode()
         throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
         config.setUseEditMode( true );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
         phase.execute( config );
 
-        String expected = readTestProjectFile( "basic-pom/expected-pom.xml" );
-        String actual = readTestProjectFile( "basic-pom/pom.xml" );
-        assertEquals( "Check the transformed POM", expected, actual );
+        assertTrue( compareFiles( config.getReactorProjects() ) );
     }
 
     public void testRewriteBasicPomWithEditModeFailure()
         throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
         config.setUseEditMode( true );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
         ScmManager scmManager = (ScmManager) lookup( ScmManager.ROLE );
         ScmProviderStub providerStub = (ScmProviderStub) scmManager.getProviderByUrl( config.getUrl() );
@@ -127,12 +111,9 @@
     public void testRewriteBasicPomWithEditModeException()
         throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
         config.setUseEditMode( true );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
         Mock scmProviderMock = new Mock( ScmProvider.class );
         scmProviderMock.expects( new InvokeAtLeastOnceMatcher() ).method( "edit" ).will(
@@ -154,12 +135,10 @@
     }
 
     public void testRewriteAddSchema()
-        throws ReleaseExecutionException, ProjectBuildingException, IOException
+        throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
         config.setAddSchema( true );
 
         // Run a second time to check they are not duplicated
@@ -174,12 +153,9 @@
     }
 
     public void testRewriteUnmappedPom()
-        throws ReleaseExecutionException, ProjectBuildingException, IOException
+        throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
 
         try
         {
@@ -196,12 +172,9 @@
     public void testRewriteBasicPomWithScmRepoException()
         throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
         config.setUseEditMode( true );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
         Mock scmManagerMock = new Mock( ScmManager.class );
         scmManagerMock.expects( new InvokeAtLeastOnceMatcher() ).method( "makeScmRepository" ).with(
@@ -227,12 +200,9 @@
     public void testRewriteBasicPomWithNoSuchProviderException()
         throws Exception
     {
-        File testFile = getCopiedTestFile( "basic-pom/pom.xml" );
-        MavenProject project = projectBuilder.build( testFile, localRepository, null );
-
-        ReleaseConfiguration config = createReleaseConfiguration( Collections.singletonList( project ) );
+        ReleaseConfiguration config = createConfigurationFromProjects( "basic-pom" );
         config.setUseEditMode( true );
-        config.mapReleaseVersion( project.getGroupId() + ":" + project.getArtifactId(), "1.0" );
+        config.mapReleaseVersion( "groupId:artifactId", "1.0" );
 
         Mock scmManagerMock = new Mock( ScmManager.class );
         scmManagerMock.expects( new InvokeAtLeastOnceMatcher() ).method( "makeScmRepository" ).with(
@@ -255,26 +225,33 @@
         }
     }
 
-    private static File getCopiedTestFile( String fileName )
-        throws IOException
-    {
-        File testFile = getTestFile( "target/test-classes/projects/rewrite-for-release/" + fileName );
-        FileUtils.copyFile( getTestFile( "src/test/resources/projects/rewrite-for-release/" + fileName ), testFile );
-        return testFile;
-    }
-
     private static String readTestProjectFile( String fileName )
         throws IOException
     {
         return FileUtils.fileRead( getTestFile( "target/test-classes/projects/rewrite-for-release/" + fileName ) );
     }
 
-    private static ReleaseConfiguration createReleaseConfiguration( List reactorProjects )
+    private ReleaseConfiguration createConfigurationFromProjects( String path )
+        throws Exception
     {
-        ReleaseConfiguration releaseConfiguration = new ReleaseConfiguration();
+        ReleaseConfiguration releaseConfiguration = createConfigurationFromProjects( "rewrite-for-release/", path );
         releaseConfiguration.setUrl( "scm:svn:file://localhost/tmp/scm-repo" );
         releaseConfiguration.setWorkingDirectory( getTestFile( "target/test/checkout" ) );
-        releaseConfiguration.setReactorProjects( reactorProjects );
+
         return releaseConfiguration;
+    }
+
+    private boolean compareFiles( List reactorProjects )
+        throws IOException
+    {
+        for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
+        {
+            MavenProject project = (MavenProject) i.next();
+
+            String actual = FileUtils.fileRead( project.getFile() );
+            String expected = FileUtils.fileRead( new File( project.getFile().getParentFile(), "expected-pom.xml" ) );
+            assertEquals( "Check the transformed POM", expected, actual );
+        }
+        return true;
     }
 }

Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml?rev=397538&view=auto
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml (added)
+++ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml Thu Apr 27 06:23:43 2006
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>1.0</version>
+  <packaging>pom</packaging>
+
+  <modules>
+    <module>subproject1</module>
+  </modules>
+</project>

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/expected-pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml?rev=397538&view=auto
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml (added)
+++ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml Thu Apr 27 06:23:43 2006
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <modules>
+    <module>subproject1</module>
+  </modules>
+</project>

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml?rev=397538&view=auto
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml (added)
+++ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml Thu Apr 27 06:23:43 2006
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>1.0</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+  <version>2.0</version>
+</project>

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/expected-pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml?rev=397538&view=auto
==============================================================================
--- maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml (added)
+++ maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml Thu Apr 27 06:23:43 2006
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+  <version>2.0-SNAPSHOT</version>
+</project>

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-release-plugin/src/test/resources/projects/rewrite-for-release/pom-with-parent/subproject1/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision