[MNG-4463] Dependency management import should support version ranges.
Project: http://git-wip-us.apache.org/repos/asf/maven-integration-testing/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-integration-testing/commit/229ec9cb Tree: http://git-wip-us.apache.org/repos/asf/maven-integration-testing/tree/229ec9cb Diff: http://git-wip-us.apache.org/repos/asf/maven-integration-testing/diff/229ec9cb Branch: refs/heads/DEPMGMT-INCLUDE Commit: 229ec9cbb2c35d0aa5cba20fff79599aaa90c5b5 Parents: 8306668 Author: Christian Schulte <schu...@apache.org> Authored: Sat Jan 30 20:21:33 2016 +0100 Committer: Christian Schulte <schu...@apache.org> Committed: Thu Feb 2 04:16:28 2017 +0100 ---------------------------------------------------------------------- .../apache/maven/it/IntegrationTestSuite.java | 1 + ...DependencyManagementImportVersionRanges.java | 108 +++++++++++++++++++ .../mng-4463/exclusive-upper-bound/pom.xml | 76 +++++++++++++ .../mng-4463/inclusive-upper-bound/pom.xml | 76 +++++++++++++ .../resources/mng-4463/no-upper-bound/pom.xml | 54 ++++++++++ 5 files changed, 315 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-integration-testing/blob/229ec9cb/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java ---------------------------------------------------------------------- diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java index a91eeb0..9f1a36c 100644 --- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java +++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java @@ -106,6 +106,7 @@ public class IntegrationTestSuite // ------------------------------------------------------------------------------------------------------------- // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137 + suite.addTestSuite( MavenITmng4463DependencyManagementImportVersionRanges.class ); suite.addTestSuite( MavenITmng5958LifecyclePhaseBinaryCompat.class ); suite.addTestSuite( MavenITmng5898BuildMultimoduleWithEARFailsToResolveWARTest.class ); suite.addTestSuite( MavenITmng5840ParentVersionRanges.class ); http://git-wip-us.apache.org/repos/asf/maven-integration-testing/blob/229ec9cb/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4463DependencyManagementImportVersionRanges.java ---------------------------------------------------------------------- diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4463DependencyManagementImportVersionRanges.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4463DependencyManagementImportVersionRanges.java new file mode 100644 index 0000000..84c573c --- /dev/null +++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4463DependencyManagementImportVersionRanges.java @@ -0,0 +1,108 @@ +/* + * Copyright 2016 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. + */ +package org.apache.maven.it; + +import java.io.File; +import java.util.List; +import java.util.regex.Pattern; +import org.apache.maven.it.util.ResourceExtractor; +import static junit.framework.Assert.assertTrue; + +/** + * Integration tests for <a href="https://issues.apache.org/jira/browse/MNG-4463">MNG-4463</a>. + * + * @author Christian Schulte + */ +public class MavenITmng4463DependencyManagementImportVersionRanges + extends AbstractMavenIntegrationTestCase +{ + + public MavenITmng4463DependencyManagementImportVersionRanges() + { + super( "[3.5.1,)" ); + } + + public void testInclusiveUpperBoundResolvesToHighestVersion() + throws Exception + { + final File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4463/inclusive-upper-bound" ); + final Verifier verifier = newVerifier( testDir.getAbsolutePath(), "remote" ); + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.executeGoal( "validate" ); + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); + + final List<String> artifacts = verifier.loadLines( "target/compile.txt", "UTF-8" ); + assertTrue( artifacts.toString(), artifacts.contains( "org.apache.maven:maven-plugin-api:jar:3.0" ) ); + } + + public void testExclusiveUpperBoundResolvesToHighestVersion() + throws Exception + { + final File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4463/exclusive-upper-bound" ); + final Verifier verifier = newVerifier( testDir.getAbsolutePath(), "remote" ); + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.executeGoal( "validate" ); + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); + + List<String> artifacts = verifier.loadLines( "target/compile.txt", "UTF-8" ); + assertTrue( artifacts.toString(), artifacts.contains( "org.apache.maven:maven-plugin-api:jar:3.0" ) ); + } + + public void testFailureWithoutUpperBound() + throws Exception + { + final File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4463/no-upper-bound" ); + final Verifier verifier = newVerifier( testDir.getAbsolutePath(), "remote" ); + + try + { + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.executeGoal( "validate" ); + fail( "Expected 'VerificationException' not thrown." ); + } + catch ( final VerificationException e ) + { + final List<String> lines = verifier.loadFile( new File( testDir, "log.txt" ), false ); + assertTrue( "Expected error message not found.", + indexOf( lines, ".*dependency version range.*does not specify an upper bound.*" ) >= 0 ); + } + finally + { + verifier.resetStreams(); + } + } + + private static int indexOf( final List<String> logLines, final String regex ) + { + final Pattern pattern = Pattern.compile( regex ); + + for ( int i = 0, l0 = logLines.size(); i < l0; i++ ) + { + if ( pattern.matcher( logLines.get( i ) ).matches() ) + { + return i; + } + } + + return -1; + } + +} http://git-wip-us.apache.org/repos/asf/maven-integration-testing/blob/229ec9cb/core-it-suite/src/test/resources/mng-4463/exclusive-upper-bound/pom.xml ---------------------------------------------------------------------- diff --git a/core-it-suite/src/test/resources/mng-4463/exclusive-upper-bound/pom.xml b/core-it-suite/src/test/resources/mng-4463/exclusive-upper-bound/pom.xml new file mode 100644 index 0000000..54404ac --- /dev/null +++ b/core-it-suite/src/test/resources/mng-4463/exclusive-upper-bound/pom.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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>org.apache.maven.its.mng4463</groupId> + <artifactId>test</artifactId> + <version>1.0</version> + <packaging>jar</packaging> + + <name>Maven Integration Test :: MNG-4463</name> + <description> + Tests that importing dependency management using version ranges + with exclusive upper bound resolves to the highest version. + </description> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>(,3.0.1)</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.its.plugins</groupId> + <artifactId>maven-it-plugin-dependency-resolution</artifactId> + <version>2.1-SNAPSHOT</version> + <configuration> + <compileArtifacts>target/compile.txt</compileArtifacts> + </configuration> + <executions> + <execution> + <id>test</id> + <phase>validate</phase> + <goals> + <goal>compile</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/maven-integration-testing/blob/229ec9cb/core-it-suite/src/test/resources/mng-4463/inclusive-upper-bound/pom.xml ---------------------------------------------------------------------- diff --git a/core-it-suite/src/test/resources/mng-4463/inclusive-upper-bound/pom.xml b/core-it-suite/src/test/resources/mng-4463/inclusive-upper-bound/pom.xml new file mode 100644 index 0000000..0e91b01 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-4463/inclusive-upper-bound/pom.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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>org.apache.maven.its.mng4463</groupId> + <artifactId>test</artifactId> + <version>1.0</version> + <packaging>jar</packaging> + + <name>Maven Integration Test :: MNG-4463</name> + <description> + Tests that importing dependency management using version ranges + with inclusive upper bound resolves to the highest version. + </description> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>(,3.0]</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.its.plugins</groupId> + <artifactId>maven-it-plugin-dependency-resolution</artifactId> + <version>2.1-SNAPSHOT</version> + <configuration> + <compileArtifacts>target/compile.txt</compileArtifacts> + </configuration> + <executions> + <execution> + <id>test</id> + <phase>validate</phase> + <goals> + <goal>compile</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/maven-integration-testing/blob/229ec9cb/core-it-suite/src/test/resources/mng-4463/no-upper-bound/pom.xml ---------------------------------------------------------------------- diff --git a/core-it-suite/src/test/resources/mng-4463/no-upper-bound/pom.xml b/core-it-suite/src/test/resources/mng-4463/no-upper-bound/pom.xml new file mode 100644 index 0000000..53ec4e3 --- /dev/null +++ b/core-it-suite/src/test/resources/mng-4463/no-upper-bound/pom.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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>org.apache.maven.its.mng4463</groupId> + <artifactId>test</artifactId> + <version>1.0</version> + <packaging>jar</packaging> + + <name>Maven Integration Test :: MNG-4463</name> + <description> + Tests that importing dependency management using version ranges + without upper bound fails. + </description> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>(3.0,)</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + </dependency> + </dependencies> +</project>