Author: carlos Date: Wed Oct 26 19:00:50 2011 New Revision: 1189385 URL: http://svn.apache.org/viewvc?rev=1189385&view=rev Log: [MDEP-333] Add a test for the remoteRepositories parameter and fix issue found with parsing
Modified: maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/GetMojo.java maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestGetMojo.java Modified: maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/GetMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/GetMojo.java?rev=1189385&r1=1189384&r2=1189385&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/GetMojo.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/main/java/org/apache/maven/plugin/dependency/GetMojo.java Wed Oct 26 19:00:50 2011 @@ -26,6 +26,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.maven.artifact.Artifact; @@ -52,6 +54,7 @@ import org.codehaus.plexus.util.StringUt public class GetMojo extends AbstractMojo { + private static final Pattern ALT_REPO_SYNTAX_PATTERN = Pattern.compile( "(.+)::(.*)::(.+)" ); /** * @component @@ -231,28 +234,7 @@ public class GetMojo List<String> repos = Arrays.asList( StringUtils.split( remoteRepositories, "," ) ); for ( String repo : repos ) { - String[] split = StringUtils.split( repo, "::" ); - if ( split.length > 1 && split.length != 3 ) - { - throw new MojoExecutionException( - "remoteRepositories parameter must be a list of URLs or Strings like id::layout::url" ); - } - - String id = repositoryId; - ArtifactRepositoryLayout layout = getLayout( "default" ); - String url = repo; - if ( split.length > 1 ) - { - id = split[0]; - if ( !StringUtils.isEmpty( split[1] ) ) - { - layout = getLayout( split[1] ); - } - url = split[2]; - } - ArtifactRepository remoteRepo = - artifactRepositoryFactory.createArtifactRepository( id, url, layout, always, always ); - repoList.add( remoteRepo ); + repoList.add( parseRepository( repo, always ) ); } } @@ -302,14 +284,42 @@ public class GetMojo } } + ArtifactRepository parseRepository( String repo, ArtifactRepositoryPolicy policy ) + throws MojoFailureException + { + // if it's a simple url + String id = repositoryId; + ArtifactRepositoryLayout layout = getLayout( "default" ); + String url = repo; + + // if it's an extended repo URL of the form id::layout::url + if ( repo.indexOf( "::" ) >= 0 ) + { + Matcher matcher = ALT_REPO_SYNTAX_PATTERN.matcher( repo ); + if ( !matcher.matches() ) + { + throw new MojoFailureException( repo, "Invalid syntax for repository: " + repo, + "Invalid syntax for repository. Use \"id::layout::url\" or \"URL\"." ); + } + + id = matcher.group( 1 ).trim(); + if ( !StringUtils.isEmpty( matcher.group( 2 ) ) ) + { + layout = getLayout( matcher.group( 2 ).trim() ); + } + url = matcher.group( 3 ).trim(); + } + return artifactRepositoryFactory.createArtifactRepository( id, url, layout, policy, policy ); + } + private ArtifactRepositoryLayout getLayout( String id ) - throws MojoExecutionException + throws MojoFailureException { ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) repositoryLayouts.get( id ); if ( layout == null ) { - throw new MojoExecutionException( "Invalid repository layout: " + id ); + throw new MojoFailureException( id, "Invalid repository layout", "Invalid repository layout: " + id ); } return layout; Modified: maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestGetMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestGetMojo.java?rev=1189385&r1=1189384&r2=1189385&view=diff ============================================================================== --- maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestGetMojo.java (original) +++ maven/plugins/trunk/maven-dependency-plugin/src/test/java/org/apache/maven/plugin/dependency/TestGetMojo.java Wed Oct 26 19:00:50 2011 @@ -21,38 +21,43 @@ package org.apache.maven.plugin.dependen import java.io.File; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; +import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; +import org.apache.maven.artifact.repository.layout.LegacyRepositoryLayout; +import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.testing.stubs.StubArtifactRepository; public class TestGetMojo extends AbstractDependencyMojoTestCase { + GetMojo mojo; protected void setUp() throws Exception { // required for mojo lookups to work super.setUp( "markers", false ); + + File testPom = new File( getBasedir(), "target/test-classes/unit/get-test/plugin-config.xml" ); + assert testPom.exists(); + mojo = (GetMojo) lookupMojo( "get", testPom ); + + assertNotNull( mojo ); + setVariableValueToObject( mojo, "localRepository", new StubArtifactRepository( testDir.getAbsolutePath() ) ); } /** - * tests the proper discovery and configuration of the mojo + * Test transitive parameter * * @throws Exception */ - public void testgetTestEnvironment() + public void testTransitive() throws Exception { - File testPom = new File( getBasedir(), "target/test-classes/unit/get-test/plugin-config.xml" ); - assert testPom.exists(); - GetMojo mojo = (GetMojo) lookupMojo( "get", testPom ); - - assertNotNull( mojo ); - - setVariableValueToObject( mojo, "localRepository", new StubArtifactRepository( testDir.getAbsolutePath() ) ); - // Set properties, transitive = default value = true setVariableValueToObject( mojo, "transitive", Boolean.FALSE ); - setVariableValueToObject( mojo, "repositoryUrl", "http://repo1.maven.org/maven2" ); + setVariableValueToObject( mojo, "repositoryUrl", "http://repo1.maven.apache.org/maven2" ); setVariableValueToObject( mojo, "groupId", "org.apache.maven" ); setVariableValueToObject( mojo, "artifactId", "maven-model" ); setVariableValueToObject( mojo, "version", "2.0.9" ); @@ -63,4 +68,72 @@ public class TestGetMojo setVariableValueToObject( mojo, "transitive", Boolean.FALSE ); mojo.execute(); } + + /** + * Test remote repositories parameter + * + * @throws Exception + */ + public void testRemoteRepositories() + throws Exception + { + setVariableValueToObject( mojo, "remoteRepositories", "central::default::http://repo1.maven.apache.org/maven2," + + "central::::http://repo1.maven.apache.org/maven2," + "http://repo1.maven.apache.org/maven2" ); + setVariableValueToObject( mojo, "groupId", "org.apache.maven" ); + setVariableValueToObject( mojo, "artifactId", "maven-model" ); + setVariableValueToObject( mojo, "version", "2.0.9" ); + + mojo.execute(); + } + + /** + * Test parsing of the remote repositories parameter + * + * @throws Exception + */ + public void testParseRepository() + throws Exception + { + ArtifactRepository repo; + ArtifactRepositoryPolicy policy = null; + repo = mojo.parseRepository( "central::default::http://repo1.maven.apache.org/maven2", policy ); + assertEquals( "central", repo.getId() ); + assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() ); + assertEquals( "http://repo1.maven.apache.org/maven2", repo.getUrl() ); + + repo = mojo.parseRepository( "central::legacy::http://repo1.maven.apache.org/maven2", policy ); + assertEquals( "central", repo.getId() ); + assertEquals( LegacyRepositoryLayout.class, repo.getLayout().getClass() ); + assertEquals( "http://repo1.maven.apache.org/maven2", repo.getUrl() ); + + repo = mojo.parseRepository( "central::::http://repo1.maven.apache.org/maven2", policy ); + assertEquals( "central", repo.getId() ); + assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() ); + assertEquals( "http://repo1.maven.apache.org/maven2", repo.getUrl() ); + + repo = mojo.parseRepository( "http://repo1.maven.apache.org/maven2", policy ); + assertEquals( "temp", repo.getId() ); + assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() ); + assertEquals( "http://repo1.maven.apache.org/maven2", repo.getUrl() ); + + try + { + repo = mojo.parseRepository( "::::http://repo1.maven.apache.org/maven2", policy ); + fail( "Exception expected" ); + } + catch ( MojoFailureException e ) + { + // expected + } + + try + { + repo = mojo.parseRepository( "central::http://repo1.maven.apache.org/maven2", policy ); + fail( "Exception expected" ); + } + catch ( MojoFailureException e ) + { + // expected + } + } }