1 package org.apache.maven.archiva.repository.project.filters;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
42
43
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
97
98
99
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
112 String evaluatedModelText = toModelText( filteredModel );
113
114
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 }