diff options
Diffstat (limited to 'src/test/java/com/beust/jcommander/DefaultValueTest.java')
-rw-r--r-- | src/test/java/com/beust/jcommander/DefaultValueTest.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/test/java/com/beust/jcommander/DefaultValueTest.java b/src/test/java/com/beust/jcommander/DefaultValueTest.java new file mode 100644 index 0000000..3b1f29c --- /dev/null +++ b/src/test/java/com/beust/jcommander/DefaultValueTest.java @@ -0,0 +1,113 @@ +/** + * Copyright (C) 2010 the original author or authors. + * See the notice.md file distributed with this work for additional + * information regarding copyright ownership. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.beust.jcommander; + +import com.beust.jcommander.internal.Lists; +import com.beust.jcommander.internal.Sets; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +/** + * Test behaviour of default parameter values + * @author rodionmoiseev + */ +public class DefaultValueTest { + @Test + public void emptyDefaultValueForListParameterStaysEmptyIfNotAssignedOrIsSetOtherwise() { + MyOptsWithEmptyDefaults opts = new MyOptsWithEmptyDefaults(); + JCommander cmd = new JCommander(opts); + cmd.parse(new String[]{"-a", "anotherValue"}); + Assert.assertEquals(opts.list.size(), 1); + Assert.assertEquals(opts.list.get(0), "anotherValue"); + Assert.assertEquals(opts.set.size(), 0); + } + + @Test + public void defaultValueForListParametersGetsOverwrittenWithSpecifiedValueOrStaysAsDefaultOtherwise() { + MyOptsWithDefaultValues opts = new MyOptsWithDefaultValues(); + JCommander cmd = new JCommander(opts); + cmd.parse(new String[]{"-a", "anotherValue"}); + Assert.assertEquals(opts.list.size(), 1); + Assert.assertEquals(opts.list.get(0), "anotherValue"); + Assert.assertEquals(opts.set.size(), 1); + Assert.assertEquals(opts.set.iterator().next(), "defaultValue"); + } + + @Test + public void anyNumberOfValuesCanBeSetToListParameters_ForEmptyDefaults(){ + MyOptsWithEmptyDefaults opts = new MyOptsWithEmptyDefaults(); + testSettingMultipleValuesToListTypeParameters(opts); + } + + @Test + public void anyNumberOfValuesCanBeSetToListParameters_ForNonEmptyDefaults(){ + MyOptsWithDefaultValues opts = new MyOptsWithDefaultValues(); + testSettingMultipleValuesToListTypeParameters(opts); + } + + private void testSettingMultipleValuesToListTypeParameters(MyOpts opts) { + JCommander cmd = new JCommander(opts); + cmd.parse(new String[]{"-a", "anotherValue", "-a", "anotherValue2", + "-b", "anotherValue3", "-b", "anotherValue4"}); + Assert.assertEquals(opts.list.size(), 2); + Assert.assertEquals(opts.list.get(0), "anotherValue"); + Assert.assertEquals(opts.list.get(1), "anotherValue2"); + Assert.assertEquals(opts.set.size(), 2); + Iterator<String> arg2it = opts.set.iterator(); + Assert.assertEquals(arg2it.next(), "anotherValue3"); + Assert.assertEquals(arg2it.next(), "anotherValue4"); + } + + public static class MyOpts { + @Parameter(names = "-a") + public List<String> list; + @Parameter(names = "-b") + public Set<String> set; + } + + public static final class MyOptsWithDefaultValues extends MyOpts { + public MyOptsWithDefaultValues(){ + this.list = singletonList("defaultValue"); + this.set = singletonSet("defaultValue"); + } + } + + public static final class MyOptsWithEmptyDefaults extends MyOpts { + public MyOptsWithEmptyDefaults(){ + this.list = Lists.newArrayList(); + this.set = Sets.newLinkedHashSet(); + } + } + + public static final List<String> singletonList(String value) { + List<String> list = Lists.newArrayList(); + list.add(value); + return list; + } + + public static final Set<String> singletonSet(String value){ + Set<String> set = Sets.newLinkedHashSet(); + set.add(value); + return set; + } +} |