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() // {