View Javadoc

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.Dependency;
24  import org.apache.maven.archiva.repository.project.ProjectModelException;
25  import org.apache.maven.archiva.repository.project.ProjectModelFilter;
26  import org.apache.maven.archiva.repository.project.ProjectModelReader;
27  import org.apache.maven.archiva.repository.project.ProjectModelWriter;
28  import org.apache.maven.archiva.repository.project.readers.ProjectModel400Reader;
29  import org.apache.maven.archiva.repository.project.writers.ProjectModel400Writer;
30  import org.apache.maven.archiva.xml.XMLException;
31  import org.codehaus.plexus.spring.PlexusInSpringTestCase;
32  
33  import java.io.File;
34  import java.io.IOException;
35  import java.io.StringWriter;
36  import java.util.ArrayList;
37  import java.util.Iterator;
38  import java.util.List;
39  
40  /**
41   * ProjectModelExpressionExpanderTest 
42   *
43   * @version $Id: ProjectModelExpressionExpanderTest.java 751932 2009-03-10 01:09:34Z brett $
44   */
45  public class ProjectModelExpressionExpanderTest
46      extends PlexusInSpringTestCase
47  {
48      private static final String DEFAULT_REPOSITORY = "src/test/repositories/default-repository";
49  
50      private ProjectModelExpressionFilter lookupExpression()
51          throws Exception
52      {
53          return (ProjectModelExpressionFilter) lookup( ProjectModelFilter.class, "expression" );
54      }
55  
56      public void testExpressionEvaluation()
57          throws Exception
58      {
59          ArchivaProjectModel model = new ArchivaProjectModel();
60          model.setGroupId( "org.apache.maven.archiva" );
61          model.setArtifactId( "archiva-test-project" );
62          model.setVersion( "1.0-SNAPSHOT" );
63  
64          List<Dependency> deps = new ArrayList<Dependency>();
65  
66          deps.add( createDependency( "org.apache.maven.archiva", "archiva-model", "${archiva.version}" ) );
67          deps.add( createDependency( "org.apache.maven.archiva", "archiva-common", "${archiva.version}" ) );
68          deps.add( createDependency( "org.apache.maven.archiva", "archiva-indexer", "${archiva.version}" ) );
69  
70          model.setDependencies( deps );
71  
72          model.addProperty( "archiva.version", "1.0-SNAPSHOT" );
73  
74          ProjectModelExpressionFilter filter = lookupExpression();
75  
76          model = filter.filter( model );
77  
78          assertNotNull( model );
79          assertEquals( "Group ID", "org.apache.maven.archiva", model.getGroupId() );
80          assertEquals( "Artifact ID", "archiva-test-project", model.getArtifactId() );
81          assertEquals( "Version", "1.0-SNAPSHOT", model.getVersion() );
82          assertNotNull( "Dependencies", model.getDependencies() );
83          assertEquals( "Dependencies Size", 3, model.getDependencies().size() );
84  
85          Iterator<Dependency> it = model.getDependencies().iterator();
86          while ( it.hasNext() )
87          {
88              Dependency dep = it.next();
89              assertEquals( "Dependency [" + dep.getArtifactId() + "] Group ID", "org.apache.maven.archiva", dep
90                  .getGroupId() );
91              assertEquals( "Dependency [" + dep.getArtifactId() + "] Version", "1.0-SNAPSHOT", dep.getVersion() );
92          }
93      }
94      
95      /**
96       * [MRM-487] pom version is not resolved
97       * [MRM-488] properties in pom are not resolved (at least while browsing)
98       * 
99       * This is to ensure that any expression within the pom is evaluated properly.
100      */
101     public void testExpressionHell()
102         throws Exception
103     {
104         ProjectModelExpressionFilter filter = lookupExpression();
105 
106         ArchivaProjectModel initialModel = createArchivaProjectModel( DEFAULT_REPOSITORY
107             + "/org/apache/maven/test/2.0.4-SNAPSHOT/test-2.0.4-SNAPSHOT.pom" );
108 
109         ArchivaProjectModel filteredModel = filter.filter( initialModel );
110 
111         // Dump the evaluated model to xml
112         String evaluatedModelText = toModelText( filteredModel );
113 
114         // Test xml buffer for the existance of an unevaluated expression.
115         boolean foundUnevaluated = false;
116         if ( evaluatedModelText.indexOf( "${" ) != ( -1 ) )
117         {
118             System.err.println( "Found Expression:\n" + evaluatedModelText );
119             foundUnevaluated = true;
120         }
121         
122         if ( foundUnevaluated )
123         {
124             fail( "Found Unevaluated Expression. (see System.err for details)" );
125         }
126     }
127 
128     private String toModelText( ArchivaProjectModel model )
129         throws ProjectModelException, IOException
130     {
131         StringWriter strWriter = new StringWriter();
132 
133         ProjectModelWriter modelWriter = new ProjectModel400Writer();
134         modelWriter.write( model, strWriter );
135 
136         return strWriter.toString();
137     }
138 
139     private ArchivaProjectModel createArchivaProjectModel( String path )
140         throws XMLException
141     {
142         ProjectModelReader reader = new ProjectModel400Reader();
143 
144         File pomFile = new File( getBasedir(), path );
145 
146         return reader.read( pomFile );
147     }
148 
149     private Dependency createDependency( String groupId, String artifactId, String version )
150     {
151         Dependency dep = new Dependency();
152 
153         dep.setGroupId( groupId );
154         dep.setArtifactId( artifactId );
155         dep.setVersion( version );
156         dep.setTransitive( false );
157 
158         return dep;
159     }
160 
161 }