JCommanderTest.java revision 7e743acbff5277d087347bfba2409406865af8a0
158a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust/**
258a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * Copyright (C) 2010 the original author or authors.
358a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * See the notice.md file distributed with this work for additional
458a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * information regarding copyright ownership.
558a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust *
658a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * Licensed under the Apache License, Version 2.0 (the "License");
758a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * you may not use this file except in compliance with the License.
858a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * You may obtain a copy of the License at
958a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust *
1058a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust *     http://www.apache.org/licenses/LICENSE-2.0
1158a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust *
1258a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * Unless required by applicable law or agreed to in writing, software
1358a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * distributed under the License is distributed on an "AS IS" BASIS,
1458a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1558a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * See the License for the specific language governing permissions and
1658a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust * limitations under the License.
1758a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust */
1858a4af720c30d8dba072a96e3713577c8d30aeaeCedric Beust
19e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpackage com.beust.jcommander;
20e9229f961b3a5799f6798369afe26dec7960249Cedric Beust
21103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.Args1;
22103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.Args2;
23103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsArityString;
24103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsBooleanArity;
25b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport com.beust.jcommander.args.ArgsBooleanArity0;
26103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsConverter;
270638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraruimport com.beust.jcommander.args.ArgsEnum;
282ee07bc8765f4873b69423e6185120d176c49a2bCedric Beustimport com.beust.jcommander.args.ArgsEquals;
29b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beustimport com.beust.jcommander.args.ArgsHelp;
30103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N1;
31103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N2;
32103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N2New;
33b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthierimport com.beust.jcommander.args.ArgsInherited;
343e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beustimport com.beust.jcommander.args.ArgsList;
35f2cd60c1f0e475201b9d24b486df920ff1d02ac5Russell Eganimport com.beust.jcommander.args.ArgsMainParameter1;
36103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsMaster;
37103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsMultipleUnparsed;
38c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beustimport com.beust.jcommander.args.ArgsOutOfMemory;
39103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsPrivate;
4072cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beustimport com.beust.jcommander.args.ArgsRequired;
41103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsSlave;
42103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsSlaveBogus;
43cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beustimport com.beust.jcommander.args.ArgsValidate1;
44876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beustimport com.beust.jcommander.args.ArgsWithSet;
45e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beustimport com.beust.jcommander.args.Arity1;
46103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorColon;
47103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorEqual;
48103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorMixed;
49d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beustimport com.beust.jcommander.args.SlashSeparator;
50c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beustimport com.beust.jcommander.args.VariableArity;
51dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandAdd;
52dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandCommit;
53dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandMain;
54eca9dc8ab293c10f16a104e107b402b61c4c76deCedric Beust
55b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.Assert;
56b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.annotations.DataProvider;
57b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.annotations.Test;
58b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust
598877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.File;
608877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.FileWriter;
618877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.IOException;
62041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angusimport java.math.BigDecimal;
63f923ee57617c8690d293909c53a4e109a8c2ba26Angusimport java.text.ParseException;
64f923ee57617c8690d293909c53a4e109a8c2ba26Angusimport java.text.SimpleDateFormat;
65804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.ArrayList;
66e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport java.util.Arrays;
674c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Iterator;
68804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.List;
699b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.Locale;
704c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Map;
719b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.ResourceBundle;
72876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beustimport java.util.TreeSet;
73e9229f961b3a5799f6798369afe26dec7960249Cedric Beust
74460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust@Test
75e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpublic class JCommanderTest {
76f923ee57617c8690d293909c53a4e109a8c2ba26Angus  public void simpleArgs() throws ParseException {
7794fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Args1 args = new Args1();
78041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angus    String[] argv = { "-debug", "-log", "2", "-float", "1.2", "-double", "1.3", "-bigdecimal", "1.4",
79f923ee57617c8690d293909c53a4e109a8c2ba26Angus            "-date", "2011-10-26", "-groups", "unit", "a", "b", "c" };
8094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    new JCommander(args, argv);
81e9229f961b3a5799f6798369afe26dec7960249Cedric Beust
82cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust    Assert.assertTrue(args.debug);
8394fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Assert.assertEquals(args.verbose.intValue(), 2);
8494fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Assert.assertEquals(args.groups, "unit");
8594fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Assert.assertEquals(args.parameters, Arrays.asList("a", "b", "c"));
8636e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust    Assert.assertEquals(args.floa, 1.2f, 0.1f);
8736e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust    Assert.assertEquals(args.doub, 1.3f, 0.1f);
88041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angus    Assert.assertEquals(args.bigd, new BigDecimal("1.4"));
89f923ee57617c8690d293909c53a4e109a8c2ba26Angus    Assert.assertEquals(args.date, new SimpleDateFormat("yyyy-MM-dd").parse("2011-10-26"));
90e9229f961b3a5799f6798369afe26dec7960249Cedric Beust  }
91696418a94157048544c44f405d757ede86eec926Cedric Beust
92696418a94157048544c44f405d757ede86eec926Cedric Beust  /**
93696418a94157048544c44f405d757ede86eec926Cedric Beust   * Make sure that if there are args with multiple names (e.g. "-log" and "-verbose"),
94696418a94157048544c44f405d757ede86eec926Cedric Beust   * the usage will only display it once.
95696418a94157048544c44f405d757ede86eec926Cedric Beust   */
96696418a94157048544c44f405d757ede86eec926Cedric Beust  public void repeatedArgs() {
9794fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Args1 args = new Args1();
98696418a94157048544c44f405d757ede86eec926Cedric Beust    String[] argv = { "-log", "2" };
9994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    JCommander jc = new JCommander(args, argv);
100f923ee57617c8690d293909c53a4e109a8c2ba26Angus    Assert.assertEquals(jc.getParameters().size(), 8);
101696418a94157048544c44f405d757ede86eec926Cedric Beust  }
102696418a94157048544c44f405d757ede86eec926Cedric Beust
103dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  /**
104dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust   * Not specifying a required option should throw an exception.
105dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust   */
106dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  @Test(expectedExceptions = ParameterException.class)
1076734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust  public void requiredFields1Fail() {
10894fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Args1 args = new Args1();
109dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust    String[] argv = { "-debug" };
11094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    new JCommander(args, argv);
111dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  }
112dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust
113dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  /**
114e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust   * Getting the description of a nonexistent command should throw an exception.
115e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust   */
116e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust  @Test(expectedExceptions = ParameterException.class)
117e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust  public void nonexistentCommandShouldThrow() {
118e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust    String[] argv = { };
119e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust    JCommander jc = new JCommander(new Object(), argv);
120e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust    jc.getCommandDescription("foo");
121e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust  }
122e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust
123e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust  /**
124dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust   * Required options with multiple names should work with all names.
125dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust   */
126c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust  private void multipleNames(String option) {
12794fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    Args1 args = new Args1();
128c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust    String[] argv = { option, "2" };
12994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust    new JCommander(args, argv);
130c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust    Assert.assertEquals(args.verbose.intValue(), 2);
131c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust  }
1320638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru
133c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust  public void multipleNames1() {
134c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust    multipleNames("-log");
135dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  }
136dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust
137c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust  public void multipleNames2() {
138c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust    multipleNames("-verbose");
139dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust  }
140dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust
1416734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust  private void i18n1(String bundleName, Locale locale, String expectedString) {
1426734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    ResourceBundle bundle = locale != null ? ResourceBundle.getBundle(bundleName, locale)
1439b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust        : null;
1449b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
1456734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    ArgsI18N1 i18n = new ArgsI18N1();
1469b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust    String[] argv = { "-host", "localhost" };
1479b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust    JCommander jc = new JCommander(i18n, bundle, argv);
14814516e91e6be4ba1c3e7b573ea450e5c59925ecfCedric Beust//    jc.usage();
1499b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
1509b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust    ParameterDescription pd = jc.getParameters().get(0);
1519b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust    Assert.assertEquals(pd.getDescription(), expectedString);
1529b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  }
1539b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
1549b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  public void i18nNoLocale() {
1556734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    i18n1("MessageBundle", null, "Host");
1569b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  }
1579b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
1589b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  public void i18nUsLocale() {
1596734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    i18n1("MessageBundle", new Locale("en", "US"), "Host");
1609b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  }
1619b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
1629b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  public void i18nFrLocale() {
163c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot    i18n1("MessageBundle", new Locale("fr", "FR"), "Hôte");
1646734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust  }
1656734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust
166b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust  private void i18n2(Object i18n) {
1676734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    String[] argv = { "-host", "localhost" };
1686734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    Locale.setDefault(new Locale("fr", "FR"));
1696734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    JCommander jc = new JCommander(i18n, argv);
1706734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust    ParameterDescription pd = jc.getParameters().get(0);
171c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot    Assert.assertEquals(pd.getDescription(), "Hôte");
1729b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust  }
1739b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust
174b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust  public void i18nWithResourceAnnotation() {
175b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust    i18n2(new ArgsI18N2());
176b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust  }
177b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust
178b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust  public void i18nWithResourceAnnotationNew() {
179b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust    i18n2(new ArgsI18N2New());
180b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust  }
181b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust
18221059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust  public void noParseConstructor() {
18321059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust    JCommander jCommander = new JCommander(new ArgsMainParameter1());
184b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust    jCommander.usage(new StringBuilder());
18521059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust    // Before fix, this parse would throw an exception, because it calls createDescription, which
18621059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust    // was already called by usage(), and can only be called once.
18721059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust    jCommander.parse();
18821059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust  }
18921059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust
190dae46a1c4166085b56a78669050dc19938735a41Russell Egan  /**
191dae46a1c4166085b56a78669050dc19938735a41Russell Egan   * Test a use case where there are required parameters, but you still want
192dae46a1c4166085b56a78669050dc19938735a41Russell Egan   * to interrogate the options which are specified.
193dae46a1c4166085b56a78669050dc19938735a41Russell Egan   */
194dae46a1c4166085b56a78669050dc19938735a41Russell Egan  public void usageWithRequiredArgsAndResourceBundle() {
195dae46a1c4166085b56a78669050dc19938735a41Russell Egan    ArgsHelp argsHelp = new ArgsHelp();
19621059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust    JCommander jc = new JCommander(new Object[]{argsHelp, new ArgsRequired()},
19721059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust        java.util.ResourceBundle.getBundle("MessageBundle"));
198dae46a1c4166085b56a78669050dc19938735a41Russell Egan    // Should be able to display usage without triggering validation
199b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust    jc.usage(new StringBuilder());
200dae46a1c4166085b56a78669050dc19938735a41Russell Egan    try {
201dae46a1c4166085b56a78669050dc19938735a41Russell Egan      jc.parse("-h");
202dae46a1c4166085b56a78669050dc19938735a41Russell Egan      Assert.fail("Should have thrown a required parameter exception");
203dae46a1c4166085b56a78669050dc19938735a41Russell Egan    } catch (ParameterException e) {
204dae46a1c4166085b56a78669050dc19938735a41Russell Egan      Assert.assertTrue(e.getMessage().contains("are required"));
205dae46a1c4166085b56a78669050dc19938735a41Russell Egan    }
206dae46a1c4166085b56a78669050dc19938735a41Russell Egan    Assert.assertTrue(argsHelp.help);
207dae46a1c4166085b56a78669050dc19938735a41Russell Egan  }
208dae46a1c4166085b56a78669050dc19938735a41Russell Egan
209d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust  public void multiObjects() {
210d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust    ArgsMaster m = new ArgsMaster();
211d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust    ArgsSlave s = new ArgsSlave();
212d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust    String[] argv = { "-master", "master", "-slave", "slave" };
213b945b741b5de0510ce39f8c793e31202070ef942Cedric Beust    new JCommander(new Object[] { m , s }, argv);
214d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust
215d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust    Assert.assertEquals(m.master, "master");
216d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust    Assert.assertEquals(s.slave, "slave");
217d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust  }
218d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust
2190c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust  @Test(expectedExceptions = ParameterException.class)
2206734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust  public void multiObjectsWithDuplicatesFail() {
2210c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust    ArgsMaster m = new ArgsMaster();
2220c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust    ArgsSlave s = new ArgsSlaveBogus();
2230c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust    String[] argv = { "-master", "master", "-slave", "slave" };
2240c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust    new JCommander(new Object[] { m , s }, argv);
2250c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust  }
2260c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust
227f3b82e196a622a959374d7588688e74fe852a512Cedric Beust  public void arityString() {
228f3b82e196a622a959374d7588688e74fe852a512Cedric Beust    ArgsArityString args = new ArgsArityString();
229a21262377768de124914e354e428ed6860828949Cedric Beust    String[] argv = { "-pairs", "pair0", "pair1", "rest" };
230a21262377768de124914e354e428ed6860828949Cedric Beust    new JCommander(args, argv);
231a21262377768de124914e354e428ed6860828949Cedric Beust
232a21262377768de124914e354e428ed6860828949Cedric Beust    Assert.assertEquals(args.pairs.size(), 2);
233a21262377768de124914e354e428ed6860828949Cedric Beust    Assert.assertEquals(args.pairs.get(0), "pair0");
234a21262377768de124914e354e428ed6860828949Cedric Beust    Assert.assertEquals(args.pairs.get(1), "pair1");
235a21262377768de124914e354e428ed6860828949Cedric Beust    Assert.assertEquals(args.rest.size(), 1);
236a21262377768de124914e354e428ed6860828949Cedric Beust    Assert.assertEquals(args.rest.get(0), "rest");
237a21262377768de124914e354e428ed6860828949Cedric Beust  }
238a21262377768de124914e354e428ed6860828949Cedric Beust
239f3b82e196a622a959374d7588688e74fe852a512Cedric Beust  @Test(expectedExceptions = ParameterException.class)
240e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  public void arity2Fail() {
241f3b82e196a622a959374d7588688e74fe852a512Cedric Beust    ArgsArityString args = new ArgsArityString();
242f3b82e196a622a959374d7588688e74fe852a512Cedric Beust    String[] argv = { "-pairs", "pair0" };
243f3b82e196a622a959374d7588688e74fe852a512Cedric Beust    new JCommander(args, argv);
244f3b82e196a622a959374d7588688e74fe852a512Cedric Beust  }
245f3b82e196a622a959374d7588688e74fe852a512Cedric Beust
246cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust  @Test(expectedExceptions = ParameterException.class)
247cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust  public void multipleUnparsedFail() {
248cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust    ArgsMultipleUnparsed args = new ArgsMultipleUnparsed();
249cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust    String[] argv = { };
250cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust    new JCommander(args, argv);
251cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust  }
252cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust
2535f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust  public void privateArgs() {
2545f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust    ArgsPrivate args = new ArgsPrivate();
2555f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust    new JCommander(args, "-verbose", "3");
2565f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust    Assert.assertEquals(args.getVerbose().intValue(), 3);
2575f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust  }
2585f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust
2595a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust  public void converterArgs() {
2605a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust    ArgsConverter args = new ArgsConverter();
2615a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust    String fileName = "a";
2627021eade4657caf7ae25b19539bdc135619d248cAngus    new JCommander(args, "-file", "/tmp/" + fileName,
2637021eade4657caf7ae25b19539bdc135619d248cAngus      "-listStrings", "Tuesday,Thursday",
2647021eade4657caf7ae25b19539bdc135619d248cAngus      "-listInts", "-1,8",
2657021eade4657caf7ae25b19539bdc135619d248cAngus      "-listBigDecimals", "-11.52,100.12");
2665a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust    Assert.assertEquals(args.file.getName(), fileName);
2677021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listStrings.size(), 2);
2687021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listStrings.get(0), "Tuesday");
2697021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listStrings.get(1), "Thursday");
2707021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listInts.size(), 2);
2717021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listInts.get(0).intValue(), -1);
2727021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listInts.get(1).intValue(), 8);
2737021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listBigDecimals.size(), 2);
2747021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listBigDecimals.get(0), new BigDecimal("-11.52"));
2757021eade4657caf7ae25b19539bdc135619d248cAngus    Assert.assertEquals(args.listBigDecimals.get(1), new BigDecimal("100.12"));
2765a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust  }
2775a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust
278b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  private void argsBoolean1(String[] params, Boolean expected) {
279d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust    ArgsBooleanArity args = new ArgsBooleanArity();
280b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    new JCommander(args, params);
281b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    Assert.assertEquals(args.debug, expected);
282b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  }
283b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust
284b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  private void argsBoolean0(String[] params, Boolean expected) {
285b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    ArgsBooleanArity0 args = new ArgsBooleanArity0();
286b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    new JCommander(args, params);
287b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    Assert.assertEquals(args.debug, expected);
288b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  }
289b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust
290b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  public void booleanArity1() {
291b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    argsBoolean1(new String[] {}, Boolean.FALSE);
292b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    argsBoolean1(new String[] { "-debug", "true" }, Boolean.TRUE);
293b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  }
294b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust
295b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust  public void booleanArity0() {
296b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    argsBoolean0(new String[] {}, Boolean.FALSE);
297b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust    argsBoolean0(new String[] { "-debug"}, Boolean.TRUE);
298d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust  }
299d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust
3004312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  @Test(expectedExceptions = ParameterException.class)
3014312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  public void badParameterShouldThrowParameter1Exception() {
3024312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    Args1 args = new Args1();
3034312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    String[] argv = { "-log", "foo" };
3044312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    new JCommander(args, argv);
3054312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  }
3064312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust
3074312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  @Test(expectedExceptions = ParameterException.class)
3084312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  public void badParameterShouldThrowParameter2Exception() {
3094312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    Args1 args = new Args1();
3104312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    String[] argv = { "-long", "foo" };
3114312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust    new JCommander(args, argv);
3124312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust  }
3134312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust
314b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust  public void listParameters() {
315b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    Args2 a = new Args2();
316b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    String[] argv = {"-log", "2", "-groups", "unit", "a", "b", "c", "-host", "host2"};
317b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    new JCommander(a, argv);
318b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    Assert.assertEquals(a.verbose.intValue(), 2);
319b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    Assert.assertEquals(a.groups, "unit");
320b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    Assert.assertEquals(a.hosts, Arrays.asList("host2"));
321b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust    Assert.assertEquals(a.parameters, Arrays.asList("a", "b", "c"));
322b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust  }
32385866a95d6479be731596a838b6f5e793a341f5bCedric Beust
324fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  public void separatorEqual() {
325fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    SeparatorEqual s = new SeparatorEqual();
326bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust    String[] argv = { "-log=3", "--longoption=10" };
32785866a95d6479be731596a838b6f5e793a341f5bCedric Beust    new JCommander(s, argv);
32885866a95d6479be731596a838b6f5e793a341f5bCedric Beust    Assert.assertEquals(s.log.intValue(), 3);
329bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust    Assert.assertEquals(s.longOption.intValue(), 10);
33085866a95d6479be731596a838b6f5e793a341f5bCedric Beust  }
33185866a95d6479be731596a838b6f5e793a341f5bCedric Beust
332fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  public void separatorColon() {
333fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    SeparatorColon s = new SeparatorColon();
334fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    String[] argv = { "-verbose:true" };
335fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    new JCommander(s, argv);
336fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    Assert.assertTrue(s.verbose);
337fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  }
338fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust
339fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  public void separatorBoth() {
340fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    SeparatorColon s = new SeparatorColon();
341fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    SeparatorEqual s2 = new SeparatorEqual();
342fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    String[] argv = { "-verbose:true", "-log=3" };
343fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    new JCommander(new Object[] { s, s2 }, argv);
344fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    Assert.assertTrue(s.verbose);
345fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    Assert.assertEquals(s2.log.intValue(), 3);
346fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  }
347fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust
348fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  public void separatorMixed1() {
349fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    SeparatorMixed s = new SeparatorMixed();
350fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    String[] argv = { "-long:1", "-level=42" };
351fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    new JCommander(s, argv);
352fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    Assert.assertEquals(s.l.longValue(), 1l);
353fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust    Assert.assertEquals(s.level.intValue(), 42);
354fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust  }
355fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust
356426bf32155b30f5c1819a00d88c16944c01e5a52Cedric Beust  public void slashParameters() {
357d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust    SlashSeparator a = new SlashSeparator();
358858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust    String[] argv = { "/verbose", "/file", "/tmp/a" };
3595f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust    new JCommander(a, argv);
360d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust    Assert.assertTrue(a.verbose);
361d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust    Assert.assertEquals(a.file, "/tmp/a");
3625f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust  }
3635f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust
364b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier  public void inheritance() {
365b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier    ArgsInherited args = new ArgsInherited();
366b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier    String[] argv = { "-log", "3", "-child", "2" };
367b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier    new JCommander(args, argv);
368b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier    Assert.assertEquals(args.child.intValue(), 2);
369b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier    Assert.assertEquals(args.log.intValue(), 3);
370b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier  }
371b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier
372858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust  public void negativeNumber() {
373858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust    Args1 a = new Args1();
374858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust    String[] argv = { "-verbose", "-3" };
375858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust    new JCommander(a, argv);
376858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust    Assert.assertEquals(a.verbose.intValue(), -3);
377858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust  }
378858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust
37972cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust  @Test(expectedExceptions = ParameterException.class)
3805f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust  public void requiredMainParameters() {
38172cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust    ArgsRequired a = new ArgsRequired();
38272cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust    String[] argv = {};
38372cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust    new JCommander(a, argv);
3845f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust  }
3855f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust
386a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust  public void usageShouldNotChange() {
387a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    JCommander jc = new JCommander(new Args1(), new String[]{"-log", "1"});
388a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    StringBuilder sb = new StringBuilder();
389a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    jc.usage(sb);
390a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    String expected = sb.toString();
391a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    jc = new JCommander(new Args1(), new String[]{"-debug", "-log", "2", "-long", "5"});
392a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    sb = new StringBuilder();
393a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    jc.usage(sb);
394a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    String actual = sb.toString();
395a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust    Assert.assertEquals(actual, expected);
396a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust  }
397a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust
3984c020da73b8b25773bba8553263cf1954c718573Cedric Beust  private void verifyCommandOrdering(String[] commandNames, Object[] commands) {
3994c020da73b8b25773bba8553263cf1954c718573Cedric Beust    CommandMain cm = new CommandMain();
4004c020da73b8b25773bba8553263cf1954c718573Cedric Beust    JCommander jc = new JCommander(cm);
4014c020da73b8b25773bba8553263cf1954c718573Cedric Beust
4024c020da73b8b25773bba8553263cf1954c718573Cedric Beust    for (int i = 0; i < commands.length; i++) {
4034c020da73b8b25773bba8553263cf1954c718573Cedric Beust      jc.addCommand(commandNames[i], commands[i]);
4044c020da73b8b25773bba8553263cf1954c718573Cedric Beust    }
4054c020da73b8b25773bba8553263cf1954c718573Cedric Beust
4064c020da73b8b25773bba8553263cf1954c718573Cedric Beust    Map<String, JCommander> c = jc.getCommands();
4074c020da73b8b25773bba8553263cf1954c718573Cedric Beust    Assert.assertEquals(c.size(), commands.length);
4084c020da73b8b25773bba8553263cf1954c718573Cedric Beust
4094c020da73b8b25773bba8553263cf1954c718573Cedric Beust    Iterator<String> it = c.keySet().iterator();
4104c020da73b8b25773bba8553263cf1954c718573Cedric Beust    for (int i = 0; i < commands.length; i++) {
4114c020da73b8b25773bba8553263cf1954c718573Cedric Beust      Assert.assertEquals(it.next(), commandNames[i]);
4124c020da73b8b25773bba8553263cf1954c718573Cedric Beust    }
4134c020da73b8b25773bba8553263cf1954c718573Cedric Beust  }
4144c020da73b8b25773bba8553263cf1954c718573Cedric Beust
4154c020da73b8b25773bba8553263cf1954c718573Cedric Beust  public void commandsShouldBeShownInOrderOfInsertion() {
4164c020da73b8b25773bba8553263cf1954c718573Cedric Beust    verifyCommandOrdering(new String[] { "add", "commit" },
4174c020da73b8b25773bba8553263cf1954c718573Cedric Beust        new Object[] { new CommandAdd(), new CommandCommit() });
4184c020da73b8b25773bba8553263cf1954c718573Cedric Beust    verifyCommandOrdering(new String[] { "commit", "add" },
4194c020da73b8b25773bba8553263cf1954c718573Cedric Beust        new Object[] { new CommandCommit(), new CommandAdd() });
4204c020da73b8b25773bba8553263cf1954c718573Cedric Beust  }
4214c020da73b8b25773bba8553263cf1954c718573Cedric Beust
422e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust  @DataProvider
423e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust  public static Object[][] f() {
424e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust    return new Integer[][] {
425e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust      new Integer[] { 3, 5, 1 },
426e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust      new Integer[] { 3, 8, 1 },
427e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust      new Integer[] { 3, 12, 2 },
428e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust      new Integer[] { 8, 12, 2 },
429e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust      new Integer[] { 9, 10, 1 },
430e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust    };
431e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust  }
432e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust
433460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust  @Test(expectedExceptions = ParameterException.class)
434e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  public void arity1Fail() {
435e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final Arity1 arguments = new Arity1();
436e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final JCommander jCommander = new JCommander(arguments);
437e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final String[] commands = {
438e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust        "-inspect"
439e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    };
440e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    jCommander.parse(commands);
441e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  }
442e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust
443e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  public void arity1Success1() {
444e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final Arity1 arguments = new Arity1();
445e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final JCommander jCommander = new JCommander(arguments);
446e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final String[] commands = {
447e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust        "-inspect", "true"
448e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    };
449e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    jCommander.parse(commands);
450e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    Assert.assertTrue(arguments.inspect);
451e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  }
452e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust
453e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  public void arity1Success2() {
454e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final Arity1 arguments = new Arity1();
455e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final JCommander jCommander = new JCommander(arguments);
456e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    final String[] commands = {
457e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust        "-inspect", "false"
458e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    };
459e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    jCommander.parse(commands);
460e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust    Assert.assertFalse(arguments.inspect);
461e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust  }
462e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust
463804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  @Parameters(commandDescription = "Help for the given commands.")
464804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  public static class Help {
465804498ec24662928bf06efcee6584d55fca3d898Cedric Beust      public static final String NAME = "help";
466804498ec24662928bf06efcee6584d55fca3d898Cedric Beust
467804498ec24662928bf06efcee6584d55fca3d898Cedric Beust      @Parameter(description = "List of commands.")
468804498ec24662928bf06efcee6584d55fca3d898Cedric Beust      public List<String> commands=new ArrayList<String>();
469804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  }
470804498ec24662928bf06efcee6584d55fca3d898Cedric Beust
471804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  @Test(expectedExceptions = ParameterException.class,
472804498ec24662928bf06efcee6584d55fca3d898Cedric Beust      description = "Verify that the main parameter's type is checked to be a List")
473804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  public void wrongMainTypeShouldThrow() {
474804498ec24662928bf06efcee6584d55fca3d898Cedric Beust    JCommander jc = new JCommander(new ArgsRequiredWrongMain());
475804498ec24662928bf06efcee6584d55fca3d898Cedric Beust    jc.parse(new String[] { "f1", "f2" });
476804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  }
477804498ec24662928bf06efcee6584d55fca3d898Cedric Beust
478c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust  @Test(description = "This used to run out of memory")
479c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust  public void oom() {
480c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust    JCommander jc = new JCommander(new ArgsOutOfMemory());
481c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust    jc.usage(new StringBuilder());
482c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust  }
483c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust
484cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust  @Test
485cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust  public void getParametersShouldNotNpe() {
486cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust    JCommander jc = new JCommander(new Args1());
487cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust    List<ParameterDescription> parameters = jc.getParameters();
488cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust  }
489cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust
490cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust  public void validationShouldWork1() {
491cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust    ArgsValidate1 a = new ArgsValidate1();
492cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust    JCommander jc = new JCommander(a);
493e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust    jc.parse(new String[] { "-age", "2 "});
494e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust    Assert.assertEquals(a.age, new Integer(2));
495e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust  }
496e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust
497e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust  @Test(expectedExceptions = ParameterException.class)
498fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust  public void validationShouldWorkWithDefaultValues() {
499fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust    ArgsValidate2 a = new ArgsValidate2();
500fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust    new JCommander(a);
501fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust  }
502fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust
503fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust  @Test(expectedExceptions = ParameterException.class)
504e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust  public void validationShouldWork2() {
505e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust    ArgsValidate1 a = new ArgsValidate1();
506e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust    JCommander jc = new JCommander(a);
507cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust    jc.parse(new String[] { "-age", "-2 "});
508cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust  }
509cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust
5108877f663e79381340b329180922d7ac448e26317Cedric Beust  public void atFileCanContainEmptyLines() throws IOException {
5118877f663e79381340b329180922d7ac448e26317Cedric Beust    File f = File.createTempFile("JCommander", null);
5128877f663e79381340b329180922d7ac448e26317Cedric Beust    f.deleteOnExit();
5138877f663e79381340b329180922d7ac448e26317Cedric Beust    FileWriter fw = new FileWriter(f);
5148877f663e79381340b329180922d7ac448e26317Cedric Beust    fw.write("-log\n");
5158877f663e79381340b329180922d7ac448e26317Cedric Beust    fw.write("\n");
5168877f663e79381340b329180922d7ac448e26317Cedric Beust    fw.write("2\n");
5178877f663e79381340b329180922d7ac448e26317Cedric Beust    fw.close();
5188877f663e79381340b329180922d7ac448e26317Cedric Beust    new JCommander(new Args1(), "@" + f.getAbsolutePath());
5198877f663e79381340b329180922d7ac448e26317Cedric Beust  }
5208877f663e79381340b329180922d7ac448e26317Cedric Beust
5212ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust  public void handleEqualSigns() {
5222ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust    ArgsEquals a = new ArgsEquals();
5232ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust    JCommander jc = new JCommander(a);
5242ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust    jc.parse(new String[] { "-args=a=b,b=c" });
5252ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust    Assert.assertEquals(a.args, "a=b,b=c");
5262ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust  }
5272ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust
528876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust  @SuppressWarnings("serial")
529876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust  public void handleSets() {
530876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust    ArgsWithSet a = new ArgsWithSet();
531876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust    new JCommander(a, new String[] { "-s", "3,1,2" });
532876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust    Assert.assertEquals(a.set, new TreeSet<Integer>() {{ add(1); add(2); add(3); }});
533876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust  }
534876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust
535c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  private static final List<String> V = Arrays.asList("a", "b", "c", "d");
536c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust
537c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  @DataProvider
538c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  public Object[][] variable() {
539c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    return new Object[][] {
540c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust        new Object[] { 0, V.subList(0, 0), V },
541c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust        new Object[] { 1, V.subList(0, 1), V.subList(1, 4) },
542c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust        new Object[] { 2, V.subList(0, 2), V.subList(2, 4) },
543c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust        new Object[] { 3, V.subList(0, 3), V.subList(3, 4) },
544c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust        new Object[] { 4, V.subList(0, 4), V.subList(4, 4) },
545c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    };
546c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  }
547c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust
548c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  @Test(dataProvider = "variable")
549c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  public void variableArity(int count, List<String> var, List<String> main) {
550c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    VariableArity va = new VariableArity(count);
551c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    new JCommander(va).parse("-variable", "a", "b", "c", "d");
552c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    Assert.assertEquals(var, va.var);
553c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust    Assert.assertEquals(main, va.main);
554c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust  }
555c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust
5560638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru  public void enumArgs() {
5570638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    ArgsEnum args = new ArgsEnum();
5580638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    String[] argv = { "-choice", "ONE"};
5590638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    new JCommander(args, argv);
5600638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru
5610638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    Assert.assertEquals(args.choice, ArgsEnum.ChoiceType.ONE);
5620638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru  }
5630638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru
5640638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru  @Test(expectedExceptions = ParameterException.class)
5650638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru  public void enumArgsFail() {
5660638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    ArgsEnum args = new ArgsEnum();
5670638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    String[] argv = { "-choice", "A" };
5680638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru    new JCommander(args, argv);
5690638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru  }
5700638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru
5713e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust  public void testListAndSplitters() {
5723e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    ArgsList al = new ArgsList();
5733e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    JCommander j = new JCommander(al);
5743e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    j.parse("-groups", "a,b", "-ints", "41,42", "-hp", "localhost:1000;example.com:1001",
5753e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust        "-hp2", "localhost:1000,example.com:1001", "-uppercase", "ab,cd");
5763e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.groups.get(0), "a");
5773e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.groups.get(1), "b");
5783e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.ints.get(0).intValue(), 41);
5793e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.ints.get(1).intValue(), 42);
5803e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hostPorts.get(0).host, "localhost");
5813e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hostPorts.get(0).port.intValue(), 1000);
5823e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hostPorts.get(1).host, "example.com");
5833e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hostPorts.get(1).port.intValue(), 1001);
5843e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hp2.get(1).host, "example.com");
5853e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.hp2.get(1).port.intValue(), 1001);
5863e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.uppercase.get(0), "AB");
5873e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust    Assert.assertEquals(al.uppercase.get(1), "CD");
5883e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust  }
5893e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust
5904ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust  @Test(expectedExceptions = ParameterException.class)
5914ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust  public void shouldThrowIfUnknownOption() {
5924ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust    class A {
5934ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust      @Parameter(names = "-long")
5944ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust      public long l;
5954ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust    }
5964ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust    A a = new A();
5974ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust    new JCommander(a).parse("-lon", "32");
5984ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust  }
5994ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust
600c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust  @Test(expectedExceptions = ParameterException.class)
601c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust  public void mainParameterShouldBeValidate() {
602c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    class V implements IParameterValidator {
603c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust
604c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust      public void validate(String name, String value) throws ParameterException {
605c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust        Assert.assertEquals("a", value);
606c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust      }
607c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    }
608c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust
609c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    class A {
610c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust      @Parameter(validateWith = V.class)
611c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust      public List<String> m;
612c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    }
613c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust
614c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    A a = new A();
615c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    new JCommander(a).parse("b");
616c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust  }
617c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust
618804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  @Test(enabled = false)
6198877f663e79381340b329180922d7ac448e26317Cedric Beust  public static void main(String[] args) throws Exception {
620c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust
621c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust    System.out.println("A");
6227e743acbff5277d087347bfba2409406865af8a0Cedric Beust    class A {
6237e743acbff5277d087347bfba2409406865af8a0Cedric Beust      @Parameter
6247e743acbff5277d087347bfba2409406865af8a0Cedric Beust      List<String> parameters;
6257e743acbff5277d087347bfba2409406865af8a0Cedric Beust
6267e743acbff5277d087347bfba2409406865af8a0Cedric Beust      @Parameter(names = "-long")
6277e743acbff5277d087347bfba2409406865af8a0Cedric Beust      public long l;
6287e743acbff5277d087347bfba2409406865af8a0Cedric Beust    }
6297e743acbff5277d087347bfba2409406865af8a0Cedric Beust    A a = new A();
6307e743acbff5277d087347bfba2409406865af8a0Cedric Beust    new JCommander(a).parse("-long", "32");
6314ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    System.out.println(a.l);
6324ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    System.out.println(a.parameters);
6334ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    ArgsList al = new ArgsList();
6344ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    JCommander j = new JCommander(al);
6354ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    j.setColumnSize(40);
6364ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    j.usage();
6374ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    new JCommanderTest().testListAndSplitters();
6384ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust//    new JCommanderTest().converterArgs();
639804498ec24662928bf06efcee6584d55fca3d898Cedric Beust  }
640c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust
641c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust  // Tests:
642c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust  // required unparsed parameter
643e9229f961b3a5799f6798369afe26dec7960249Cedric Beust}
644