Author: jdcasey
Date: Thu Sep  1 16:15:11 2011
New Revision: 1164130

URL: http://svn.apache.org/viewvc?rev=1164130&view=rev
Log:
[MSHARED-205] Add tests and implementation supporting wildcard in the middle of 
an artifact coordinate segment (org.apache.maven.plugins:maven-*-plugin)"

Modified:
    
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
    
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternArtifactFilterTCK.java
    
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilterTest.java
    
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilterTest.java

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java?rev=1164130&r1=1164129&r2=1164130&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
 Thu Sep  1 16:15:11 2011
@@ -18,6 +18,12 @@
  */
 package org.apache.maven.shared.artifact.filter;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -26,19 +32,14 @@ import org.apache.maven.artifact.version
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.codehaus.plexus.logging.Logger;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
 /**
  * TODO: include in maven-artifact in future
  * 
  * @author <a href="mailto:br...@apache.org";>Brett Porter</a>
  * @see StrictPatternIncludesArtifactFilter
  */
-public class PatternIncludesArtifactFilter implements ArtifactFilter, 
StatisticsReportingArtifactFilter
+public class PatternIncludesArtifactFilter
+    implements ArtifactFilter, StatisticsReportingArtifactFilter
 {
     private final List positivePatterns;
 
@@ -187,7 +188,7 @@ public class PatternIncludesArtifactFilt
 
             // // case of starting '*' like '*:jar:*'
             if ( !matched && patternTokens.length < tokens.length && 
patternTokens.length > 0
-                            && "*".equals( patternTokens[0] ) )
+                && "*".equals( patternTokens[0] ) )
             {
                 matched = true;
                 for ( int i = 0; matched && i < patternTokens.length; i++ )
@@ -216,10 +217,8 @@ public class PatternIncludesArtifactFilt
     /**
      * Gets whether the specified token matches the specified pattern segment.
      * 
-     * @param token
-     *            the token to check
-     * @param pattern
-     *            the pattern segment to match, as defined above
+     * @param token the token to check
+     * @param pattern the pattern segment to match, as defined above
      * @return <code>true</code> if the specified token is matched by the 
specified pattern segment
      */
     private boolean matches( final String token, final String pattern )
@@ -252,6 +251,27 @@ public class PatternIncludesArtifactFilt
 
             matches = token.startsWith( prefix );
         }
+        // support wildcards in the middle of a pattern segment
+        else if ( pattern.indexOf( '*' ) > -1 )
+        {
+            String[] parts = pattern.split( "\\*" );
+            int lastPartEnd = -1;
+            boolean match = true;
+
+            for ( String part : parts )
+            {
+                int idx = token.indexOf( part );
+                if ( idx <= lastPartEnd )
+                {
+                    match = false;
+                    break;
+                }
+
+                lastPartEnd = idx + part.length();
+            }
+
+            matches = match;
+        }
         // support versions range
         else if ( pattern.startsWith( "[" ) || pattern.startsWith( "(" ) )
         {
@@ -311,6 +331,7 @@ public class PatternIncludesArtifactFilt
         }
     }
 
