You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2017/05/15 21:10:28 UTC
svn commit: r1795243 [4/4] - in
/maven/plugins/trunk/maven-invoker-plugin/src:
it/local-repo-url/src/it/project/ main/java/org/apache/maven/plugin/
main/java/org/apache/maven/plugins/
main/java/org/apache/maven/plugins/invoker/ main/mdo/ test/java/org/...
Added: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/ReportUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/ReportUtils.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/ReportUtils.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/ReportUtils.java Mon May 15 21:10:27 2017
@@ -0,0 +1,63 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.FilenameFilter;
+
+/**
+ * Provides utility methods for invoker report processing.
+ *
+ * @author Benjamin Bentmann
+ */
+class ReportUtils
+{
+
+ private static class FileFilterOnlyXmlFile
+ implements FilenameFilter
+ {
+
+ public boolean accept( File dir, String name )
+ {
+ return name.startsWith( "BUILD-" ) && name.endsWith( ".xml" );
+ }
+
+ }
+
+ /**
+ * Gets the paths to the invoker reports available in the specified directory.
+ *
+ * @param reportsDirectory The base directory where the invoker reports are located in, may be <code>null</code>.
+ * @return The paths to the invoker reports, can be empty but never <code>null</code>.
+ */
+ public static File[] getReportFiles( File reportsDirectory )
+ {
+ File[] reportFiles =
+ ( reportsDirectory != null ) ? reportsDirectory.listFiles( new FileFilterOnlyXmlFile() ) : null;
+
+ if ( reportFiles == null )
+ {
+ reportFiles = new File[0];
+ }
+
+ return reportFiles;
+ }
+
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/Selector.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/Selector.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/Selector.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/Selector.java Mon May 15 21:10:27 2017
@@ -0,0 +1,113 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+/**
+ *
+ * @author Robert Scholte
+ *
+ */
+class Selector
+{
+ static final int SELECTOR_MAVENVERSION = 1;
+
+ static final int SELECTOR_JREVERSION = 2;
+
+ static final int SELECTOR_OSFAMILY = 4;
+
+ static final int SELECTOR_MULTI = 8;
+
+ private final String actualMavenVersion;
+
+ private final String actualJavaVersion;
+
+ public Selector( String actualMavenVersion, String actualJavaVersion )
+ {
+ this.actualMavenVersion = actualMavenVersion;
+ this.actualJavaVersion = actualJavaVersion;
+ }
+
+ public int getSelection( InvokerProperties invokerProperties )
+ {
+ if ( !invokerProperties.isSelectorDefined( 1 ) )
+ {
+ return getGlobal( invokerProperties );
+ }
+
+ for ( int selectorIndex = 1;; selectorIndex++ )
+ {
+ if ( selectorIndex > 1 && !invokerProperties.isSelectorDefined( selectorIndex ) )
+ {
+ break;
+ }
+
+ int selection = 0;
+ if ( !SelectorUtils.isMavenVersion( invokerProperties.getMavenVersion( selectorIndex ),
+ actualMavenVersion ) )
+ {
+ selection |= SELECTOR_MAVENVERSION;
+ }
+
+ if ( !SelectorUtils.isJreVersion( invokerProperties.getJreVersion( selectorIndex ), actualJavaVersion ) )
+ {
+ selection |= SELECTOR_JREVERSION;
+ }
+
+ if ( !SelectorUtils.isOsFamily( invokerProperties.getOsFamily( selectorIndex ) ) )
+ {
+ selection |= SELECTOR_OSFAMILY;
+ }
+
+ if ( selection == 0 )
+ {
+ return 0;
+ }
+ }
+ return SELECTOR_MULTI;
+ }
+
+ /**
+ * Determines whether selector conditions of the specified invoker properties match the current environment.
+ *
+ * @param invokerProperties The invoker properties to check, must not be <code>null</code>.
+ * @return <code>0</code> if the job corresponding to the properties should be run, otherwise a bitwise value
+ * representing the reason why it should be skipped.
+ */
+ private int getGlobal( InvokerProperties invokerProperties )
+ {
+ int selection = 0;
+ if ( !SelectorUtils.isMavenVersion( invokerProperties.getMavenVersion(), actualMavenVersion ) )
+ {
+ selection |= SELECTOR_MAVENVERSION;
+ }
+
+ if ( !SelectorUtils.isJreVersion( invokerProperties.getJreVersion(), actualJavaVersion.toString() ) )
+ {
+ selection |= SELECTOR_JREVERSION;
+ }
+
+ if ( !SelectorUtils.isOsFamily( invokerProperties.getOsFamily() ) )
+ {
+ selection |= SELECTOR_OSFAMILY;
+ }
+
+ return selection;
+ }
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SelectorUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SelectorUtils.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SelectorUtils.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SelectorUtils.java Mon May 15 21:10:27 2017
@@ -0,0 +1,283 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.Os;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Provides utility methods for selecting build jobs based on environmental conditions.
+ *
+ * @author Benjamin Bentmann
+ */
+class SelectorUtils
+{
+
+ static void parseList( String list, Collection<String> includes, Collection<String> excludes )
+ {
+ String[] tokens = ( list != null ) ? StringUtils.split( list, "," ) : new String[0];
+
+ for ( String token1 : tokens )
+ {
+ String token = token1.trim();
+
+ if ( token.startsWith( "!" ) )
+ {
+ excludes.add( token.substring( 1 ) );
+ }
+ else
+ {
+ includes.add( token );
+ }
+ }
+ }
+
+ static boolean isOsFamily( String osSpec )
+ {
+ List<String> includes = new ArrayList<String>();
+ List<String> excludes = new ArrayList<String>();
+ parseList( osSpec, includes, excludes );
+
+ return isOsFamily( includes, true ) && !isOsFamily( excludes, false );
+ }
+
+ static boolean isOsFamily( List<String> families, boolean defaultMatch )
+ {
+ if ( families != null && !families.isEmpty() )
+ {
+ for ( String family : families )
+ {
+ if ( Os.isFamily( family ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ else
+ {
+ return defaultMatch;
+ }
+ }
+
+ /**
+ * Retrieves the current Maven version.
+ *
+ * @return The current Maven version.
+ */
+ static String getMavenVersion()
+ {
+ try
+ {
+ // This relies on the fact that MavenProject is the in core classloader
+ // and that the core classloader is for the maven-core artifact
+ // and that should have a pom.properties file
+ // if this ever changes, we will have to revisit this code.
+ Properties properties = new Properties();
+ // CHECKSTYLE_OFF: LineLength
+ properties.load( MavenProject.class.getClassLoader().getResourceAsStream( "META-INF/maven/org.apache.maven/maven-core/pom.properties" ) );
+ // CHECKSTYLE_ON: LineLength
+ return StringUtils.trim( properties.getProperty( "version" ) );
+ }
+ catch ( Exception e )
+ {
+ return null;
+ }
+ }
+
+ static String getMavenVersion( File mavenHome )
+ {
+ File mavenLib = new File( mavenHome, "lib" );
+ File[] jarFiles = mavenLib.listFiles( new FilenameFilter()
+ {
+ public boolean accept( File dir, String name )
+ {
+ return name.endsWith( ".jar" );
+ }
+ } );
+
+ for ( File file : jarFiles )
+ {
+ try
+ {
+ @SuppressWarnings( "deprecation" )
+ URL url =
+ new URL( "jar:" + file.toURL().toExternalForm()
+ + "!/META-INF/maven/org.apache.maven/maven-core/pom.properties" );
+
+ Properties properties = new Properties();
+ properties.load( url.openStream() );
+ String version = StringUtils.trim( properties.getProperty( "version" ) );
+ if ( version != null )
+ {
+ return version;
+ }
+ }
+ catch ( MalformedURLException e )
+ {
+ // ignore
+ }
+ catch ( IOException e )
+ {
+ // ignore
+ }
+ }
+ return null;
+ }
+
+ static boolean isMavenVersion( String mavenSpec )
+ {
+ return isMavenVersion( mavenSpec, getMavenVersion() );
+ }
+
+ static boolean isMavenVersion( String mavenSpec, String actualVersion )
+ {
+ List<String> includes = new ArrayList<String>();
+ List<String> excludes = new ArrayList<String>();
+ parseList( mavenSpec, includes, excludes );
+
+ List<Integer> mavenVersionList = parseVersion( actualVersion );
+
+ return isJreVersion( mavenVersionList, includes, true ) && !isJreVersion( mavenVersionList, excludes, false );
+ }
+
+ static String getJreVersion()
+ {
+ return System.getProperty( "java.version", "" );
+ }
+
+ static String getJreVersion( File javaHome )
+ {
+ // @todo detect actual version
+ return null;
+ }
+
+ static boolean isJreVersion( String jreSpec )
+ {
+ return isJreVersion( jreSpec, getJreVersion() );
+ }
+
+ static boolean isJreVersion( String jreSpec, String actualJreVersion )
+ {
+ List<String> includes = new ArrayList<String>();
+ List<String> excludes = new ArrayList<String>();
+ parseList( jreSpec, includes, excludes );
+
+ List<Integer> jreVersion = parseVersion( actualJreVersion );
+
+ return isJreVersion( jreVersion, includes, true ) && !isJreVersion( jreVersion, excludes, false );
+ }
+
+ static boolean isJreVersion( List<Integer> jreVersion, List<String> versionPatterns, boolean defaultMatch )
+ {
+ if ( versionPatterns != null && !versionPatterns.isEmpty() )
+ {
+ for ( String versionPattern : versionPatterns )
+ {
+ if ( isJreVersion( jreVersion, versionPattern ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ else
+ {
+ return defaultMatch;
+ }
+ }
+
+ static boolean isJreVersion( List<Integer> jreVersion, String versionPattern )
+ {
+ List<Integer> checkVersion = parseVersion( versionPattern );
+
+ if ( versionPattern.endsWith( "+" ) )
+ {
+ // 1.5+ <=> [1.5,)
+ return compareVersions( jreVersion, checkVersion ) >= 0;
+ }
+ else if ( versionPattern.endsWith( "-" ) )
+ {
+ // 1.5- <=> (,1.5)
+ return compareVersions( jreVersion, checkVersion ) < 0;
+ }
+ else
+ {
+ // 1.5 <=> [1.5,1.6)
+ return checkVersion.size() <= jreVersion.size()
+ && checkVersion.equals( jreVersion.subList( 0, checkVersion.size() ) );
+ }
+ }
+
+ static List<Integer> parseVersion( String version )
+ {
+ version = version.replaceAll( "[^0-9]", "." );
+
+ String[] tokens = StringUtils.split( version, "." );
+
+ List<Integer> numbers = new ArrayList<Integer>();
+
+ for ( String token : tokens )
+ {
+ numbers.add( Integer.valueOf( token ) );
+ }
+
+ return numbers;
+ }
+
+ static int compareVersions( List<Integer> version1, List<Integer> version2 )
+ {
+ for ( Iterator<Integer> it1 = version1.iterator(), it2 = version2.iterator();; )
+ {
+ if ( !it1.hasNext() )
+ {
+ return it2.hasNext() ? -1 : 0;
+ }
+ if ( !it2.hasNext() )
+ {
+ return it1.hasNext() ? 1 : 0;
+ }
+
+ Integer num1 = it1.next();
+ Integer num2 = it2.next();
+
+ int rel = num1.compareTo( num2 );
+ if ( rel != 0 )
+ {
+ return rel;
+ }
+ }
+ }
+
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SystemPropertyPrinter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SystemPropertyPrinter.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SystemPropertyPrinter.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/SystemPropertyPrinter.java Mon May 15 21:10:27 2017
@@ -0,0 +1,42 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+/**
+ * Print specified system properties to the output stream. Useful to detect certain values from a JVM different to the
+ * default JAVA_HOME.
+ *
+ * @author Robert Scholte
+ * @since 1.8
+ */
+public class SystemPropertyPrinter
+{
+ /**
+ * @param args system properties to print
+ */
+ public static void main( String[] args )
+ {
+ for ( String arg : args )
+ {
+ System.out.println( System.getProperty( arg, "" ) );
+ }
+ }
+
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/VerifyMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/VerifyMojo.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/VerifyMojo.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugins/invoker/VerifyMojo.java Mon May 15 21:10:27 2017
@@ -0,0 +1,140 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.invoker.model.io.xpp3.BuildJobXpp3Reader;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Checks the results of maven-invoker-plugin based integration tests and fails the build if any tests failed.
+ *
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+@Mojo( name = "verify", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true )
+public class VerifyMojo
+ extends AbstractMojo
+{
+
+ /**
+ * Flag used to suppress certain invocations. This is useful in tailoring the build using profiles.
+ *
+ * @since 1.1
+ */
+ @Parameter( property = "invoker.skip", defaultValue = "false" )
+ private boolean skipInvocation;
+
+ /**
+ * Base directory where all build reports are read from.
+ *
+ * @since 1.4
+ */
+ @Parameter( property = "invoker.reportsDirectory", defaultValue = "${project.build.directory}/invoker-reports" )
+ private File reportsDirectory;
+
+ /**
+ * A flag controlling whether failures of the sub builds should fail the main build, too. If set to
+ * <code>true</code>, the main build will proceed even if one or more sub builds failed.
+ *
+ * @since 1.3
+ */
+ @Parameter( property = "maven.test.failure.ignore", defaultValue = "false" )
+ private boolean ignoreFailures;
+
+ /**
+ * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, the
+ * only indication of the build's success or failure will be the effect it has on the main build (if it fails, the
+ * main build should fail as well).
+ */
+ @Parameter( defaultValue = "false" )
+ private boolean suppressSummaries;
+
+ /**
+ * Set this to <code>true</code> to cause a failure if there are no projects to invoke.
+ *
+ * @since 1.9
+ */
+ @Parameter( property = "invoker.failIfNoProjects" )
+ private Boolean failIfNoProjects;
+
+ /**
+ * Invokes Maven on the configured test projects.
+ *
+ * @throws org.apache.maven.plugin.MojoExecutionException If the goal encountered severe errors.
+ * @throws org.apache.maven.plugin.MojoFailureException If any of the Maven builds failed.
+ */
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ if ( skipInvocation )
+ {
+ getLog().info( "Skipping invocation per configuration."
+ + " If this is incorrect, ensure the skipInvocation parameter is not set to true." );
+ return;
+ }
+
+ File[] reportFiles = ReportUtils.getReportFiles( reportsDirectory );
+ if ( reportFiles.length <= 0 )
+ {
+ if ( Boolean.TRUE.equals( failIfNoProjects ) )
+ {
+ throw new MojoFailureException( "No projects to invoke!" );
+ }
+ getLog().info( "No invoker report files found, nothing to check." );
+ return;
+ }
+
+ InvokerSession invokerSession = new InvokerSession();
+ for ( File reportFile : reportFiles )
+ {
+ try
+ {
+ BuildJobXpp3Reader reader = new BuildJobXpp3Reader();
+ invokerSession.addJob( reader.read( ReaderFactory.newXmlReader( reportFile ) ) );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new MojoExecutionException( "Failed to parse report file: " + reportFile, e );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Failed to read report file: " + reportFile, e );
+ }
+ }
+
+ if ( !suppressSummaries )
+ {
+ invokerSession.logSummary( getLog(), ignoreFailures );
+ }
+
+ invokerSession.handleFailures( getLog(), ignoreFailures );
+ }
+
+}
Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/mdo/invocation.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/mdo/invocation.mdo?rev=1795243&r1=1795242&r2=1795243&view=diff
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/main/mdo/invocation.mdo (original)
+++ maven/plugins/trunk/maven-invoker-plugin/src/main/mdo/invocation.mdo Mon May 15 21:10:27 2017
@@ -32,7 +32,7 @@ under the License.
<defaults>
<default>
<key>package</key>
- <value>org.apache.maven.plugin.invoker.model</value>
+ <value>org.apache.maven.plugins.invoker.model</value>
</default>
</defaults>
<versionDefinition>
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/ExtendedMavenProjectStub.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/ExtendedMavenProjectStub.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/ExtendedMavenProjectStub.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/ExtendedMavenProjectStub.java Mon May 15 21:10:27 2017
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugins.invoker;
+
+import org.apache.maven.model.Scm;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+
+import java.util.Properties;
+
+/**
+ * @author Olivier Lamy
+ * @since 22 nov. 07
+ * @version $Id: ExtendedMavenProjectStub.java 1606207 2014-06-27 20:27:03Z khmarbaise $
+ */
+public class ExtendedMavenProjectStub
+ extends MavenProjectStub
+{
+ private Scm scm;
+
+ private Properties properties;
+
+ public Scm getScm()
+ {
+ return scm;
+ }
+
+ public void setScm( Scm scm )
+ {
+ this.scm = scm;
+ }
+
+ public Properties getProperties()
+ {
+ return properties;
+ }
+
+ public void setProperties( Properties properties )
+ {
+ this.properties = properties;
+ }
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InterpolationTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InterpolationTest.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InterpolationTest.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InterpolationTest.java Mon May 15 21:10:27 2017
@@ -0,0 +1,129 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.Reader;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.model.Scm;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.plugins.invoker.CompositeMap;
+import org.apache.maven.plugins.invoker.InvokerMojo;
+import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+
+/**
+ * @author Olivier Lamy
+ * @since 22 nov. 07
+ * @version $Id: InterpolationTest.java 1783819 2017-02-21 02:30:23Z schulte $
+ */
+public class InterpolationTest
+ extends AbstractMojoTestCase
+{
+
+ protected MavenProjectStub buildMavenProjectStub()
+ {
+ ExtendedMavenProjectStub project = new ExtendedMavenProjectStub();
+ project.setVersion( "1.0-SNAPSHOT" );
+ project.setArtifactId( "foo" );
+ project.setGroupId( "bar" );
+ Properties properties = new Properties();
+ properties.put( "fooOnProject", "barOnProject" );
+ project.setProperties( properties );
+ Scm scm = new Scm();
+ scm.setConnection( "http://blabla" );
+ project.setScm( scm );
+ return project;
+ }
+
+ public void testCompositeMap()
+ throws Exception
+ {
+
+ Properties properties = new Properties();
+ properties.put( "foo", "bar" );
+ properties.put( "version", "2.0-SNAPSHOT" );
+ CompositeMap compositeMap = new CompositeMap( buildMavenProjectStub(), (Map) properties, false );
+ assertEquals( "1.0-SNAPSHOT", compositeMap.get( "pom.version" ) );
+ assertEquals( "bar", compositeMap.get( "foo" ) );
+ assertEquals( "bar", compositeMap.get( "pom.groupId" ) );
+ assertEquals( "http://blabla", compositeMap.get( "pom.scm.connection" ) );
+ assertEquals( "barOnProject", compositeMap.get( "fooOnProject" ) );
+ }
+
+ public void testPomInterpolation()
+ throws Exception
+ {
+ Reader reader = null;
+ File interpolatedPomFile;
+ try
+ {
+ InvokerMojo invokerMojo = new InvokerMojo();
+ setVariableValueToObject( invokerMojo, "project", buildMavenProjectStub() );
+ setVariableValueToObject( invokerMojo, "settings", new Settings() );
+ Properties properties = new Properties();
+ properties.put( "foo", "bar" );
+ properties.put( "version", "2.0-SNAPSHOT" );
+ setVariableValueToObject( invokerMojo, "filterProperties", properties );
+ String dirPath = getBasedir() + File.separatorChar + "src" + File.separatorChar + "test"
+ + File.separatorChar + "resources" + File.separatorChar + "unit" + File.separatorChar + "interpolation";
+
+ interpolatedPomFile = new File( getBasedir(), "target/interpolated-pom.xml" );
+ invokerMojo.buildInterpolatedFile( new File( dirPath, "pom.xml" ), interpolatedPomFile );
+ reader = ReaderFactory.newXmlReader( interpolatedPomFile );
+ String content = IOUtil.toString( reader );
+ assertTrue( content.indexOf( "<interpolateValue>bar</interpolateValue>" ) > 0 );
+ reader.close();
+ reader = null;
+ // recreate it to test delete if exists before creation
+ invokerMojo.buildInterpolatedFile( new File( dirPath, "pom.xml" ), interpolatedPomFile );
+ reader = ReaderFactory.newXmlReader( interpolatedPomFile );
+ content = IOUtil.toString( reader );
+ assertTrue( content.indexOf( "<interpolateValue>bar</interpolateValue>" ) > 0 );
+ reader.close();
+ reader = null;
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ }
+ }
+
+ public void testProfilesWithNoFile()
+ throws Exception
+ {
+
+ InvokerMojo invokerMojo = new InvokerMojo();
+ setVariableValueToObject( invokerMojo, "profiles", Arrays.asList( "zloug" ) );
+ setVariableValueToObject( invokerMojo, "settings", new Settings() );
+ String dirPath = getBasedir() + File.separatorChar + "src" + File.separatorChar + "test" + File.separatorChar
+ + "resources" + File.separatorChar + "unit" + File.separatorChar + "profiles-from-file";
+ List<String> profiles = invokerMojo.getProfiles( new File( dirPath ) );
+ assertTrue( profiles.contains( "zloug" ) );
+ assertEquals( 1, profiles.size() );
+
+ }
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerMojoTest.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerMojoTest.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerMojoTest.java Mon May 15 21:10:27 2017
@@ -0,0 +1,87 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugins.invoker.model.BuildJob;
+
+/**
+ * @author Olivier Lamy
+ * @since 18 nov. 07
+ * @version $Id: InvokerMojoTest.java 1731726 2016-02-22 19:34:37Z khmarbaise $
+ */
+public class InvokerMojoTest
+ extends AbstractMojoTestCase
+{
+
+ public void testSingleInvokerTest()
+ throws Exception
+ {
+ InvokerMojo invokerMojo = new InvokerMojo();
+ String dirPath = getBasedir() + "/src/test/resources/unit";
+ List<String> goals = invokerMojo.getGoals( new File( dirPath ) );
+ assertEquals( 1, goals.size() );
+ setVariableValueToObject( invokerMojo, "projectsDirectory", new File( dirPath ) );
+ setVariableValueToObject( invokerMojo, "invokerTest", "*dummy*" );
+ BuildJob[] poms = invokerMojo.getBuildJobs();
+ assertEquals( 1, poms.length );
+ }
+
+ public void testMultiInvokerTest()
+ throws Exception
+ {
+ InvokerMojo invokerMojo = new InvokerMojo();
+ String dirPath = getBasedir() + "/src/test/resources/unit";
+ List<String> goals = invokerMojo.getGoals( new File( dirPath ) );
+ assertEquals( 1, goals.size() );
+ setVariableValueToObject( invokerMojo, "projectsDirectory", new File( dirPath ) );
+ setVariableValueToObject( invokerMojo, "invokerTest", "*dummy*,*terpolatio*" );
+ BuildJob[] poms = invokerMojo.getBuildJobs();
+ assertEquals( 2, poms.length );
+ }
+
+ public void testFullPatternInvokerTest()
+ throws Exception
+ {
+ InvokerMojo invokerMojo = new InvokerMojo();
+ String dirPath = getBasedir() + "/src/test/resources/unit";
+ List<String> goals = invokerMojo.getGoals( new File( dirPath ) );
+ assertEquals( 1, goals.size() );
+ setVariableValueToObject( invokerMojo, "projectsDirectory", new File( dirPath ) );
+ setVariableValueToObject( invokerMojo, "invokerTest", "*" );
+ BuildJob[] poms = invokerMojo.getBuildJobs();
+ assertEquals( 4, poms.length );
+ }
+
+ public void testAlreadyCloned()
+ throws Exception
+ {
+ assertFalse( AbstractInvokerMojo.alreadyCloned( "dir", Collections.<String>emptyList() ) );
+ assertTrue( AbstractInvokerMojo.alreadyCloned( "dir", Collections.singletonList( "dir" ) ) );
+ assertTrue( AbstractInvokerMojo.alreadyCloned( "dir" + File.separator + "sub",
+ Collections.singletonList( "dir" ) ) );
+ assertFalse( AbstractInvokerMojo.alreadyCloned( "dirs", Collections.singletonList( "dir" ) ) );
+ }
+
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerPropertiesTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerPropertiesTest.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerPropertiesTest.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/InvokerPropertiesTest.java Mon May 15 21:10:27 2017
@@ -0,0 +1,295 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Properties;
+
+import org.apache.maven.plugins.invoker.InvokerProperties;
+import org.apache.maven.shared.invoker.DefaultInvocationRequest;
+import org.apache.maven.shared.invoker.InvocationRequest;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the invoker properties facade.
+ *
+ * @author Benjamin Bentmann
+ * @version $Id: InvokerPropertiesTest.java 1779250 2017-01-17 20:20:02Z rfscholte $
+ */
+public class InvokerPropertiesTest
+ extends TestCase
+{
+
+ public void testConstructorNullSafe()
+ throws Exception
+ {
+ InvokerProperties facade = new InvokerProperties( null );
+ assertNotNull( facade.getProperties() );
+ }
+
+ public void testGetInvokerProperty()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ assertNull( facade.get( "undefined-key", 0 ) );
+
+ props.setProperty( "key", "value" );
+ assertEquals( "value", facade.get( "key", 1 ) );
+
+ props.setProperty( "key.1", "another-value" );
+ assertEquals( "another-value", facade.get( "key", 1 ) );
+ assertEquals( "value", facade.get( "key", 2 ) );
+ }
+
+ public void testGetJobName()
+ throws Exception
+ {
+ Properties props = new Properties();
+ final String jobName = "Build Job name";
+ props.put( "invoker.name", jobName );
+ InvokerProperties facade = new InvokerProperties( props );
+
+ assertEquals( jobName, facade.getJobName() );
+ }
+
+ public void testIsExpectedResult()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ assertTrue( facade.isExpectedResult( 0, 0 ) );
+ assertFalse( facade.isExpectedResult( 1, 0 ) );
+
+ props.setProperty( "invoker.buildResult", "success" );
+ assertTrue( facade.isExpectedResult( 0, 0 ) );
+ assertFalse( facade.isExpectedResult( 1, 0 ) );
+
+ props.setProperty( "invoker.buildResult", "failure" );
+ assertFalse( facade.isExpectedResult( 0, 0 ) );
+ assertTrue( facade.isExpectedResult( 1, 0 ) );
+ }
+
+ public void testConfigureRequestGoals()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setGoals( Collections.singletonList( "test" ) );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Collections.singletonList( "test" ), request.getGoals() );
+
+ props.setProperty( "invoker.goals", "verify" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Collections.singletonList( "verify" ), request.getGoals() );
+
+ props.setProperty( "invoker.goals", " " );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[0] ), request.getGoals() );
+
+ props.setProperty( "invoker.goals", " clean , test verify " );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[] { "clean", "test", "verify" } ), request.getGoals() );
+
+ props.setProperty( "invoker.goals", "" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[0] ), request.getGoals() );
+ }
+
+ public void testConfigureRequestProfiles()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setProfiles( Collections.singletonList( "test" ) );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Collections.singletonList( "test" ), request.getProfiles() );
+
+ props.setProperty( "invoker.profiles", "verify" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Collections.singletonList( "verify" ), request.getProfiles() );
+
+ props.setProperty( "invoker.profiles", " " );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[0] ), request.getProfiles() );
+
+ props.setProperty( "invoker.profiles", " clean , test verify ," );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[] { "clean", "test", "verify" } ), request.getProfiles() );
+
+ props.setProperty( "invoker.profiles", "" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( Arrays.asList( new String[0] ), request.getProfiles() );
+ }
+
+ public void testConfigureRequestProject()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ File tempPom = File.createTempFile( "maven-invoker-plugin-test", ".pom" );
+ File tempDir = tempPom.getParentFile();
+
+ request.setBaseDirectory( tempDir );
+ facade.configureInvocation( request, 0 );
+ assertEquals( tempDir, request.getBaseDirectory() );
+ assertEquals( null, request.getPomFile() );
+
+ props.setProperty( "invoker.project", tempPom.getName() );
+ request.setBaseDirectory( tempDir );
+ facade.configureInvocation( request, 0 );
+ assertEquals( tempDir, request.getBaseDirectory() );
+ assertEquals( tempPom, request.getPomFile() );
+
+ props.setProperty( "invoker.project", "" );
+ request.setBaseDirectory( tempDir );
+ facade.configureInvocation( request, 0 );
+ assertEquals( tempDir, request.getBaseDirectory() );
+ assertEquals( null, request.getPomFile() );
+
+ tempPom.delete();
+ }
+
+ public void testConfigureRequestMavenOpts()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setMavenOpts( "default" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( "default", request.getMavenOpts() );
+
+ props.setProperty( "invoker.mavenOpts", "-Xmx512m" );
+ facade.configureInvocation( request, 0 );
+ assertEquals( "-Xmx512m", request.getMavenOpts() );
+ }
+
+ public void testConfigureRequestFailureBehavior()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setReactorFailureBehavior( InvocationRequest.ReactorFailureBehavior.FailAtEnd );
+ facade.configureInvocation( request, 0 );
+ assertEquals( InvocationRequest.ReactorFailureBehavior.FailAtEnd, request.getReactorFailureBehavior() );
+
+ props.setProperty( "invoker.failureBehavior", InvocationRequest.ReactorFailureBehavior.FailNever.getLongOption() );
+ facade.configureInvocation( request, 0 );
+ assertEquals( "fail-never", request.getReactorFailureBehavior().getLongOption() );
+ }
+
+ public void testConfigureRequestRecursion()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setRecursive( true );
+ facade.configureInvocation( request, 0 );
+ assertTrue( request.isRecursive() );
+ request.setRecursive( false );
+ facade.configureInvocation( request, 0 );
+ assertFalse( request.isRecursive() );
+
+ props.setProperty( "invoker.nonRecursive", "true" );
+ facade.configureInvocation( request, 0 );
+ assertFalse( request.isRecursive() );
+
+ props.setProperty( "invoker.nonRecursive", "false" );
+ facade.configureInvocation( request, 0 );
+ assertTrue( request.isRecursive() );
+ }
+
+ public void testConfigureRequestOffline()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ request.setOffline( true );
+ facade.configureInvocation( request, 0 );
+ assertTrue( request.isOffline() );
+ request.setOffline( false );
+ facade.configureInvocation( request, 0 );
+ assertFalse( request.isOffline() );
+
+ props.setProperty( "invoker.offline", "true" );
+ facade.configureInvocation( request, 0 );
+ assertTrue( request.isOffline() );
+
+ props.setProperty( "invoker.offline", "false" );
+ facade.configureInvocation( request, 0 );
+ assertFalse( request.isOffline() );
+ }
+
+ public void testIsInvocationDefined()
+ throws Exception
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ assertFalse( facade.isInvocationDefined( 1 ) );
+
+ props.setProperty( "invoker.goals", "install" );
+ assertFalse( facade.isInvocationDefined( 1 ) );
+
+ props.setProperty( "invoker.goals.2", "install" );
+ assertFalse( facade.isInvocationDefined( 1 ) );
+ assertTrue( facade.isInvocationDefined( 2 ) );
+ assertFalse( facade.isInvocationDefined( 3 ) );
+ }
+
+ public void testIsSelectedDefined()
+ {
+ Properties props = new Properties();
+ InvokerProperties facade = new InvokerProperties( props );
+
+ assertFalse( facade.isSelectorDefined( 1 ) );
+
+ props.setProperty( "invoker.java.version", "1.6+" );
+ props.setProperty( "invoker.maven.version", "3.0+" );
+ props.setProperty( "invoker.os.family", "windows" );
+ assertFalse( facade.isSelectorDefined( 1 ) );
+
+ props.setProperty( "selector.2.java.version", "1.6+" );
+ props.setProperty( "selector.3.maven.version", "3.0+" );
+ props.setProperty( "selector.4.os.family", "windows" );
+ assertFalse( facade.isSelectorDefined( 1 ) );
+ assertTrue( facade.isSelectorDefined( 2 ) );
+ assertTrue( facade.isSelectorDefined( 3 ) );
+ assertTrue( facade.isSelectorDefined( 4 ) );
+ assertFalse( facade.isSelectorDefined( 5 ) );
+ }
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorTest.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorTest.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorTest.java Mon May 15 21:10:27 2017
@@ -0,0 +1,80 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.assertEquals;
+import java.util.Properties;
+
+import org.apache.maven.plugins.invoker.InvokerProperties;
+import org.apache.maven.plugins.invoker.Selector;
+import org.junit.Test;
+
+public class SelectorTest
+{
+ @Test
+ public void testGlobalMatch()
+ {
+ Selector selector = new Selector( "3.2.5", "1.7" );
+
+ Properties props = new Properties();
+ props.setProperty( "invoker.maven.version", "3.0+" );
+ InvokerProperties invokerProperties = new InvokerProperties( props );
+ assertEquals( 0, selector.getSelection( invokerProperties ) );
+ }
+
+ @Test
+ public void testSelectorMatch()
+ {
+ Selector selector = new Selector( "3.2.5", "1.7" );
+
+ Properties props = new Properties();
+ props.setProperty( "selector.1.maven.version", "3.0+" );
+ InvokerProperties invokerProperties = new InvokerProperties( props );
+ assertEquals( 0, selector.getSelection( invokerProperties ) );
+
+ props.setProperty( "selector.1.maven.version", "3.3.1+" );
+ assertEquals( Selector.SELECTOR_MULTI, selector.getSelection( invokerProperties ) );
+ }
+
+ @Test
+ public void testSelectorWithGlobalMatch()
+ {
+ Selector selector = new Selector( "3.2.5", "1.7" );
+
+ Properties props = new Properties();
+ // invoker.maven.version is used by all selectors
+ props.setProperty( "invoker.maven.version", "3.0+" );
+ props.setProperty( "selector.1.java.version", "1.4+" );
+ props.setProperty( "selector.2.os.family", "myos" );
+ InvokerProperties invokerProperties = new InvokerProperties( props );
+ assertEquals( 0, selector.getSelection( invokerProperties ) );
+
+ props.setProperty( "invoker.maven.version", "3.3.1+" );
+ assertEquals( Selector.SELECTOR_MULTI, selector.getSelection( invokerProperties ) );
+
+ props.setProperty( "invoker.maven.version", "3.0+" );
+ props.setProperty( "selector.1.maven.version", "3.3.1+" );
+ assertEquals( Selector.SELECTOR_MULTI, selector.getSelection( invokerProperties ) );
+
+ props.setProperty( "selector.2.os.family", "!myos" );
+ assertEquals( 0, selector.getSelection( invokerProperties ) );
+ }
+
+}
Added: maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorUtilsTest.java?rev=1795243&view=auto
==============================================================================
--- maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorUtilsTest.java (added)
+++ maven/plugins/trunk/maven-invoker-plugin/src/test/java/org/apache/maven/plugins/invoker/SelectorUtilsTest.java Mon May 15 21:10:27 2017
@@ -0,0 +1,92 @@
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.maven.plugins.invoker.SelectorUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link SelectorUtils}.
+ *
+ * @author Benjamin Bentmann
+ */
+public class SelectorUtilsTest
+ extends TestCase
+{
+
+ public void testParseList()
+ {
+ List<String> includes = new ArrayList<String>();
+ List<String> excludes = new ArrayList<String>();
+
+ SelectorUtils.parseList( null, includes, excludes );
+
+ SelectorUtils.parseList( " 1.5, !1.4, 1.6+ ", includes, excludes );
+ assertEquals( Arrays.asList( "1.5", "1.6+" ), includes );
+ assertEquals( Arrays.asList( "1.4" ), excludes );
+ }
+
+ public void testParseVersion()
+ {
+ assertEquals( Arrays.asList( 1, 6, 0, 12 ), SelectorUtils.parseVersion( "1.6.0_12" ) );
+
+ assertEquals( Arrays.asList( 1, 6, 0, 12 ), SelectorUtils.parseVersion( "1.6.0_12+" ) );
+ assertEquals( Arrays.asList( 1, 6, 0, 12 ), SelectorUtils.parseVersion( "1.6.0_12-" ) );
+ }
+
+ public void testCompareVersions()
+ {
+ assertTrue( SelectorUtils.compareVersions( Arrays.asList( 1, 6 ), Arrays.asList( 1, 6 ) ) == 0 );
+
+ assertTrue( SelectorUtils.compareVersions( Arrays.asList( 1, 5 ), Arrays.asList( 1, 6 ) ) < 0 );
+ assertTrue( SelectorUtils.compareVersions( Arrays.asList( 1, 6 ), Arrays.asList( 1, 5 ) ) > 0 );
+
+ assertTrue( SelectorUtils.compareVersions( Arrays.asList( 1 ), Arrays.asList( 1, 6 ) ) < 0 );
+ assertTrue( SelectorUtils.compareVersions( Arrays.asList( 1, 6 ), Arrays.asList( 1 ) ) > 0 );
+ }
+
+ public void testIsMatchingJre()
+ {
+
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 4, 2, 8 ), "1.5" ) );
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 5 ), "1.5" ) );
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 5, 9 ), "1.5" ) );
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 6 ), "1.5" ) );
+
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 4, 2, 8 ), "1.5+" ) );
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 5 ), "1.5+" ) );
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 5, 9 ), "1.5+" ) );
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 6 ), "1.5+" ) );
+
+ assertTrue( SelectorUtils.isJreVersion( Arrays.asList( 1, 4, 2, 8 ), "1.5-" ) );
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 5 ), "1.5-" ) );
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 5, 9 ), "1.5-" ) );
+ assertFalse( SelectorUtils.isJreVersion( Arrays.asList( 1, 6 ), "1.5-" ) );
+
+ assertTrue( SelectorUtils.isJreVersion( (String) null, "1.5" ) );
+ assertTrue( SelectorUtils.isJreVersion( "", "1.5" ) );
+ }
+
+}