View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.cli2.util;
18  
19  import java.util.Collections;
20  import java.util.List;
21  
22  import junit.framework.TestCase;
23  
24  import org.apache.commons.cli2.CLITestCase;
25  import org.apache.commons.cli2.Option;
26  import org.apache.commons.cli2.option.CommandTest;
27  import org.apache.commons.cli2.option.DefaultOptionTest;
28  import org.apache.commons.cli2.option.GroupTest;
29  import org.apache.commons.cli2.option.ParentTest;
30  import org.apache.commons.cli2.option.SwitchTest;
31  
32  /**
33   * @author Rob Oxspring
34   */
35  public class ComparatorsTest extends TestCase {
36      public void testGroupFirst() {
37          final Option o1 = GroupTest.buildAntGroup();
38          final Option o2 = ParentTest.buildLibParent();
39          final List list = CLITestCase.list(o1, o2);
40  
41          Collections.sort(list, Comparators.groupFirst());
42  
43          CLITestCase.assertListContentsEqual(
44              CLITestCase.list(o1, o2),
45              list);
46      }
47  
48      public void testGroupLast() {
49          final Option o1 = GroupTest.buildAntGroup();
50          final Option o2 = ParentTest.buildLibParent();
51          final List list = CLITestCase.list(o1, o2);
52  
53          Collections.sort(list, Comparators.groupLast());
54  
55          CLITestCase.assertListContentsEqual(
56              CLITestCase.list(o2, o1),
57              list);
58      }
59  
60      public void testSwitchFirst() {
61          final Option o1 = SwitchTest.buildDisplaySwitch();
62          final Option o2 = ParentTest.buildLibParent();
63          final List list = CLITestCase.list(o1, o2);
64  
65          Collections.sort(list, Comparators.switchFirst());
66  
67          CLITestCase.assertListContentsEqual(
68              CLITestCase.list(o1, o2),
69              list);
70      }
71  
72      public void testSwitchLast() {
73          final Option o1 = SwitchTest.buildDisplaySwitch();
74          final Option o2 = ParentTest.buildLibParent();
75          //final Option o3 = new SwitchBuilder().withName("hidden").create();
76          final List list = CLITestCase.list(o1, o2);
77  
78          Collections.sort(list, Comparators.switchLast());
79  
80          CLITestCase.assertListContentsEqual(
81              CLITestCase.list(o2, o1),
82              list);
83      }
84  
85      public void testCommandFirst() {
86          final Option o1 = CommandTest.buildCommitCommand();
87          final Option o2 = ParentTest.buildLibParent();
88          final List list = CLITestCase.list(o1, o2);
89  
90          Collections.sort(list, Comparators.commandFirst());
91  
92          CLITestCase.assertListContentsEqual(
93              CLITestCase.list(o1, o2),
94              list);
95      }
96  
97      public void testCommandLast() {
98          final Option o1 = CommandTest.buildCommitCommand();
99          final Option o2 = ParentTest.buildLibParent();
100         final List list = CLITestCase.list(o1, o2);
101 
102         Collections.sort(list, Comparators.commandLast());
103 
104         CLITestCase.assertListContentsEqual(
105             CLITestCase.list(o2, o1),
106             list);
107     }
108 
109     public void testDefaultOptionFirst() {
110         final Option o1 = DefaultOptionTest.buildHelpOption();
111         final Option o2 = CommandTest.buildCommitCommand();
112         final List list = CLITestCase.list(o1, o2);
113 
114         Collections.sort(list, Comparators.defaultOptionFirst());
115 
116         CLITestCase.assertListContentsEqual(
117             CLITestCase.list(o1, o2),
118             list);
119     }
120 
121     public void testDefaultOptionLast() {
122         final Option o1 = DefaultOptionTest.buildHelpOption();
123         final Option o2 = CommandTest.buildCommitCommand();
124         final List list = CLITestCase.list(o1, o2);
125 
126         Collections.sort(list, Comparators.defaultOptionLast());
127 
128         CLITestCase.assertListContentsEqual(
129             CLITestCase.list(o2, o1),
130             list);
131     }
132 
133     public void testNamedFirst() {
134         final Option o1 = DefaultOptionTest.buildHelpOption();
135         final Option o2 = ParentTest.buildLibParent();
136         final List list = CLITestCase.list(o1, o2);
137 
138         Collections.sort(list, Comparators.namedFirst("--help"));
139 
140         CLITestCase.assertListContentsEqual(
141             CLITestCase.list(o1, o2),
142             list);
143     }
144 
145     public void testNamedLast() {
146         final Option o1 = DefaultOptionTest.buildHelpOption();
147         final Option o2 = ParentTest.buildLibParent();
148         final List list = CLITestCase.list(o1, o2);
149 
150         Collections.sort(list, Comparators.namedLast("--help"));
151 
152         CLITestCase.assertListContentsEqual(
153             CLITestCase.list(o2, o1),
154             list);
155     }
156 
157     public void testPreferredNameFirst() {
158         final Option o1 = DefaultOptionTest.buildHelpOption();
159         final Option o2 = ParentTest.buildLibParent();
160         final List list = CLITestCase.list(o1, o2);
161 
162         Collections.sort(list, Comparators.preferredNameFirst());
163 
164         CLITestCase.assertListContentsEqual(
165             CLITestCase.list(o1, o2),
166             list);
167     }
168 
169     public void testPreferredNameLast() {
170         final Option o1 = DefaultOptionTest.buildHelpOption();
171         final Option o2 = ParentTest.buildLibParent();
172         final List list = CLITestCase.list(o1, o2);
173 
174         Collections.sort(list, Comparators.preferredNameLast());
175 
176         CLITestCase.assertListContentsEqual(
177             CLITestCase.list(o2, o1),
178             list);
179     }
180 
181     public void testRequiredFirst() {
182         final Option o1 = DefaultOptionTest.buildHelpOption();
183         final Option o2 = DefaultOptionTest.buildXOption();
184         final List list = CLITestCase.list(o1, o2);
185 
186         Collections.sort(list, Comparators.requiredFirst());
187 
188         CLITestCase.assertListContentsEqual(
189             CLITestCase.list(o2, o1),
190             list);
191     }
192 
193     public void testRequiredLast() {
194         final Option o1 = DefaultOptionTest.buildHelpOption();
195         final Option o2 = DefaultOptionTest.buildXOption();
196         final List list = CLITestCase.list(o1, o2);
197 
198         Collections.sort(list, Comparators.requiredLast());
199 
200         CLITestCase.assertListContentsEqual(
201             CLITestCase.list(o1, o2),
202             list);
203     }
204 
205     public void testChained() {
206         final Option o1 = CommandTest.buildCommitCommand();
207         final Option o2 = SwitchTest.buildDisplaySwitch();
208         final Option o3 = DefaultOptionTest.buildHelpOption();
209         final List list = CLITestCase.list(o1, o2, o3);
210 
211         Collections.sort(
212             list,
213             Comparators.chain(
214                 Comparators.namedFirst("--help"),
215                 Comparators.commandFirst()));
216 
217         CLITestCase.assertListContentsEqual(
218             CLITestCase.list(o3, o1, o2),
219             list);
220     }
221 }