blob: 87ec86d2d922053fa464abac8f2cc8e501800626 [file] [log] [blame]
package org.apache.maven.shared.runtime;
/*
* 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.net.URLClassLoader;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.invoker.InvocationResult;
import org.apache.maven.shared.test.plugin.BuildTool;
import org.apache.maven.shared.test.plugin.TestToolsException;
import org.codehaus.plexus.PlexusTestCase;
import com.sun.appserv.ClassLoaderUtil;
/**
* Tests <code>DefaultMavenRuntime</code>.
*
* @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
* @version $Id$
* @see DefaultMavenRuntime
*/
public class DefaultMavenRuntimeTest extends PlexusTestCase
{
// fields -----------------------------------------------------------------
private BuildTool buildTool;
private MavenRuntime mavenRuntime;
// TestCase methods -------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
protected void setUp() throws Exception
{
super.setUp();
buildTool = (BuildTool) lookup( BuildTool.ROLE );
mavenRuntime = (MavenRuntime) lookup( MavenRuntime.ROLE );
}
// getProjectProperties tests ---------------------------------------------
public void testGetProjectPropertiesWithDefaultPackageClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectPropertiesWithPackagedClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "a.PackagedClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectPropertiesWithSubPackagedClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "a.b.SubPackagedClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectPropertiesWithMultipleVersions()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectPropertiesWithMultipleVersionsReversed()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
}
public void testGetProjectPropertiesWithParentDelegation()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader1 );
close( classLoader2 );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectPropertiesWithChildDelegation()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
close( classLoader1 );
close( classLoader2 );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
}
// getProjectsProperties tests --------------------------------------------
public void testGetProjectsPropertiesWithSingleJar()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectsPropertiesWithMultipleJars()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testMultipleJars/project1/pom.xml" );
packageProject( "testMultipleJars/project2/pom.xml" );
packageProject( "testMultipleJars/project3/pom.xml" );
File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
close( classLoader );
assertMavenProjectProperties( new String[] {
"org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
}, properties );
}
public void testGetProjectsPropertiesWithMultipleVersions()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectsPropertiesWithMultipleVersionsReversed()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
close( classLoader );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
}
public void testGetProjectsPropertiesWithParentDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
}
public void testGetProjectsPropertiesWithChildDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
}
// getProject tests -------------------------------------------------------
public void testGetProjectWithDefaultPackageClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
}
public void testGetProjectWithPackagedClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "a.PackagedClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
}
public void testGetProjectWithSubPackagedClass()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
Class<?> klass = classLoader.loadClass( "a.b.SubPackagedClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
}
public void testGetProjectWithMultipleVersions()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
}
public void testGetProjectWithMultipleVersionsReversed()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", project );
}
public void testGetProjectWithParentDelegation()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader1 );
close( classLoader2 );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
}
public void testGetProjectWithChildDelegation()
throws TestToolsException, ClassNotFoundException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
MavenProject project = mavenRuntime.getProject( klass );
close( classLoader1 );
close( classLoader2 );
assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", project );
}
// getProjects tests ------------------------------------------------------
public void testGetProjectsWithSingleJar()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetProjectsWithMultipleJars()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testMultipleJars/project1/pom.xml" );
packageProject( "testMultipleJars/project2/pom.xml" );
packageProject( "testMultipleJars/project3/pom.xml" );
File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
close( classLoader );
assertMavenProjects( new String[] {
"org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
}, projects );
}
public void testGetProjectsWithMultipleVersions()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetProjectsWithMultipleVersionsReversed()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
}
public void testGetProjectsWithParentDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetProjectsWithChildDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
List<MavenProject> projects = mavenRuntime.getProjects( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
}
// getSortedProjects tests ------------------------------------------------
public void testGetSortedProjectsWithSingleJar()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
File jar = getPackage( "testSingleJar/pom.xml" );
URLClassLoader classLoader = newClassLoader( jar );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetSortedProjectsWithMultipleJars()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testMultipleJars/project1/pom.xml" );
packageProject( "testMultipleJars/project2/pom.xml" );
packageProject( "testMultipleJars/project3/pom.xml" );
File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
close( classLoader );
assertMavenProjects( new String[] {
"org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
"org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
}, projects );
}
public void testGetSortedProjectsWithDependentJars()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testDependentJars/pom.xml" );
File jar1 = getPackage( "testDependentJars/project1/pom.xml" );
File jar2 = getPackage( "testDependentJars/project2/pom.xml" );
File jar3 = getPackage( "testDependentJars/project3/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
close( classLoader );
assertMavenProjects( new String[] {
"org.apache.maven.shared.runtime.tests:testDependentJars3:1.0",
"org.apache.maven.shared.runtime.tests:testDependentJars1:1.0",
"org.apache.maven.shared.runtime.tests:testDependentJars2:1.0"
}, projects );
}
public void testGetSortedProjectsWithMultipleVersions()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetSortedProjectsWithMultipleVersionsReversed()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
close( classLoader );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
}
public void testGetSortedProjectsWithParentDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
}
public void testGetSortedProjectsWithChildDelegation()
throws TestToolsException, MavenRuntimeException, IOException
{
packageProject( "testSingleJar/pom.xml" );
packageProject( "testSingleJar2/pom.xml" );
File jar1 = getPackage( "testSingleJar/pom.xml" );
File jar2 = getPackage( "testSingleJar2/pom.xml" );
URLClassLoader classLoader1 = newClassLoader( jar1 );
URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader2 );
close( classLoader1 );
close( classLoader2 );
assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
}
// private methods --------------------------------------------------------
private void packageProject( String pomPath ) throws TestToolsException
{
File pom = getTestFile( "target/test-classes/", pomPath );
Properties properties = new Properties();
List<String> goals = Arrays.asList( new String[] { "clean", "package" } );
File log = new File( pom.getParentFile(), "build.log" );
InvocationResult result = buildTool.executeMaven( pom, properties, goals, log );
assertNull( "Error building test project", result.getExecutionException() );
assertEquals( "Error building test project", 0, result.getExitCode() );
}
private File getPackage( String pomPath )
{
File pom = getTestFile( "target/test-classes/", pomPath );
File target = new File( pom.getParentFile(), "target" );
File[] jars = target.listFiles( (FilenameFilter) new SuffixFileFilter( "jar" ) );
assertEquals( "Cannot find jar", 1, jars.length );
File jar = jars[0];
assertTrue( "Cannot find jar", jar.exists() && jar.isFile() );
return jar;
}
private URLClassLoader newClassLoader( File file ) throws MalformedURLException
{
return newClassLoader( file, null );
}
private URLClassLoader newClassLoader( File file, ClassLoader parent ) throws MalformedURLException
{
return newClassLoader( file, parent, false );
}
private URLClassLoader newClassLoader( File file, ClassLoader parent, boolean childDelegation )
throws MalformedURLException
{
return newClassLoader( new File[] { file }, parent, childDelegation );
}
private URLClassLoader newClassLoader( File[] files ) throws MalformedURLException
{
return newClassLoader( files, null );
}
private URLClassLoader newClassLoader( File[] files, ClassLoader parent ) throws MalformedURLException
{
return newClassLoader( files, parent, false );
}
private URLClassLoader newClassLoader( File[] files, ClassLoader parent, boolean childDelegation )
throws MalformedURLException
{
URL[] urls = new URL[files.length];
for ( int i = 0; i < files.length; i++ )
{
urls[i] = files[i].toURI().toURL();
}
return new DelegatingClassLoader( urls, parent, childDelegation );
}
private void close( URLClassLoader classLoader ) throws IOException
{
IOException[] exceptions = ClassLoaderUtil.releaseLoader( classLoader, new Vector<String>() );
if ( exceptions.length > 0 )
{
throw exceptions[0];
}
}
private void assertMavenProjectProperties( String id, List<MavenProjectProperties> propertiesList )
{
assertMavenProjectProperties( new String[] { id }, propertiesList );
}
private void assertMavenProjectProperties( String[] ids, List<MavenProjectProperties> propertiesList )
{
assertEquals( "Number of project properties", ids.length, propertiesList.size() );
for ( int i = 0; i < ids.length; i++ )
{
assertMavenProjectProperties( ids[i], propertiesList.get( i ) );
}
}
private void assertMavenProjectProperties( String id, MavenProjectProperties properties )
{
String[] tokens = id.split( ":" );
assertMavenProjectProperties( tokens[0], tokens[1], tokens[2], properties );
}
private void assertMavenProjectProperties( String groupId, String artifactId, String version,
MavenProjectProperties properties )
{
assertNotNull( "Project properties are null", properties );
assertEquals( "Group id", groupId, properties.getGroupId() );
assertEquals( "Artifact id", artifactId, properties.getArtifactId() );
assertEquals( "Version", version, properties.getVersion() );
}
private void assertMavenProjects( String id, List<MavenProject> projects )
{
assertMavenProjects( new String[] { id }, projects );
}
private void assertMavenProjects( String[] ids, List<MavenProject> projects )
{
assertEquals( "Number of projects", ids.length, projects.size() );
for ( int i = 0; i < ids.length; i++ )
{
assertMavenProject( ids[i], projects.get( i ) );
}
}
private void assertMavenProject( String id, MavenProject project )
{
String[] tokens = id.split( ":" );
assertMavenProject( tokens[0], tokens[1], tokens[2], project );
}
private void assertMavenProject( String groupId, String artifactId, String version, MavenProject project )
{
assertNotNull( "Project is null", project );
assertEquals( "Group id", groupId, project.getGroupId() );
assertEquals( "Artifact id", artifactId, project.getArtifactId() );
assertEquals( "Version", version, project.getVersion() );
}
}