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.Arrays;
22  import java.util.List;
23  
24  import org.apache.maven.archetype.ui.ArchetypeConfiguration;
25  import org.junit.Before;
26  import org.junit.Test;
27  
28  import static org.junit.Assert.assertEquals;
29  
30  public class RequiredPropertyComparatorTest {
31      private DefaultArchetypeGenerationConfigurator.RequiredPropertyComparator requiredPropertyComparator;
32  
33      private ArchetypeConfiguration archetypeConfiguration;
34  
35      @Before
36      public void setUp() throws Exception {
37          archetypeConfiguration = new ArchetypeConfiguration();
38          requiredPropertyComparator =
39                  new DefaultArchetypeGenerationConfigurator.RequiredPropertyComparator(archetypeConfiguration);
40      }
41  
42      @Test
43      public void testShouldOrderPropertiesWhenReferringEachOther() {
44          archetypeConfiguration.addRequiredProperty("prop1");
45          archetypeConfiguration.setDefaultProperty("prop1", "${prop2}");
46          archetypeConfiguration.addRequiredProperty("prop2");
47          archetypeConfiguration.setDefaultProperty("prop2", "prop2 default value");
48  
49          List<String> requiredProperties = archetypeConfiguration.getRequiredProperties();
50          assertEquals(Arrays.asList("prop1", "prop2"), requiredProperties);
51          requiredProperties.sort(requiredPropertyComparator);
52          assertEquals(Arrays.asList("prop2", "prop1"), requiredProperties);
53      }
54  
55      @Test
56      public void testShouldOrderPropertiesWhenReferringEachOther2() {
57          archetypeConfiguration.addRequiredProperty("prop1");
58          archetypeConfiguration.setDefaultProperty("prop1", "${prop2}");
59          archetypeConfiguration.addRequiredProperty("prop2");
60  
61          List<String> requiredProperties = archetypeConfiguration.getRequiredProperties();
62          assertEquals(Arrays.asList("prop1", "prop2"), requiredProperties);
63          requiredProperties.sort(requiredPropertyComparator);
64          assertEquals(Arrays.asList("prop2", "prop1"), requiredProperties);
65      }
66  
67      @Test
68      public void testTransitivePropertyReferences() {
69          archetypeConfiguration.addRequiredProperty("foo");
70          archetypeConfiguration.setDefaultProperty("foo", "${bar}");
71          archetypeConfiguration.addRequiredProperty("bar");
72          archetypeConfiguration.setDefaultProperty("bar", "${baz}");
73          archetypeConfiguration.addRequiredProperty("baz");
74  
75          List<String> requiredProperties = archetypeConfiguration.getRequiredProperties();
76          assertEquals(Arrays.asList("foo", "bar", "baz"), requiredProperties);
77          requiredProperties.sort(requiredPropertyComparator);
78          assertEquals(Arrays.asList("baz", "bar", "foo"), requiredProperties);
79      }
80  
81      @Test
82      public void testPropertiesWithHyphen() {
83          archetypeConfiguration.addRequiredProperty("description");
84          archetypeConfiguration.setDefaultProperty("description", "${acronym-app} project-arch: ${component-name}");
85          archetypeConfiguration.addRequiredProperty("component-name");
86          archetypeConfiguration.addRequiredProperty("acronym-app");
87  
88          List<String> requiredProperties = archetypeConfiguration.getRequiredProperties();
89          assertEquals(Arrays.asList("description", "component-name", "acronym-app"), requiredProperties);
90          requiredProperties.sort(requiredPropertyComparator);
91          assertEquals(Arrays.asList("component-name", "acronym-app", "description"), requiredProperties);
92      }
93  }