1 package org.apache.maven.archetype.ui;
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.archetype.ArchetypeGenerationRequest;
23 import org.apache.maven.archetype.catalog.Archetype;
24 import org.apache.maven.archetype.common.ArchetypeDefinition;
25 import org.apache.maven.archetype.exception.ArchetypeNotDefined;
26 import org.apache.maven.archetype.exception.ArchetypeSelectionFailure;
27 import org.apache.maven.archetype.exception.UnknownArchetype;
28 import org.apache.maven.archetype.exception.UnknownGroup;
29 import org.codehaus.plexus.PlexusTestCase;
30 import org.codehaus.plexus.components.interactivity.PrompterException;
31 import org.easymock.AbstractMatcher;
32 import org.easymock.ArgumentsMatcher;
33 import org.easymock.MockControl;
34
35 import java.io.IOException;
36 import java.util.Collections;
37 import java.util.Map;
38
39 public class DefaultArchetypeSelectorTest
40 extends PlexusTestCase
41 {
42 private DefaultArchetypeSelector selector;
43
44 public void setUp()
45 throws Exception
46 {
47 super.setUp();
48
49 selector = (DefaultArchetypeSelector) lookup( ArchetypeSelector.ROLE );
50 }
51
52 public void testArchetypeCoordinatesInRequest()
53 throws PrompterException, IOException, UnknownGroup, ArchetypeSelectionFailure, UnknownArchetype,
54 ArchetypeNotDefined
55 {
56 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
57 request.setArchetypeArtifactId( "preset-artifactId" );
58 request.setArchetypeGroupId( "preset-groupId" );
59 request.setArchetypeVersion( "preset-version" );
60
61 MockControl control = MockControl.createControl( ArchetypeSelectionQueryer.class );
62
63 ArchetypeSelectionQueryer queryer = (ArchetypeSelectionQueryer) control.getMock();
64
65
66 control.replay();
67
68 selector.setArchetypeSelectionQueryer( queryer );
69
70 selector.selectArchetype( request, Boolean.TRUE, "" );
71
72 control.verify();
73
74 assertEquals( "preset-groupId", request.getArchetypeGroupId() );
75 assertEquals( "preset-artifactId", request.getArchetypeArtifactId() );
76 assertEquals( "preset-version", request.getArchetypeVersion() );
77 }
78
79 public void testArchetypeArtifactIdInRequest()
80 throws PrompterException, IOException, UnknownGroup, ArchetypeSelectionFailure, UnknownArchetype,
81 ArchetypeNotDefined
82 {
83 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
84 request.setArchetypeArtifactId( "preset-artifactId" );
85
86 MockControl control = MockControl.createControl( ArchetypeSelectionQueryer.class );
87
88 ArchetypeSelectionQueryer queryer = (ArchetypeSelectionQueryer) control.getMock();
89
90
91 control.replay();
92
93 selector.setArchetypeSelectionQueryer( queryer );
94
95 selector.selectArchetype( request, Boolean.TRUE, "" );
96
97 control.verify();
98
99 assertEquals( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_GROUPID, request.getArchetypeGroupId() );
100 assertEquals( "preset-artifactId", request.getArchetypeArtifactId() );
101 assertEquals( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_VERSION, request.getArchetypeVersion() );
102 }
103
104 public void testArchetypeArtifactIdNotInRequest()
105 throws PrompterException, IOException, UnknownGroup, ArchetypeSelectionFailure, UnknownArchetype,
106 ArchetypeNotDefined
107 {
108 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
109
110 MockControl control = MockControl.createControl( ArchetypeSelectionQueryer.class );
111
112 ArchetypeSelectionQueryer queryer = (ArchetypeSelectionQueryer) control.getMock();
113 queryer.selectArchetype( Collections.EMPTY_MAP, new ArchetypeDefinition() );
114 control.setMatcher( MockControl.ALWAYS_MATCHER );
115 Archetype archetype = new Archetype();
116 archetype.setArtifactId( "set-artifactId" );
117 archetype.setGroupId( "set-groupId" );
118 archetype.setVersion( "set-version" );
119 control.setReturnValue( archetype );
120
121 control.replay();
122
123 selector.setArchetypeSelectionQueryer( queryer );
124
125 selector.selectArchetype( request, Boolean.TRUE, "" );
126
127 control.verify();
128
129 assertEquals( "set-groupId", request.getArchetypeGroupId() );
130 assertEquals( "set-artifactId", request.getArchetypeArtifactId() );
131 assertEquals( "set-version", request.getArchetypeVersion() );
132 }
133
134 public void testArchetypeNotInRequestDefaultsInBatchMode()
135 throws PrompterException, IOException, UnknownGroup, ArchetypeSelectionFailure, UnknownArchetype,
136 ArchetypeNotDefined
137 {
138 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
139
140 MockControl control = MockControl.createControl( ArchetypeSelectionQueryer.class );
141
142 ArchetypeSelectionQueryer queryer = (ArchetypeSelectionQueryer) control.getMock();
143
144
145 control.replay();
146
147 selector.setArchetypeSelectionQueryer( queryer );
148
149 selector.selectArchetype( request, Boolean.FALSE, "" );
150
151 control.verify();
152
153 assertEquals( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_GROUPID, request.getArchetypeGroupId() );
154 assertEquals( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_ARTIFACTID, request.getArchetypeArtifactId() );
155 assertEquals( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_VERSION, request.getArchetypeVersion() );
156 }
157
158 public void testArchetypeNotInRequestDefaults()
159 throws PrompterException, IOException, UnknownGroup, ArchetypeSelectionFailure, UnknownArchetype,
160 ArchetypeNotDefined
161 {
162 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
163
164 MockControl control = MockControl.createControl( ArchetypeSelectionQueryer.class );
165
166 ArchetypeSelectionQueryer queryer = (ArchetypeSelectionQueryer) control.getMock();
167 queryer.selectArchetype( Collections.EMPTY_MAP, createDefaultArchetypeDefinition() );
168 control.setMatcher( createArgumentMatcher() );
169 Archetype archetype = new Archetype();
170 archetype.setArtifactId( "set-artifactId" );
171 archetype.setGroupId( "set-groupId" );
172 archetype.setVersion( "set-version" );
173 control.setReturnValue( archetype );
174
175 control.replay();
176
177 selector.setArchetypeSelectionQueryer( queryer );
178
179 selector.selectArchetype( request, Boolean.TRUE, "" );
180
181 control.verify();
182
183 assertEquals( "set-groupId", request.getArchetypeGroupId() );
184 assertEquals( "set-artifactId", request.getArchetypeArtifactId() );
185 assertEquals( "set-version", request.getArchetypeVersion() );
186 }
187
188 private ArchetypeDefinition createDefaultArchetypeDefinition()
189 {
190 ArchetypeDefinition definition = new ArchetypeDefinition();
191 definition.setGroupId( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_GROUPID );
192 definition.setArtifactId( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_ARTIFACTID );
193 definition.setVersion( DefaultArchetypeSelector.DEFAULT_ARCHETYPE_VERSION );
194 return definition;
195 }
196
197 private static ArgumentsMatcher createArgumentMatcher()
198 {
199 return new AbstractMatcher()
200 {
201 protected boolean argumentMatches( Object o, Object o1 )
202 {
203 return !( o instanceof ArchetypeDefinition ) ||
204 compareArchetypeDefinition( (ArchetypeDefinition) o, (ArchetypeDefinition) o1 );
205 }
206
207 private boolean compareArchetypeDefinition( ArchetypeDefinition o, ArchetypeDefinition o1 )
208 {
209 if ( o1 == o )
210 {
211 return true;
212 }
213 if ( o == null )
214 {
215 return false;
216 }
217
218 if ( o1.getArtifactId() != null
219 ? !o1.getArtifactId().equals( o.getArtifactId() )
220 : o.getArtifactId() != null )
221 {
222 return false;
223 }
224 if ( o1.getGroupId() != null ? !o1.getGroupId().equals( o.getGroupId() ) : o.getGroupId() != null )
225 {
226 return false;
227 }
228 if ( o1.getName() != null ? !o1.getName().equals( o.getName() ) : o.getName() != null )
229 {
230 return false;
231 }
232 if ( o1.getVersion() != null ? !o1.getVersion().equals( o.getVersion() ) : o.getVersion() != null )
233 {
234 return false;
235 }
236 if ( o1.getGoals() != null ? !o1.getGoals().equals( o.getGoals() ) : o.getGoals() != null )
237 {
238 return false;
239 }
240 if ( o1.getRepository() != null
241 ? !o1.getRepository().equals( o.getRepository() )
242 : o.getRepository() != null )
243 {
244 return false;
245 }
246
247 return true;
248 }
249
250 protected String argumentToString( Object o )
251 {
252 return o instanceof Map ? "..." : toString( (ArchetypeDefinition) o );
253 }
254
255 private String toString( ArchetypeDefinition archetypeDefinition )
256 {
257 return "groupId = " + archetypeDefinition.getGroupId() + ", " + "artifactId = " +
258 archetypeDefinition.getArtifactId() + ", " + "version = " + archetypeDefinition.getVersion();
259 }
260 };
261 }
262 }