]> source.dussan.org Git - archiva.git/blob
fd82b345ab3a449d6d5d9dd52ddec67d3223ece7
[archiva.git] /
1 package org.apache.maven.archiva.repository.project.filters;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.maven.archiva.model.ArchivaProjectModel;
23 import org.apache.maven.archiva.model.ArchivaRepository;
24 import org.apache.maven.archiva.model.Dependency;
25 import org.apache.maven.archiva.repository.project.ProjectModelException;
26 import org.apache.maven.archiva.repository.project.ProjectModelReader;
27 import org.apache.maven.archiva.repository.project.ProjectModelResolver;
28 import org.apache.maven.archiva.repository.project.filters.EffectiveProjectModelBuilder;
29 import org.apache.maven.archiva.repository.project.readers.ProjectModel400Reader;
30 import org.apache.maven.archiva.repository.project.resolvers.RepositoryProjectResolver;
31 import org.codehaus.plexus.PlexusTestCase;
32
33 import java.io.File;
34 import java.util.Iterator;
35 import java.util.List;
36
37 /**
38  * EffectiveProjectModelBuilderTest 
39  *
40  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
41  * @version $Id$
42  */
43 public class EffectiveProjectModelBuilderTest
44     extends PlexusTestCase
45 {
46     private static final String DEFAULT_REPOSITORY = "src/test/repositories/default-repository";
47
48     private ArchivaProjectModel createArchivaProjectModel( String path )
49         throws ProjectModelException
50     {
51         ProjectModelReader reader = new ProjectModel400Reader();
52
53         File pomFile = new File( getBasedir(), path );
54
55         return reader.read( pomFile );
56     }
57
58     private ProjectModelResolver createDefaultRepositoryResolver()
59     {
60         File defaultRepoDir = new File( getBasedir(), DEFAULT_REPOSITORY );
61
62         ArchivaRepository repo = new ArchivaRepository( "defaultTestRepo", "Default Test Repo", "file://"
63             + defaultRepoDir.getAbsolutePath() );
64
65         RepositoryProjectResolver resolver = new RepositoryProjectResolver( repo );
66
67         return resolver;
68     }
69
70     public void testBuildEffectiveProject()
71         throws Exception
72     {
73         EffectiveProjectModelBuilder builder = new EffectiveProjectModelBuilder();
74         builder.addProjectModelResolver( createDefaultRepositoryResolver() );
75
76         ArchivaProjectModel startModel = createArchivaProjectModel( DEFAULT_REPOSITORY
77             + "/org/apache/maven/archiva/archiva-model/1.0-SNAPSHOT/archiva-model-1.0-SNAPSHOT.pom" );
78
79         ArchivaProjectModel effectiveModel = builder.buildEffectiveProjectModel( startModel );
80
81         ArchivaProjectModel expectedModel = createArchivaProjectModel( "src/test/effective-poms/"
82             + "/archiva-model-effective.pom" );
83
84         assertModel( expectedModel, effectiveModel );
85     }
86
87     private void assertModel( ArchivaProjectModel expectedModel, ArchivaProjectModel effectiveModel )
88     {
89         assertEquals( "Equivalent Models", expectedModel, effectiveModel );
90
91         assertContainsSame( "Individuals", expectedModel.getIndividuals(), effectiveModel.getIndividuals() );
92         dumpDependencyList( "Expected", expectedModel.getDependencies() );
93         dumpDependencyList( "Effective", effectiveModel.getDependencies() );
94         assertContainsSame( "Dependencies", expectedModel.getDependencies(), effectiveModel.getDependencies() );
95         assertContainsSame( "DependencyManagement", expectedModel.getDependencyManagement(), effectiveModel
96             .getDependencyManagement() );
97     }
98     
99     private void dumpDependencyList( String type, List deps )
100     {
101         System.out.println( ".\\ [" + type + "] Dependency List (size:" + deps.size() + ") \\.________________" );
102         Iterator it = deps.iterator();
103         while ( it.hasNext() )
104         {
105             Dependency dep = (Dependency) it.next();
106             System.out.println( "  " + toDependencyKey( dep ) );
107         }
108         System.out.println( "" );
109     }
110     
111     private String toDependencyKey( Dependency dep )
112     {
113         return "[" + dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getVersion() + ":" + dep.getClassifier()
114             + ":" + dep.getType() + "]";
115     }
116
117     private void assertContainsSame( String listId, List expectedList, List effectiveList )
118     {
119         if ( ( expectedList == null ) && ( effectiveList == null ) )
120         {
121             return;
122         }
123
124         if ( ( expectedList == null ) && ( effectiveList != null ) )
125         {
126             fail( "Effective [" + listId + "] List is instantiated, while expected List is null." );
127         }
128
129         if ( ( expectedList != null ) && ( effectiveList == null ) )
130         {
131             fail( "Effective [" + listId + "] List is null, while expected List is instantiated." );
132         }
133
134         assertEquals( "[" + listId + "] List Size", expectedList.size(), expectedList.size() );
135
136         Iterator it = expectedList.iterator();
137         while ( it.hasNext() )
138         {
139             Object o = it.next();
140             assertTrue( "Should exist in Effective [" + listId + "] list: " + o, effectiveList.contains( o ) );
141         }
142     }
143 }