Author: epunzalan Date: Wed Apr 12 00:30:54 2006 New Revision: 393405 URL: http://svn.apache.org/viewcvs?rev=393405&view=rev Log: PR: MPIR-43
Promoted inner class listener to a separate class so I can add unit tests for it. Also, disabled the other httpunit tests which fails. Added: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java Modified: maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml?rev=393405&r1=393404&r2=393405&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/pom.xml Wed Apr 12 00:30:54 2006 @@ -27,7 +27,11 @@ <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> - <skip>true</skip> + <excludes> + <exclude>**/Abstract*Test.java</exclude> + <exclude>**/Abstract*TestCase.java</exclude> + <exclude>**/*ReportTest.java</exclude> + </excludes> </configuration> </plugin> </plugins> Modified: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java?rev=393405&r1=393404&r2=393405&view=diff ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java (original) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java Wed Apr 12 00:30:54 2006 @@ -23,7 +23,6 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.artifact.resolver.ResolutionListener; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; import org.apache.maven.doxia.sink.Sink; @@ -572,248 +571,4 @@ } - private class ReportResolutionListener - implements ResolutionListener - { - private Map directDep = new HashMap(); - - private Map transitiveDep = new HashMap(); - - private Map replacedDep = new HashMap(); - - private List parents = new ArrayList(); - - private Map depTree = new HashMap(); - - private Map depMap = new HashMap(); - - private Map depthMap = new HashMap(); - - public void testArtifact( Artifact node ) - { - - } - - public void startProcessChildren( Artifact artifact ) - { - parents.add( artifact ); - } - - public void endProcessChildren( Artifact artifact ) - { - parents.remove( artifact ); - } - - public void includeArtifact( Artifact artifact ) - { - addToDepMap( artifact ); - - if ( depthMap.containsKey( artifact.getId() ) ) - { - Integer depth = (Integer) depthMap.get( artifact.getId() ); - if ( depth.intValue() <= parents.size() ) - { - return; - } - } - - //remove from tree the artifact which is farther down the dependency trail - removeFromDepTree( artifact ); - - depthMap.put( artifact.getId(), new Integer( parents.size() ) ); - - addDependency( artifact ); - - addToDepTree( artifact ); - } - - private void removeFromDepTree( Artifact artifact ) - { - for ( Iterator artifactDeps = depTree.values().iterator(); artifactDeps.hasNext(); ) - { - List depList = (List) artifactDeps.next(); - for ( Iterator artifacts = depList.iterator(); artifacts.hasNext(); ) - { - Artifact dep = (Artifact) artifacts.next(); - - if ( dep.getId().equals( artifact.getId() ) ) - { - depList.remove( dep ); - break; - } - } - } - } - - private void addToDepTree( Artifact artifact ) - { - if ( parents.size() > 0 ) - { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - if ( depTree.containsKey( parent.getId() ) ) - { - List deps = (List) depTree.get( parent.getId() ); - - deps.add( artifact ); - } - else - { - List deps = new ArrayList(); - deps.add( artifact ); - depTree.put( parent.getId(), deps ); - } - } - } - - private void addToDepMap( Artifact artifact ) - { - if ( parents.size() > 0 ) - { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - if ( depMap.containsKey( parent.getId() ) ) - { - List deps = (List) depMap.get( parent.getId() ); - - deps.add( artifact ); - } - else - { - List deps = new ArrayList(); - deps.add( artifact ); - depMap.put( parent.getId(), deps ); - } - } - } - - public void omitForNearer( Artifact omitted, Artifact kept ) - { - String key = omitted.getId(); - - replacedDep.put( key, omitted ); - - if ( directDep.containsKey( key ) ) - { - directDep.remove( key ); - } - else if ( transitiveDep.containsKey( key ) ) - { - transitiveDep.remove( key ); - } - - addDependency( kept ); - } - - private void addDependency( Artifact artifact ) - { - if ( parents.size() == 0 ) - { - //do nothing... artifact is current project - } - else if ( parents.size() == 1 ) - { - if ( !directDep.containsKey( artifact.getId() ) ) - { - if ( artifact.getScope() == null ) - { - artifact.setScope( Artifact.SCOPE_COMPILE ); - } - directDep.put( artifact.getId(), artifact ); - } - } - else - { - if ( !transitiveDep.containsKey( artifact.getId() ) ) - { - if ( artifact.getScope() == null ) - { - Artifact parent = (Artifact) parents.get( parents.size() - 1 ); - - artifact.setScope( parent.getScope() ); - } - - transitiveDep.put( artifact.getId(), artifact ); - } - } - } - - public void updateScope( Artifact artifact, String scope ) - { - if ( directDep.containsKey( artifact.getId() ) ) - { - Artifact depArtifact = (Artifact) directDep.get( artifact.getId() ); - - depArtifact.setScope( scope ); - } - - if ( transitiveDep.containsKey( artifact.getId() ) ) - { - Artifact depArtifact = (Artifact) transitiveDep.get( artifact.getId() ); - - depArtifact.setScope( scope ); - } - } - - public void manageArtifact( Artifact artifact, Artifact replacement ) - { - omitForNearer( artifact, replacement ); - } - - public void omitForCycle( Artifact artifact ) - { - replacedDep.put( artifact.getId(), artifact ); - } - - public void updateScopeCurrentPom( Artifact artifact, String scope ) - { - updateScope( artifact, scope ); - } - - public void selectVersionFromRange( Artifact artifact ) - { - - } - - public void restrictRange( Artifact artifact, Artifact replacement, VersionRange newRange ) - { - - } - - public Set getArtifacts() - { - Set all = new HashSet(); - - all.addAll( directDep.values() ); - - all.addAll( transitiveDep.values() ); - - return all; - } - - public Map getTransitiveDependencies() - { - return Collections.unmodifiableMap( transitiveDep ); - } - - public Map getDirectDependencies() - { - return Collections.unmodifiableMap( directDep ); - } - - public Map getOmittedArtifacts() - { - return Collections.unmodifiableMap( replacedDep ); - } - - public Map getDepTree() - { - return depTree; - } - - public Map getDepMap() - { - return depMap; - } - } } Added: maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java?rev=393405&view=auto ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java (added) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ReportResolutionListener.java Wed Apr 12 00:30:54 2006 @@ -0,0 +1,278 @@ +package org.apache.maven.report.projectinfo; + +/* + * Copyright 2004-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.apache.maven.artifact.resolver.ResolutionListener; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.versioning.VersionRange; + +import java.util.Map; +import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Set; +import java.util.HashSet; +import java.util.Collections; + +/** + * @author Edwin Punzalan + */ +public class ReportResolutionListener + implements ResolutionListener +{ + private Map directDep = new HashMap(); + + private Map transitiveDep = new HashMap(); + + private Map replacedDep = new HashMap(); + + private List parents = new ArrayList(); + + private Map depTree = new HashMap(); + + private Map depMap = new HashMap(); + + private Map depthMap = new HashMap(); + + public void testArtifact( Artifact node ) + { + + } + + public void startProcessChildren( Artifact artifact ) + { + parents.add( artifact ); + } + + public void endProcessChildren( Artifact artifact ) + { + parents.remove( artifact ); + } + + public void includeArtifact( Artifact artifact ) + { + addToDepMap( artifact ); + + if ( depthMap.containsKey( artifact.getId() ) ) + { + Integer depth = (Integer) depthMap.get( artifact.getId() ); + if ( depth.intValue() <= parents.size() ) + { + return; + } + } + + //remove from tree the artifact which is farther down the dependency trail + removeFromDepTree( artifact ); + + depthMap.put( artifact.getId(), new Integer( parents.size() ) ); + + addDependency( artifact ); + + addToDepTree( artifact ); + } + + private void removeFromDepTree( Artifact artifact ) + { + for ( Iterator artifactDeps = depTree.values().iterator(); artifactDeps.hasNext(); ) + { + List depList = (List) artifactDeps.next(); + for ( Iterator artifacts = depList.iterator(); artifacts.hasNext(); ) + { + Artifact dep = (Artifact) artifacts.next(); + + if ( dep.getId().equals( artifact.getId() ) ) + { + depList.remove( dep ); + break; + } + } + } + } + + private void addToDepTree( Artifact artifact ) + { + if ( parents.size() > 0 ) + { + Artifact parent = (Artifact) parents.get( parents.size() - 1 ); + + if ( depTree.containsKey( parent.getId() ) ) + { + List deps = (List) depTree.get( parent.getId() ); + + deps.add( artifact ); + } + else + { + List deps = new ArrayList(); + deps.add( artifact ); + depTree.put( parent.getId(), deps ); + } + } + } + + private void addToDepMap( Artifact artifact ) + { + if ( parents.size() > 0 ) + { + Artifact parent = (Artifact) parents.get( parents.size() - 1 ); + + if ( depMap.containsKey( parent.getId() ) ) + { + List deps = (List) depMap.get( parent.getId() ); + + deps.add( artifact ); + } + else + { + List deps = new ArrayList(); + deps.add( artifact ); + depMap.put( parent.getId(), deps ); + } + } + } + + public void omitForNearer( Artifact omitted, Artifact kept ) + { + String key = omitted.getId(); + + replacedDep.put( key, omitted ); + + if ( directDep.containsKey( key ) ) + { + directDep.remove( key ); + } + else if ( transitiveDep.containsKey( key ) ) + { + transitiveDep.remove( key ); + } + + addDependency( kept ); + } + + private void addDependency( Artifact artifact ) + { + if ( parents.size() == 0 ) + { + //do nothing... artifact is current project + } + else if ( parents.size() == 1 ) + { + if ( !directDep.containsKey( artifact.getId() ) ) + { + if ( artifact.getScope() == null ) + { + artifact.setScope( Artifact.SCOPE_COMPILE ); + } + directDep.put( artifact.getId(), artifact ); + } + } + else + { + if ( !transitiveDep.containsKey( artifact.getId() ) ) + { + if ( artifact.getScope() == null ) + { + Artifact parent = (Artifact) parents.get( parents.size() - 1 ); + + artifact.setScope( parent.getScope() ); + } + + transitiveDep.put( artifact.getId(), artifact ); + } + } + } + + public void updateScope( Artifact artifact, String scope ) + { + if ( directDep.containsKey( artifact.getId() ) ) + { + Artifact depArtifact = (Artifact) directDep.get( artifact.getId() ); + + depArtifact.setScope( scope ); + } + + if ( transitiveDep.containsKey( artifact.getId() ) ) + { + Artifact depArtifact = (Artifact) transitiveDep.get( artifact.getId() ); + + depArtifact.setScope( scope ); + } + } + + public void manageArtifact( Artifact artifact, Artifact replacement ) + { + omitForNearer( artifact, replacement ); + } + + public void omitForCycle( Artifact artifact ) + { + replacedDep.put( artifact.getId(), artifact ); + } + + public void updateScopeCurrentPom( Artifact artifact, String scope ) + { + updateScope( artifact, scope ); + } + + public void selectVersionFromRange( Artifact artifact ) + { + + } + + public void restrictRange( Artifact artifact, Artifact replacement, VersionRange newRange ) + { + + } + + public Set getArtifacts() + { + Set all = new HashSet(); + + all.addAll( directDep.values() ); + + all.addAll( transitiveDep.values() ); + + return all; + } + + public Map getTransitiveDependencies() + { + return Collections.unmodifiableMap( transitiveDep ); + } + + public Map getDirectDependencies() + { + return Collections.unmodifiableMap( directDep ); + } + + public Map getOmittedArtifacts() + { + return Collections.unmodifiableMap( replacedDep ); + } + + public Map getDepTree() + { + return depTree; + } + + public Map getDepMap() + { + return depMap; + } +} Added: maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java?rev=393405&view=auto ============================================================================== --- maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java (added) +++ maven/plugins/trunk/maven-project-info-reports-plugin/src/test/java/org/apache/maven/report/projectinfo/ReportResolutionListenerTest.java Wed Apr 12 00:30:54 2006 @@ -0,0 +1,308 @@ +package org.apache.maven.report.projectinfo; + +/* + * Copyright 2004-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import junit.framework.TestCase; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.apache.maven.artifact.versioning.VersionRange; + +import java.util.Set; +import java.util.Map; +import java.util.List; + +/** + * @author Edwin Punzalan + */ +public class ReportResolutionListenerTest + extends TestCase +{ + private ReportResolutionListener listener; + + public void testSimpleDependencyTree() + { + Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + + listener.startProcessChildren( projectArtifact ); + + Artifact depArtifact01 = createArtifact( "test-dep", "dependency-one", "1.0" ); + listener.includeArtifact( depArtifact01 ); + + Artifact depArtifact02 = createArtifact( "test-dep", "dependency-two", "1.0" ); + listener.includeArtifact( depArtifact02 ); + + Artifact depArtifact03 = createArtifact( "test-dep", "dependency-three", "1.0" ); + listener.includeArtifact( depArtifact03 ); + + listener.endProcessChildren( projectArtifact ); + + Set artifacts = listener.getArtifacts(); + assertEquals( "Test total artifacts", 3, artifacts.size() ); + assertTrue( "Test dependency one", artifacts.contains( depArtifact01 ) ); + assertTrue( "Test dependency two", artifacts.contains( depArtifact02 ) ); + assertTrue( "Test dependency three", artifacts.contains( depArtifact03 ) ); + + Map depMap = listener.getDepMap(); + assertEquals( "Test total artifacts in dependency map", 1, depMap.size() ); + assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); + List dependencies = (List) depMap.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact03 ) ); + + Map depTree = listener.getDepTree(); + assertEquals( "Test total artifacts in dependency map", 1, depTree.size() ); + assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); + dependencies = (List) depTree.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact03 ) ); + + Map directDeps = listener.getDirectDependencies(); + assertEquals( "Test total direct dependencies", 3, directDeps.size() ); + assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact01 ) ); + assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact02 ) ); + assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact03 ) ); + + Map omittedDeps = listener.getOmittedArtifacts(); + assertEquals( "Test total omitted dependencies", 0, omittedDeps.size() ); + + Map transDeps = listener.getTransitiveDependencies(); + assertEquals( "Test total transitive dependencies", 0, transDeps.size() ); + } + + public void testSimpleDepTreeWithTransitiveDeps() + { + Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + + listener.startProcessChildren( projectArtifact ); + + Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "1.0" ); + listener.includeArtifact( depArtifact1 ); + + listener.startProcessChildren( depArtifact1 ); + + Artifact depArtifact01 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); + listener.includeArtifact( depArtifact01 ); + + Artifact depArtifact02 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); + listener.includeArtifact( depArtifact02 ); + + listener.endProcessChildren( depArtifact1 ); + + + Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "1.0" ); + listener.includeArtifact( depArtifact2 ); + + Artifact depArtifact3 = createArtifact( "test-dep", "dependency-three", "1.0" ); + listener.includeArtifact( depArtifact3 ); + + listener.endProcessChildren( projectArtifact ); + + Set artifacts = listener.getArtifacts(); + assertEquals( "Test total artifacts", 5, artifacts.size() ); + assertTrue( "Test dependency one", artifacts.contains( depArtifact1 ) ); + assertTrue( "Test dependency two", artifacts.contains( depArtifact2 ) ); + assertTrue( "Test dependency three", artifacts.contains( depArtifact3 ) ); + assertTrue( "Test dependency four", artifacts.contains( depArtifact01 ) ); + assertTrue( "Test dependency five", artifacts.contains( depArtifact02 ) ); + + Map depMap = listener.getDepMap(); + assertEquals( "Test total artifacts in dependency map", 2, depMap.size() ); + assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); + List dependencies = (List) depMap.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); + assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); + dependencies = (List) depMap.get( depArtifact1.getId() ); + assertEquals( "Test dependency total", 2, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); + + Map depTree = listener.getDepTree(); + assertEquals( "Test total artifacts in dependency map", 2, depTree.size() ); + assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); + dependencies = (List) depTree.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); + assertTrue( "Test dependency map key", depTree.containsKey( depArtifact1.getId() ) ); + dependencies = (List) depTree.get( depArtifact1.getId() ); + assertEquals( "Test dependency total", 2, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact01 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact02 ) ); + + Map directDeps = listener.getDirectDependencies(); + assertEquals( "Test total direct dependencies", 3, directDeps.size() ); + assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact1 ) ); + assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact2 ) ); + assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact3 ) ); + + Map omittedDeps = listener.getOmittedArtifacts(); + assertEquals( "Test total omitted dependencies", 0, omittedDeps.size() ); + + Map transDeps = listener.getTransitiveDependencies(); + assertEquals( "Test total transitive dependencies", 2, transDeps.size() ); + assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact01 ) ); + assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact02 ) ); + } + + public void testComplexDependencyTree() + { + Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" ); + + listener.startProcessChildren( projectArtifact ); + + Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "1.0", Artifact.SCOPE_COMPILE ); + listener.includeArtifact( depArtifact1 ); + + listener.startProcessChildren( depArtifact1 ); + + Artifact depArtifact11 = createArtifact( "test-dep", "dependency-zero-one", "1.0" ); + listener.includeArtifact( depArtifact11 ); + + Artifact depArtifact12 = createArtifact( "test-dep", "dependency-zero-two", "1.0" ); + listener.includeArtifact( depArtifact12 ); + + listener.startProcessChildren( depArtifact12 ); + + Artifact depArtifact121 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); + listener.includeArtifact( depArtifact121 ); + + listener.endProcessChildren( depArtifact12 ); + + listener.endProcessChildren( depArtifact1 ); + + + Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "1.0", Artifact.SCOPE_TEST ); + listener.includeArtifact( depArtifact2 ); + + listener.startProcessChildren( depArtifact2 ); + + Artifact depArtifact21 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" ); + listener.includeArtifact( depArtifact21 ); + listener.omitForNearer( depArtifact121, depArtifact21 ); + listener.updateScope( depArtifact121, Artifact.SCOPE_TEST ); + + listener.endProcessChildren( depArtifact2 ); + + Artifact depArtifact3 = createArtifact( "test-dep", "dependency-three", "1.0", Artifact.SCOPE_COMPILE ); + listener.includeArtifact( depArtifact3 ); + + listener.endProcessChildren( projectArtifact ); + + Set artifacts = listener.getArtifacts(); + assertEquals( "Test total artifacts", 6, artifacts.size() ); + assertTrue( "Test dependency one", artifacts.contains( depArtifact1 ) ); + assertTrue( "Test dependency two", artifacts.contains( depArtifact2 ) ); + assertTrue( "Test dependency three", artifacts.contains( depArtifact3 ) ); + assertTrue( "Test dependency four", artifacts.contains( depArtifact11 ) ); + assertTrue( "Test dependency five", artifacts.contains( depArtifact12 ) ); + assertTrue( "Test dependency six", artifacts.contains( depArtifact21 ) ); + + Map depMap = listener.getDepMap(); + assertEquals( "Test total artifacts in dependency map", 4, depMap.size() ); + assertTrue( "Test dependency map key", depMap.containsKey( projectArtifact.getId() ) ); + List dependencies = (List) depMap.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); + assertTrue( "Test dependency map key", depMap.containsKey( depArtifact1.getId() ) ); + dependencies = (List) depMap.get( depArtifact1.getId() ); + assertEquals( "Test dependency total", 2, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact11 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact12 ) ); + assertTrue( "Test dependency map key", depMap.containsKey( depArtifact12.getId() ) ); + dependencies = (List) depMap.get( depArtifact12.getId() ); + assertEquals( "Test dependency total", 1, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact121 ) ); + assertTrue( "Test dependency map key", depMap.containsKey( depArtifact2.getId() ) ); + dependencies = (List) depMap.get( depArtifact2.getId() ); + assertEquals( "Test dependency total", 1, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact21 ) ); + + Map depTree = listener.getDepTree(); + assertEquals( "Test total artifacts in dependency map", 4, depTree.size() ); + assertTrue( "Test dependency map key", depTree.containsKey( projectArtifact.getId() ) ); + dependencies = (List) depTree.get( projectArtifact.getId() ); + assertEquals( "Test dependency total", 3, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact1 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact2 ) ); + assertTrue( "Test dependency content 3", dependencies.contains( depArtifact3 ) ); + assertTrue( "Test dependency map key", depTree.containsKey( depArtifact1.getId() ) ); + dependencies = (List) depTree.get( depArtifact1.getId() ); + assertEquals( "Test dependency total", 2, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact11 ) ); + assertTrue( "Test dependency content 2", dependencies.contains( depArtifact12 ) ); + assertTrue( "Test dependency map key", depTree.containsKey( depArtifact12.getId() ) ); + dependencies = (List) depTree.get( depArtifact12.getId() ); + assertEquals( "Test dependency total", 0, dependencies.size() ); + assertTrue( "Test dependency map key", depTree.containsKey( depArtifact2.getId() ) ); + dependencies = (List) depTree.get( depArtifact2.getId() ); + assertEquals( "Test dependency total", 1, dependencies.size() ); + assertTrue( "Test dependency content 1", dependencies.contains( depArtifact21 ) ); + + Map directDeps = listener.getDirectDependencies(); + assertEquals( "Test total direct dependencies", 3, directDeps.size() ); + assertTrue( "Test dependency content 1", directDeps.containsValue( depArtifact1 ) ); + assertTrue( "Test dependency content 2", directDeps.containsValue( depArtifact2 ) ); + assertTrue( "Test dependency content 3", directDeps.containsValue( depArtifact3 ) ); + + Map omittedDeps = listener.getOmittedArtifacts(); + assertEquals( "Test total omitted dependencies", 1, omittedDeps.size() ); + + Map transDeps = listener.getTransitiveDependencies(); + assertEquals( "Test total transitive dependencies", 3, transDeps.size() ); + assertTrue( "Test transitive dependency 1", transDeps.containsValue( depArtifact11 ) ); + assertTrue( "Test transitive dependency 2", transDeps.containsValue( depArtifact12 ) ); + assertTrue( "Test transitive dependency 3", transDeps.containsValue( depArtifact21 ) ); + } + + private Artifact createArtifact( String groupId, String artifactId, String version ) + { + return createArtifact( groupId, artifactId, version, null ); + } + + private Artifact createArtifact( String groupId, String artifactId, String version, String scope ) + { + VersionRange versionRange = VersionRange.createFromVersion( version ); + + Artifact artifact = new DefaultArtifact( groupId, artifactId, versionRange, scope, + "jar", null, new DefaultArtifactHandler(), false ); + + return artifact; + } + + protected void setUp() + throws Exception + { + listener = new ReportResolutionListener(); + } + + protected void tearDown() + throws Exception + { + listener = null; + } +}