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