1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.archetype.ui.generation;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.maven.archetype.catalog.Archetype;
27 import org.apache.maven.archetype.ui.ArchetypeDefinition;
28 import org.codehaus.plexus.ContainerConfiguration;
29 import org.codehaus.plexus.PlexusTestCase;
30 import org.codehaus.plexus.components.interactivity.Prompter;
31 import org.codehaus.plexus.components.interactivity.PrompterException;
32 import org.easymock.EasyMock;
33
34 public class DefaultArchetypeSelectionQueryerTest extends PlexusTestCase {
35 private DefaultArchetypeSelectionQueryer queryer;
36
37 @Override
38 protected void customizeContainerConfiguration(ContainerConfiguration configuration) {
39 configuration.setClassPathScanning("index");
40 }
41
42 @Override
43 public void setUp() throws Exception {
44 super.setUp();
45
46 queryer = (DefaultArchetypeSelectionQueryer) lookup(ArchetypeSelectionQueryer.class);
47 }
48
49 public void testDefaultArchetypeInMapOtherSelection() throws PrompterException {
50 Map<String, List<Archetype>> map = createDefaultArchetypeCatalog();
51
52 Prompter prompter = EasyMock.createMock(Prompter.class);
53 String prompt = EasyMock.anyObject();
54 EasyMock.expect(prompter.prompt(prompt, EasyMock.eq("2"))).andReturn("1");
55 queryer.setPrompter(prompter);
56
57 EasyMock.replay(prompter);
58
59 ArchetypeDefinition defaultDefinition = new ArchetypeDefinition();
60 defaultDefinition.setGroupId("default-groupId");
61 defaultDefinition.setArtifactId("default-artifactId");
62 defaultDefinition.setVersion("default-version");
63 Archetype archetype = queryer.selectArchetype(map, defaultDefinition);
64
65 EasyMock.verify(prompter);
66
67 assertEquals("set-groupId", archetype.getGroupId());
68 assertEquals("set-artifactId", archetype.getArtifactId());
69 assertEquals("set-version", archetype.getVersion());
70 }
71
72 public void testDefaultArchetypeInMapDefaultSelection() throws PrompterException {
73 Map<String, List<Archetype>> map = createDefaultArchetypeCatalog();
74
75 Prompter prompter = EasyMock.createMock(Prompter.class);
76 String prompt = EasyMock.anyObject();
77 EasyMock.expect(prompter.prompt(prompt, EasyMock.eq("2"))).andReturn("2");
78 queryer.setPrompter(prompter);
79
80 EasyMock.replay(prompter);
81
82 ArchetypeDefinition defaultDefinition = new ArchetypeDefinition();
83 defaultDefinition.setGroupId("default-groupId");
84 defaultDefinition.setArtifactId("default-artifactId");
85 defaultDefinition.setVersion("default-version");
86 Archetype archetype = queryer.selectArchetype(map, defaultDefinition);
87
88 EasyMock.verify(prompter);
89
90 assertEquals("default-groupId", archetype.getGroupId());
91 assertEquals("default-artifactId", archetype.getArtifactId());
92 assertEquals("default-version", archetype.getVersion());
93 }
94
95 public void testDefaultArchetypeNotInMap() throws PrompterException {
96 Map<String, List<Archetype>> map = createDefaultArchetypeCatalog();
97
98 Prompter prompter = EasyMock.createMock(Prompter.class);
99 String prompt = EasyMock.anyObject();
100 EasyMock.expect(prompter.prompt(prompt)).andReturn("1");
101 queryer.setPrompter(prompter);
102
103 EasyMock.replay(prompter);
104
105 ArchetypeDefinition defaultDefinition = new ArchetypeDefinition();
106 defaultDefinition.setGroupId("invalid-groupId");
107 defaultDefinition.setArtifactId("invalid-artifactId");
108 defaultDefinition.setVersion("invalid-version");
109 Archetype archetype = queryer.selectArchetype(map, defaultDefinition);
110
111 EasyMock.verify(prompter);
112
113 assertEquals("set-groupId", archetype.getGroupId());
114 assertEquals("set-artifactId", archetype.getArtifactId());
115 assertEquals("set-version", archetype.getVersion());
116 }
117
118 public void testNoDefaultArchetype() throws PrompterException {
119 Map<String, List<Archetype>> map = createDefaultArchetypeCatalog();
120
121 Prompter prompter = EasyMock.createMock(Prompter.class);
122 String prompt = EasyMock.anyObject();
123 EasyMock.expect(prompter.prompt(prompt)).andReturn("1");
124
125 queryer.setPrompter(prompter);
126
127 EasyMock.replay(prompter);
128
129 Archetype archetype = queryer.selectArchetype(map);
130
131 EasyMock.verify(prompter);
132
133 assertEquals("set-groupId", archetype.getGroupId());
134 assertEquals("set-artifactId", archetype.getArtifactId());
135 assertEquals("set-version", archetype.getVersion());
136 }
137
138 public void testArchetypeFiltering() throws PrompterException {
139 Map<String, List<Archetype>> map = createDefaultArchetypeCatalog();
140
141 Prompter prompter = EasyMock.createMock(Prompter.class);
142 String prompt = EasyMock.anyObject();
143 EasyMock.expect(prompter.prompt(prompt)).andReturn("1");
144
145 queryer.setPrompter(prompter);
146
147 EasyMock.replay(prompter);
148
149 Archetype archetype = queryer.selectArchetype(map);
150
151 EasyMock.verify(prompter);
152
153 assertEquals("set-groupId", archetype.getGroupId());
154 assertEquals("set-artifactId", archetype.getArtifactId());
155 assertEquals("set-version", archetype.getVersion());
156 }
157
158 private static Map<String, List<Archetype>> createDefaultArchetypeCatalog() {
159 List<Archetype> list = new ArrayList<>();
160 list.add(createArchetype("set-groupId", "set-artifactId", "set-version"));
161 list.add(createArchetype("default-groupId", "default-artifactId", "default-version"));
162 return Collections.singletonMap("internal", list);
163 }
164
165 private static Archetype createArchetype(String groupId, String artifactId, String version) {
166 Archetype a = new Archetype();
167 a.setGroupId(groupId);
168 a.setArtifactId(artifactId);
169 a.setVersion(version);
170 return a;
171 }
172 }