You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/03/09 22:49:55 UTC

svn commit: r516572 - in /maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src: main/java/org/apache/maven/lifecycle/LifecycleUtils.java test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java

Author: jdcasey
Date: Fri Mar  9 13:49:54 2007
New Revision: 516572

URL: http://svn.apache.org/viewvc?view=rev&rev=516572
Log:
Finished unit testing LifecycleUtils for now.

Modified:
    maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java
    maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java

Modified: maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java
URL: http://svn.apache.org/viewvc/maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java?view=diff&rev=516572&r1=516571&r2=516572
==============================================================================
--- maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java (original)
+++ maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/main/java/org/apache/maven/lifecycle/LifecycleUtils.java Fri Mar  9 13:49:54 2007
@@ -184,10 +184,10 @@
         LifecycleBindings result = new LifecycleBindings();
         result.setPackaging( newBindings.getPackaging() );
 
-        CleanBinding cb = existingBindings.getCleanBinding();
-        if ( defaultBindings != null && cb == null )
+        CleanBinding cb = (CleanBinding) cloneBinding( existingBindings.getCleanBinding() );
+        if ( defaultBindings != null && isNullOrEmpty( cb ) )
         {
-            cb = defaultBindings.getCleanBinding();
+            cb = (CleanBinding) cloneBinding( defaultBindings.getCleanBinding() );
         }
 
         if ( cb == null )
@@ -197,10 +197,10 @@
 
         result.setCleanBinding( cb );
 
-        BuildBinding bb = existingBindings.getBuildBinding();
-        if ( defaultBindings != null && bb == null )
+        BuildBinding bb = (BuildBinding) cloneBinding( existingBindings.getBuildBinding() );
+        if ( defaultBindings != null && isNullOrEmpty( bb ) )
         {
-            bb = defaultBindings.getBuildBinding();
+            bb = (BuildBinding) cloneBinding( defaultBindings.getBuildBinding() );
         }
 
         if ( bb == null )
@@ -210,10 +210,10 @@
 
         result.setBuildBinding( bb );
 
-        SiteBinding sb = existingBindings.getSiteBinding();
-        if ( defaultBindings != null && sb == null )
+        SiteBinding sb = (SiteBinding) cloneBinding( existingBindings.getSiteBinding() );
+        if ( defaultBindings != null && isNullOrEmpty( sb ) )
         {
-            sb = defaultBindings.getSiteBinding();
+            sb = (SiteBinding) cloneBinding( defaultBindings.getSiteBinding() );
         }
 
         if ( sb == null )
@@ -243,20 +243,40 @@
                         {
                             MojoBinding mojoBinding = (MojoBinding) phaseIt.next();
 
+                            mojoBinding = cloneMojoBinding( mojoBinding );
+
                             if ( mergeConfigIfExecutionIdMatches )
                             {
                                 MojoBinding matchingBinding = findMatchingMojoBinding( mojoBinding, existingBindings, true );
 
                                 if ( matchingBinding != null )
                                 {
-                                    mojoBinding = cloneMojoBinding( (MojoBinding) phaseIt.next() );
-
                                     Xpp3Dom existingConfig = new Xpp3Dom( (Xpp3Dom) matchingBinding.getConfiguration() );
-
-                                    Xpp3Dom configuration = Xpp3Dom.mergeXpp3Dom( existingConfig,
-                                                                                  (Xpp3Dom) mojoBinding.getConfiguration() );
+                                    Xpp3Dom configuration = Xpp3Dom.mergeXpp3Dom( (Xpp3Dom) mojoBinding.getConfiguration(), existingConfig );
 
                                     mojoBinding.setConfiguration( configuration );
+                                    
+                                    if ( mojoBinding.getOrigin() == null && matchingBinding.getOrigin() != null )
+                                    {
+                                        mojoBinding.setOrigin( matchingBinding.getOrigin() );
+                                    }
+                                    
+                                    LifecycleBinding resultBinding = findLifecycleBindingForPhase( name, result );
+                                    
+                                    try
+                                    {
+                                        removeMojoBinding( name, matchingBinding, resultBinding, true );
+                                    }
+                                    catch ( NoSuchPhaseException e )
+                                    {
+                                        IllegalStateException error = new IllegalStateException(
+                                                                                                 e.getMessage()
+                                                                                                     + "\nSomething strange is going on. Merging should not encounter such inconsistencies." );
+
+                                        error.initCause( e );
+
+                                        throw error;
+                                    }
                                 }
                             }
 
@@ -285,6 +305,26 @@
         return result;
     }
 
