View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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 }