• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (C) 2010 the original author or authors.
3  * See the notice.md file distributed with this work for additional
4  * information regarding copyright ownership.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * 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, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 
19 package com.beust.jcommander;
20 
21 import com.beust.jcommander.internal.Lists;
22 import com.beust.jcommander.internal.Sets;
23 import org.testng.Assert;
24 import org.testng.annotations.Test;
25 
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.Set;
29 
30 /**
31  * Test behaviour of default parameter values
32  * @author rodionmoiseev
33  */
34 public class DefaultValueTest {
35   @Test
emptyDefaultValueForListParameterStaysEmptyIfNotAssignedOrIsSetOtherwise()36   public void emptyDefaultValueForListParameterStaysEmptyIfNotAssignedOrIsSetOtherwise() {
37     MyOptsWithEmptyDefaults opts = new MyOptsWithEmptyDefaults();
38     JCommander cmd = new JCommander(opts);
39     cmd.parse(new String[]{"-a", "anotherValue"});
40     Assert.assertEquals(opts.list.size(), 1);
41     Assert.assertEquals(opts.list.get(0), "anotherValue");
42     Assert.assertEquals(opts.set.size(), 0);
43   }
44 
45   @Test
defaultValueForListParametersGetsOverwrittenWithSpecifiedValueOrStaysAsDefaultOtherwise()46   public void defaultValueForListParametersGetsOverwrittenWithSpecifiedValueOrStaysAsDefaultOtherwise() {
47     MyOptsWithDefaultValues opts = new MyOptsWithDefaultValues();
48     JCommander cmd = new JCommander(opts);
49     cmd.parse(new String[]{"-a", "anotherValue"});
50     Assert.assertEquals(opts.list.size(), 1);
51     Assert.assertEquals(opts.list.get(0), "anotherValue");
52     Assert.assertEquals(opts.set.size(), 1);
53     Assert.assertEquals(opts.set.iterator().next(), "defaultValue");
54   }
55 
56   @Test
anyNumberOfValuesCanBeSetToListParameters_ForEmptyDefaults()57   public void anyNumberOfValuesCanBeSetToListParameters_ForEmptyDefaults(){
58     MyOptsWithEmptyDefaults opts = new MyOptsWithEmptyDefaults();
59     testSettingMultipleValuesToListTypeParameters(opts);
60   }
61 
62   @Test
anyNumberOfValuesCanBeSetToListParameters_ForNonEmptyDefaults()63   public void anyNumberOfValuesCanBeSetToListParameters_ForNonEmptyDefaults(){
64     MyOptsWithDefaultValues opts = new MyOptsWithDefaultValues();
65     testSettingMultipleValuesToListTypeParameters(opts);
66   }
67 
testSettingMultipleValuesToListTypeParameters(MyOpts opts)68   private void testSettingMultipleValuesToListTypeParameters(MyOpts opts) {
69     JCommander cmd = new JCommander(opts);
70     cmd.parse(new String[]{"-a", "anotherValue", "-a", "anotherValue2",
71                            "-b", "anotherValue3", "-b", "anotherValue4"});
72     Assert.assertEquals(opts.list.size(), 2);
73     Assert.assertEquals(opts.list.get(0), "anotherValue");
74     Assert.assertEquals(opts.list.get(1), "anotherValue2");
75     Assert.assertEquals(opts.set.size(), 2);
76     Iterator<String> arg2it = opts.set.iterator();
77     Assert.assertEquals(arg2it.next(), "anotherValue3");
78     Assert.assertEquals(arg2it.next(), "anotherValue4");
79   }
80 
81   public static class MyOpts {
82     @Parameter(names = "-a")
83     public List<String> list;
84     @Parameter(names = "-b")
85     public Set<String> set;
86   }
87 
88   public static final class MyOptsWithDefaultValues extends MyOpts {
MyOptsWithDefaultValues()89     public MyOptsWithDefaultValues(){
90       this.list = singletonList("defaultValue");
91       this.set = singletonSet("defaultValue");
92     }
93   }
94 
95   public static final class MyOptsWithEmptyDefaults extends MyOpts {
MyOptsWithEmptyDefaults()96     public MyOptsWithEmptyDefaults(){
97       this.list = Lists.newArrayList();
98       this.set = Sets.newLinkedHashSet();
99     }
100   }
101 
singletonList(String value)102   public static final List<String> singletonList(String value) {
103     List<String> list = Lists.newArrayList();
104     list.add(value);
105     return list;
106   }
107 
singletonSet(String value)108   public static final Set<String> singletonSet(String value){
109     Set<String> set = Sets.newLinkedHashSet();
110     set.add(value);
111     return set;
112   }
113 }
114