+    private static boolean isNullOrEmpty( LifecycleBinding binding )
+    {
+        if ( binding == null )
+        {
+            return true;
+        }
+        
+        for ( Iterator it = binding.getPhasesInOrder().iterator(); it.hasNext(); )
+        {
+            Phase phase = (Phase) it.next();
+            
+            if ( !phase.getBindings().isEmpty() )
+            {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+
     public static MojoBinding findMatchingMojoBinding( MojoBinding mojoBinding, LifecycleBindings inBindings,
                                                        boolean considerExecutionId )
     {
@@ -360,7 +400,7 @@
         {
             Phase phase = (Phase) phases.get( i );
             List phaseBindings = phase.getBindings();
-            
+
             for ( Iterator mojoIt = phaseBindings.iterator(); mojoIt.hasNext(); )
             {
                 MojoBinding binding = (MojoBinding) mojoIt.next();
@@ -370,7 +410,7 @@
                     mojoIt.remove();
                 }
             }
-            
+
             phase.setBindings( phaseBindings );
         }
     }
@@ -419,6 +459,11 @@
 
     public static LifecycleBinding cloneBinding( LifecycleBinding binding )
     {
+        if ( binding == null )
+        {
+            return null;
+        }
+
         LifecycleBinding result;
         if ( binding instanceof CleanBinding )
         {
@@ -509,7 +554,7 @@
                 {
                     List revised = new ArrayList( mojoBindings );
                     revised.removeAll( lastMojoBindings );
-                    
+
                     if ( revised.isEmpty() )
                     {
                         continue;
@@ -539,28 +584,28 @@
         {
             return false;
         }
-        
+
         if ( superCandidate.size() < check.size() )
         {
             return false;
         }
-        
+
         List superKeys = new ArrayList( superCandidate.size() );
         for ( Iterator it = superCandidate.iterator(); it.hasNext(); )
         {
             MojoBinding binding = (MojoBinding) it.next();
-            
+
             superKeys.add( createMojoBindingKey( binding, true ) );
         }
-        
+
         List checkKeys = new ArrayList( check.size() );
         for ( Iterator it = check.iterator(); it.hasNext(); )
         {
             MojoBinding binding = (MojoBinding) it.next();
-            
+
             checkKeys.add( createMojoBindingKey( binding, true ) );
         }
-        
+
         return superKeys.subList( 0, checkKeys.size() ).equals( checkKeys );
     }
 

Modified: maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java?view=diff&rev=516572&r1=516571&r2=516572
==============================================================================
--- maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java (original)
+++ maven/components/branches/2.1-lifecycle-refactor/maven-lifecycle/src/test/java/org/apache/maven/lifecycle/LifecycleUtilsTest.java Fri Mar  9 13:49:54 2007
@@ -1,5 +1,7 @@
 package org.apache.maven.lifecycle;
 
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -263,6 +265,187 @@
 
         Phase result = cleanBinding.getClean();
         assertEquals( 0, result.getBindings().size() );
+    }
+
+    public void testMergeBindings_SingleMojoCloneFromEachIsPresentInResult_EmptyDefaults()
+    {
+        LifecycleBindings bOrig = new LifecycleBindings();
+        CleanBinding cbOrig = bOrig.getCleanBinding();
+        MojoBinding binding = newMojoBinding( "group", "artifact", "goal" );
+        cbOrig.getClean().addBinding( binding );
+
+        LifecycleBindings bOrig2 = new LifecycleBindings();
+        CleanBinding cbOrig2 = bOrig2.getCleanBinding();
+        MojoBinding binding2 = newMojoBinding( "group", "artifact", "goal2" );
+        cbOrig2.getClean().addBinding( binding2 );
+
+        LifecycleBindings result = LifecycleUtils.mergeBindings( bOrig, bOrig2, new LifecycleBindings(), false );
+
+        assertNotNull( result );
+        
+        CleanBinding cbResult = result.getCleanBinding();
+        assertNotSame( cbOrig, cbResult );
+
+        List mojos = cbResult.getClean().getBindings();
+        assertNotNull( mojos );
+        assertEquals( 2, mojos.size() );
+
+        MojoBinding bResult = (MojoBinding) mojos.get( 0 );
+        
+        assertNotSame( binding, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal", bResult.getGoal() );
+        
+        bResult = (MojoBinding) mojos.get( 1 );
+        
+        assertNotSame( binding2, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal2", bResult.getGoal() );
+    }
+
+    public void testMergeBindings_SingleMojoCloneIsPresentFromExistingAndNotFromDefaultsInResult()
+    {
+        LifecycleBindings bOrig = new LifecycleBindings();
+        CleanBinding cbOrig = bOrig.getCleanBinding();
+        MojoBinding binding = newMojoBinding( "group", "artifact", "goal" );
+        cbOrig.getClean().addBinding( binding );
+
+        LifecycleBindings bOrig2 = new LifecycleBindings();
+        CleanBinding cbOrig2 = bOrig2.getCleanBinding();
+        MojoBinding binding2 = newMojoBinding( "group", "artifact", "goal2" );
+        cbOrig2.getClean().addBinding( binding2 );
+
+        LifecycleBindings result = LifecycleUtils.mergeBindings( bOrig, new LifecycleBindings(), bOrig2, false );
+
+        assertNotNull( result );
+        
+        CleanBinding cbResult = result.getCleanBinding();
+        assertNotSame( cbOrig, cbResult );
+
+        List mojos = cbResult.getClean().getBindings();
+        assertNotNull( mojos );
+        assertEquals( 1, mojos.size() );
+
+        MojoBinding bResult = (MojoBinding) mojos.get( 0 );
+        
+        assertNotSame( binding, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal", bResult.getGoal() );
+    }
+
+    public void testMergeBindings_MojoCloneIsPresentFromDefaultsInResult()
+    {
+        LifecycleBindings bOrig = new LifecycleBindings();
+        CleanBinding cbOrig = bOrig.getCleanBinding();
+        MojoBinding binding = newMojoBinding( "group", "artifact", "goal" );
+        cbOrig.getClean().addBinding( binding );
+
+        LifecycleBindings bOrig2 = new LifecycleBindings();
+        BuildBinding bbOrig = bOrig2.getBuildBinding();
+        MojoBinding binding2 = newMojoBinding( "group", "artifact", "goal2" );
+        bbOrig.getCompile().addBinding( binding2 );
+
+        LifecycleBindings result = LifecycleUtils.mergeBindings( bOrig, new LifecycleBindings(), bOrig2, false );
+
+        assertNotNull( result );
+        
+        CleanBinding cbResult = result.getCleanBinding();
+        assertNotSame( cbOrig, cbResult );
+
+        List mojos = cbResult.getClean().getBindings();
+        assertNotNull( mojos );
+        assertEquals( 1, mojos.size() );
+
+        MojoBinding bResult = (MojoBinding) mojos.get( 0 );
+        
+        assertNotSame( binding, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal", bResult.getGoal() );
+        
+        BuildBinding bbResult = result.getBuildBinding();
+        assertNotSame( bbOrig, bbResult );
+
+        mojos = bbResult.getCompile().getBindings();
+        assertNotNull( mojos );
+        assertEquals( 1, mojos.size() );
+
+        bResult = (MojoBinding) mojos.get( 0 );
+        
+        assertNotSame( binding, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal2", bResult.getGoal() );
+    }
+
+    public void testMergeBindings_MergeConfigsWithNewAsDominant_EmptyDefaults()
+    {
+        LifecycleBindings bOrig = new LifecycleBindings();
+        CleanBinding cbOrig = bOrig.getCleanBinding();
+        MojoBinding binding = newMojoBinding( "group", "artifact", "goal" );
+        binding.setOrigin( "non-default" );
+        
+        Xpp3Dom config = new Xpp3Dom( "configuration" );
+        Xpp3Dom child = new Xpp3Dom( "child" );
+        child.setValue( "value" );
+        config.addChild( child );
+        
+        binding.setConfiguration( config );
+        
+        cbOrig.getClean().addBinding( binding );
+
+        LifecycleBindings bOrig2 = new LifecycleBindings();
+        CleanBinding cbOrig2 = bOrig2.getCleanBinding();
+        MojoBinding binding2 = newMojoBinding( "group", "artifact", "goal" );
+        
+        Xpp3Dom config2 = new Xpp3Dom( "configuration" );
+        
+        Xpp3Dom child2 = new Xpp3Dom( "child" );
+        child2.setValue( "value2" );
+        
+        Xpp3Dom child3 = new Xpp3Dom( "key" );
+        child3.setValue( "val" );
+        
+        config2.addChild( child2 );
+        config2.addChild( child3 );
+        
+        binding2.setConfiguration( config2 );
+        
+        cbOrig2.getClean().addBinding( binding2 );
+
+        LifecycleBindings result = LifecycleUtils.mergeBindings( bOrig, bOrig2, new LifecycleBindings(), true );
+
+        assertNotNull( result );
+        
+        CleanBinding cbResult = result.getCleanBinding();
+        assertNotSame( cbOrig, cbResult );
+
+        List mojos = cbResult.getClean().getBindings();
+        assertNotNull( mojos );
+        assertEquals( 1, mojos.size() );
+
+        MojoBinding bResult = (MojoBinding) mojos.get( 0 );
+        
+        assertNotSame( binding, bResult );
+
+        assertEquals( "group", bResult.getGroupId() );
+        assertEquals( "artifact", bResult.getArtifactId() );
+        assertEquals( "goal", bResult.getGoal() );
+        assertEquals( "non-default", bResult.getOrigin() );
+        
+        Xpp3Dom cResult = (Xpp3Dom) bResult.getConfiguration();
+        
+        assertNotNull( cResult );
+        assertEquals( "value2", cResult.getChild( "child" ).getValue() );
+        assertEquals( "val", cResult.getChild( "key" ).getValue() );
     }
 
     public void testCloneBinding_SingleMojoCloneIsPresentInNewInstance()