This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch MNG-4463 in repository https://gitbox.apache.org/repos/asf/maven-integration-testing.git
commit 2b53fe861b1e8f4a5e19c9748491156f7e454d09 Author: Christian Schulte <[email protected]> AuthorDate: Sat Jan 30 20:21:33 2016 +0100 [MNG-4463] Dependency management import should support version ranges This closes #28 --- .../org/apache/maven/it/IntegrationTestSuite.java | 1 + ...463DependencyManagementImportVersionRanges.java | 108 +++++++++++++++++++++ .../mng-4463/exclusive-upper-bound/pom.xml | 76 +++++++++++++++ .../mng-4463/inclusive-upper-bound/pom.xml | 76 +++++++++++++++ .../test/resources/mng-4463/no-upper-bound/pom.xml | 54 +++++++++++ 5 files changed, 315 insertions(+) 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 1fa03f9..dd811f9 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 // Tests that don't run stable and need to be fixed // ------------------------------------------------------------------------------------------------------------- // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137 + suite.addTestSuite( MavenITmng4463DependencyManagementImportVersionRanges.class ); suite.addTestSuite( MavenITmng7112ProjectsWithNonRecursiveTest.class ); suite.addTestSuite( MavenITmng7128BlockExternalHttpReactorTest.class ); suite.addTestSuite( MavenITmng6511OptionalProjectSelectionTest.class ); 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..9b2defb --- /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( "[4.0.0-alpha-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; + } + +} 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> 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> 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>
