blob: 28d191765478b958c888c5da1a82f675aa4e6b6e [file] [log] [blame]
package org.apache.netbeans.nbm;
/*
* 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.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.logging.SystemStreamLog;
import org.apache.maven.shared.dependency.graph.DependencyNode;
import org.apache.maven.shared.dependency.graph.internal.DefaultDependencyNode;
import org.apache.netbeans.nbm.model.Dependency;
import org.apache.netbeans.nbm.model.NetBeansModule;
import org.apache.netbeans.nbm.utils.ExamineManifest;
/**
*
* @author mkleint
*/
public class AbstractNbmMojoTest extends TestCase
{
Log log = null;
DefaultDependencyNode treeRoot = null;
public AbstractNbmMojoTest( String testName )
{
super( testName );
}
@Override
protected void setUp() throws Exception
{
super.setUp();
log = new SystemStreamLog();
treeRoot = createNode( null, "root", "root", "1.0", "jar", "", true, new ArrayList<Artifact>(), new HashMap<Artifact, ExamineManifest>() );
}
@Override
protected void tearDown() throws Exception
{
super.tearDown();
}
/**
* Test of matchesLibrary method, of class AbstractNbmMojo.
*/
public void testMatchesLibrary()
{
System.out.println( "matchesLibrary" );
Artifact artifact = createArtifact( "group", "artifact", "1.0", "jar", "compile" );
List<String> libraries = new ArrayList<String>();
libraries.add( "group:artifact" );
ExamineManifest depExaminator = createNonModule();
boolean result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertTrue( "explicitly defined libraries in descriptor are included", result );
artifact = createArtifact( "group", "artifact", "1.0", "jar", "provided" );
libraries = new ArrayList<String>();
result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertFalse( "provided artifacts are not included", result );
artifact = createArtifact( "group", "artifact", "1.0", "jar", "system" );
libraries = new ArrayList<String>();
result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertFalse( "system artifacts are not included", result );
artifact = createArtifact( "group", "artifact", "1.0", "jar", "compile" );
libraries = new ArrayList<String>();
libraries.add( "group:artifact" );
depExaminator = createModule();
result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertTrue( "netbeans modules are included if explicitly marked in descriptor", result );
libraries = new ArrayList<String>();
result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertFalse( "netbeans modules are omitted", result );
artifact = createArtifact( "group", "artifact", "1.0", "nbm", "compile" );
libraries = new ArrayList<String>();
result = AbstractNbmMojo.matchesLibrary( artifact, libraries, depExaminator, log, false );
assertFalse( "netbeans modules are omitted", result );
}
/**
* Test of resolveNetBeansDependency method, of class AbstractNbmMojo.
*/
public void testResolveNetBeansDependency()
{
Artifact artifact = createArtifact( "group", "artifact", "1.0", "jar", "compile" );
List<Dependency> deps = new ArrayList<Dependency>();
ExamineManifest manifest = createNonModule();
Dependency result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertNull( "not a NetBeans module", result );
manifest = createModule();
result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertNotNull( "is a NetBeans module", result );
artifact = createArtifact( "group", "artifact", "1.0", "nbm", "compile" );
manifest = createNonModule();
result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertNotNull( "nbm type is a NetBeans module", result );
artifact = createArtifact( "group", "artifact", "1.0", "jar", "compile" );
deps = new ArrayList<Dependency>();
Dependency d = new Dependency();
d.setId( "group:artifact" );
deps.add( d );
manifest = createNonModule();
result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertNull( "not a NetBeans module, declared in deps but without explicit value", result );
d.setExplicitValue( "XXX > 1.0" );
result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertEquals( "not a NetBeans module but declared with explicit value", result, d );
d.setExplicitValue( null );
manifest = createModule();
result = AbstractNbmMojo.resolveNetBeansDependency( artifact, deps, manifest, log );
assertEquals( "netbeans module defined in descriptor", result, d );
}
/**
* Module is not a library
*
* @throws java.lang.Exception if AbstractNbmMojo.getLibraryArtifacts fail
*/
public void testGetLibraryArtifacts1() throws Exception
{
System.out.println( "getLibraryArtifacts1" );
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
List<Artifact> runtimes = new ArrayList<Artifact>();
DependencyNode module = createNode( treeRoot, "gr1", "ar1", "1.0", "jar", "compile", true, runtimes, examinerCache );
treeRoot.setChildren( Collections.singletonList( module ) );
NetBeansModule mdl = new NetBeansModule();
List<Artifact> result = AbstractNbmMojo.getLibraryArtifacts( treeRoot, mdl, runtimes, examinerCache, log, false );
assertEquals( 0, result.size() );
}
/**
* direct dependency is a library
*
* @throws java.lang.Exception if AbstractNbmMojo.getLibraryArtifacts fail
*/
public void testGetLibraryArtifact2() throws Exception
{
System.out.println( "getLibraryArtifacts2" );
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
List<Artifact> runtimes = new ArrayList<Artifact>();
DependencyNode library = createNode( treeRoot, "gr1", "ar1", "1.0", "jar", "compile", false, runtimes, examinerCache );
treeRoot.setChildren( Collections.singletonList( library ) );
NetBeansModule mdl = new NetBeansModule();
List<Artifact> result = AbstractNbmMojo.getLibraryArtifacts( treeRoot, mdl, runtimes, examinerCache, log, false );
assertEquals( 1, result.size() );
}
/**
* transitive dependency gets included as well.
*
* @throws java.lang.Exception if AbstractNbmMojo.getLibraryArtifacts fail
*/
public void testGetLibraryArtifact3() throws Exception
{
System.out.println( "getLibraryArtifacts3" );
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
List<Artifact> runtimes = new ArrayList<Artifact>();
DependencyNode library = createNode( treeRoot, "gr1", "ar1", "1.0", "jar", "compile", false, runtimes, examinerCache );
treeRoot.setChildren( Collections.singletonList( library ) );
DependencyNode translibrary = createNode( library, "gr2", "ar2", "1.0", "jar", "runtime", false, runtimes, examinerCache );
( (DefaultDependencyNode) library ).setChildren( Collections.singletonList( translibrary ) );
NetBeansModule mdl = new NetBeansModule();
List<Artifact> result = AbstractNbmMojo.getLibraryArtifacts( treeRoot, mdl, runtimes, examinerCache, log, false );
assertEquals( 2, result.size() );
}
/**
* transitive dependency of a module doesn't get included as library
*
* @throws java.lang.Exception if AbstractNbmMojo.getLibraryArtifacts fail
*/
public void testGetLibraryArtifact4() throws Exception
{
System.out.println( "getLibraryArtifacts4" );
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
List<Artifact> runtimes = new ArrayList<Artifact>();
DependencyNode module = createNode( treeRoot, "gr1", "ar1", "1.0", "jar", "compile", true, runtimes, examinerCache );
treeRoot.setChildren( Collections.singletonList( module ) );
DependencyNode translibrary = createNode( module, "gr2", "ar2", "1.0", "jar", "runtime", false, runtimes, examinerCache );
( (DefaultDependencyNode) module ).setChildren( Collections.singletonList( translibrary ) );
NetBeansModule mdl = new NetBeansModule();
List<Artifact> result = AbstractNbmMojo.getLibraryArtifacts( treeRoot, mdl, runtimes, examinerCache, log, false );
assertEquals( 0, result.size() );
}
/**
* transitive dependency of a library is a duplicate of a transitive dependency of a module -&gt;doesn't get
* included.
*
* @throws java.lang.Exception if AbstractNbmMojo.getLibraryArtifacts fail
*/
public void testGetLibraryArtifact5() throws Exception
{
System.out.println( "getLibraryArtifacts5" );
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
List<Artifact> runtimes = new ArrayList<Artifact>();
DependencyNode module = createNode( treeRoot, "gr1", "ar1", "1.0", "jar", "compile", true, runtimes, examinerCache );
DependencyNode translibrary = createNode( module, "gr2", "ar2", "1.0", "jar", "runtime", false, runtimes, examinerCache );
( (DefaultDependencyNode) module ).setChildren( Collections.singletonList( translibrary ) );
DependencyNode library = createNode( treeRoot, "gr3", "ar3", "1.0", "jar", "compile", false, runtimes, examinerCache );
DependencyNode translibrary2 = createNode( library, "gr4", "ar4", "1.0", "jar", "runtime", false, runtimes, examinerCache );
( (DefaultDependencyNode) library ).setChildren( Collections.singletonList( translibrary2 ) );
treeRoot.setChildren( Arrays.asList( new DependencyNode[]
{
module, library
} ) );
NetBeansModule mdl = new NetBeansModule();
List<Artifact> result = AbstractNbmMojo.getLibraryArtifacts( treeRoot, mdl, runtimes, examinerCache, log, false );
assertEquals( 2, result.size() );
assertEquals( result.get( 0 ).getId(), library.getArtifact().getId() );
assertEquals( result.get( 1 ).getId(), translibrary2.getArtifact().getId() );
}
private DefaultDependencyNode createNode( DependencyNode parent, String gr, String art, String ver, String pack, String scope, boolean isModule, List<Artifact> runtimes, Map<Artifact, ExamineManifest> cache )
{
Artifact a = createArtifact( gr, art, ver, pack, scope );
DefaultDependencyNode nd = new DefaultDependencyNode( parent, a, ver, scope, ver );
ExamineManifest manifest = isModule ? createModule() : createNonModule();
runtimes.add( a );
cache.put( a, manifest );
nd.setChildren( Collections.<DependencyNode>emptyList() );
return nd;
}
// private DependencyNode createNode(Artifact a, int state) {
// DependencyNode nd = new DefaultDependencyNode(a, state, a);
// return nd;
// }
private Artifact createArtifact( String gr, String art, String ver, String pack, String scope )
{
VersionRange rng = VersionRange.createFromVersion( ver );
Artifact a = new DefaultArtifact( gr, art, rng, scope, pack, "classifier", null );
a.setDependencyTrail( Collections.EMPTY_LIST );
a.setFile( new File( gr + File.separator + art + File.separator + art + "-" + ver + ".jar" ) );
return a;
}
private ExamineManifest createNonModule()
{
ExamineManifest manifest = new ExamineManifest( log );
manifest.setNetBeansModule( false );
return manifest;
}
private ExamineManifest createModule()
{
ExamineManifest manifest = new ExamineManifest( log );
manifest.setNetBeansModule( true );
return manifest;
}
}