+    @Override
     public String toString()
     {
         return "Includes filter:" + getPatternsAsString();

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternArtifactFilterTCK.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternArtifactFilterTCK.java?rev=1164130&r1=1164129&r2=1164130&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternArtifactFilterTCK.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternArtifactFilterTCK.java
 Thu Sep  1 16:15:11 2011
@@ -18,11 +18,6 @@
  */
 package org.apache.maven.shared.artifact.filter;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.shared.tools.easymock.MockManager;
-import org.easymock.MockControl;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -30,7 +25,13 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
-public abstract class PatternArtifactFilterTCK extends TestCase
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.shared.tools.easymock.MockManager;
+import org.easymock.MockControl;
+
+public abstract class PatternArtifactFilterTCK
+    extends TestCase
 {
 
     private final MockManager mockManager = new MockManager();
@@ -373,6 +374,33 @@ public abstract class PatternArtifactFil
         mockManager.verifyAll();
     }
 
+    public void testShouldIncludeWhenWildcardMatchesMiddleOfArtifactId( final 
boolean reverse )
+    {
+        final String groupId = "group";
+        final String artifactId = "some-artifact-id";
+
+        final ArtifactMockAndControl mac = new ArtifactMockAndControl( 
groupId, artifactId );
+
+        mockManager.replayAll();
+
+        final List patterns = new ArrayList();
+
+        patterns.add( "group:some-*-id" );
+
+        final ArtifactFilter filter = createFilter( patterns );
+
+        if ( reverse )
+        {
+            assertFalse( filter.include( mac.artifact ) );
+        }
+        else
+        {
+            assertTrue( filter.include( mac.artifact ) );
+        }
+
+        mockManager.verifyAll();
+    }
+
     public void 
testShouldIncludeTransitiveDependencyWhenWildcardMatchesButDoesntMatchParent( 
final boolean reverse )
     {
         final String groupId = "group";
@@ -488,16 +516,11 @@ public abstract class PatternArtifactFil
             }
         }
 
-        public ArtifactMockAndControl( final String groupId, final String 
artifactId )
+        ArtifactMockAndControl( final String groupId, final String artifactId )
         {
             this( groupId, artifactId, "jar", null );
         }
 
-        public ArtifactMockAndControl( final String groupId, final String 
artifactId, final String type )
-        {
-            this( groupId, artifactId, type, null );
-        }
-
         void enableGetId()
         {
             artifact.getId();

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilterTest.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilterTest.java?rev=1164130&r1=1164129&r2=1164130&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilterTest.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternExcludesArtifactFilterTest.java
 Thu Sep  1 16:15:11 2011
@@ -18,13 +18,14 @@
  */
 package org.apache.maven.shared.artifact.filter;
 
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-
 import java.util.List;
 
 import junit.framework.TestCase;
 
-public class PatternExcludesArtifactFilterTest extends TestCase
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+
+public class PatternExcludesArtifactFilterTest
+    extends TestCase
 {
 
     private final PatternArtifactFilterTCK tck = new PatternArtifactFilterTCK()
@@ -107,6 +108,11 @@ public class PatternExcludesArtifactFilt
         
tck.testShouldIncludeTransitiveDependencyWhenWildcardMatchesButDoesntMatchParent(
 true );
     }
 
+    public void testShouldIncludeWhenWildcardMatchesMiddleOfArtifactId()
+    {
+        tck.testShouldIncludeWhenWildcardMatchesMiddleOfArtifactId( true );
+    }
+
     // See comment in TCK.
     // public void 
testShouldIncludeDirectDependencyWhenInvertedWildcardMatchesButDoesntMatchTransitiveChild()
     // {

Modified: 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilterTest.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilterTest.java?rev=1164130&r1=1164129&r2=1164130&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilterTest.java
 (original)
+++ 
maven/shared/trunk/maven-common-artifact-filters/src/test/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilterTest.java
 Thu Sep  1 16:15:11 2011
@@ -18,13 +18,14 @@
  */
 package org.apache.maven.shared.artifact.filter;
 
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-
 import java.util.List;
 
 import junit.framework.TestCase;
 
-public class PatternIncludesArtifactFilterTest extends TestCase
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+
+public class PatternIncludesArtifactFilterTest
+    extends TestCase
 {
     private final PatternArtifactFilterTCK tck = new PatternArtifactFilterTCK()
     {
@@ -106,6 +107,11 @@ public class PatternIncludesArtifactFilt
         
tck.testShouldIncludeTransitiveDependencyWhenWildcardMatchesButDoesntMatchParent(
 false );
     }
 
+    public void testShouldIncludeWhenWildcardMatchesMiddleOfArtifactId()
+    {
+        tck.testShouldIncludeWhenWildcardMatchesMiddleOfArtifactId( false );
+    }
+
     // See comment in TCK.
     // public void 
testShouldIncludeDirectDependencyWhenInvertedWildcardMatchesButDoesntMatchTransitiveChild()
     // {


Reply via email to