/** * 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 arg2it = opts.set.iterator(); Assert.assertEquals(arg2it.next(), "anotherValue3"); Assert.assertEquals(arg2it.next(), "anotherValue4"); } public static class MyOpts { @Parameter(names = "-a") public List list; @Parameter(names = "-b") public Set 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 singletonList(String value) { List list = Lists.newArrayList(); list.add(value); return list; } public static final Set singletonSet(String value){ Set set = Sets.newLinkedHashSet(); set.add(value); return set; } }