JCommanderTest.java revision 36e3614a3ebf663c723e94f30b873194d33a29d1
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; 272ee07bc8765f4873b69423e6185120d176c49a2bCedric Beustimport com.beust.jcommander.args.ArgsEquals; 28b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beustimport com.beust.jcommander.args.ArgsHelp; 29103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N1; 30103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N2; 31103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsI18N2New; 32b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthierimport com.beust.jcommander.args.ArgsInherited; 33f2cd60c1f0e475201b9d24b486df920ff1d02ac5Russell Eganimport com.beust.jcommander.args.ArgsMainParameter1; 34103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsMaster; 35103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsMultipleUnparsed; 36c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beustimport com.beust.jcommander.args.ArgsOutOfMemory; 37103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsPrivate; 3872cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beustimport com.beust.jcommander.args.ArgsRequired; 39103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsSlave; 40103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.ArgsSlaveBogus; 41cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beustimport com.beust.jcommander.args.ArgsValidate1; 42876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beustimport com.beust.jcommander.args.ArgsWithSet; 43e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beustimport com.beust.jcommander.args.Arity1; 44103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorColon; 45103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorEqual; 46103fe3e72907f6f221dda8688e6e6d1b69ddeb73Cedric Beustimport com.beust.jcommander.args.SeparatorMixed; 47d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beustimport com.beust.jcommander.args.SlashSeparator; 48dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandAdd; 49dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandCommit; 50dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beustimport com.beust.jcommander.command.CommandMain; 51eca9dc8ab293c10f16a104e107b402b61c4c76deCedric Beust 52b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.Assert; 53b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.annotations.DataProvider; 54b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beustimport org.testng.annotations.Test; 55b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 568877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.File; 578877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.FileWriter; 588877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.IOException; 59804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.ArrayList; 60e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport java.util.Arrays; 614c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Iterator; 62804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.List; 639b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.Locale; 644c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Map; 659b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.ResourceBundle; 66876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beustimport java.util.TreeSet; 67e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 68460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust@Test 69e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpublic class JCommanderTest { 70e9229f961b3a5799f6798369afe26dec7960249Cedric Beust public void simpleArgs() { 7194fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 7236e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust String[] argv = { "-debug", "-log", "2", "-float", "1.2", "-double", "1.3", 7336e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust "-groups", "unit", "a", "b", "c" }; 7494fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 75e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 76cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust Assert.assertTrue(args.debug); 7794fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.verbose.intValue(), 2); 7894fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.groups, "unit"); 7994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.parameters, Arrays.asList("a", "b", "c")); 8036e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust Assert.assertEquals(args.floa, 1.2f, 0.1f); 8136e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust Assert.assertEquals(args.doub, 1.3f, 0.1f); 82e9229f961b3a5799f6798369afe26dec7960249Cedric Beust } 83696418a94157048544c44f405d757ede86eec926Cedric Beust 84696418a94157048544c44f405d757ede86eec926Cedric Beust /** 85696418a94157048544c44f405d757ede86eec926Cedric Beust * Make sure that if there are args with multiple names (e.g. "-log" and "-verbose"), 86696418a94157048544c44f405d757ede86eec926Cedric Beust * the usage will only display it once. 87696418a94157048544c44f405d757ede86eec926Cedric Beust */ 88696418a94157048544c44f405d757ede86eec926Cedric Beust public void repeatedArgs() { 8994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 90696418a94157048544c44f405d757ede86eec926Cedric Beust String[] argv = { "-log", "2" }; 9194fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust JCommander jc = new JCommander(args, argv); 9236e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust Assert.assertEquals(jc.getParameters().size(), 6); 93696418a94157048544c44f405d757ede86eec926Cedric Beust } 94696418a94157048544c44f405d757ede86eec926Cedric Beust 95dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 96dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Not specifying a required option should throw an exception. 97dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 98dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust @Test(expectedExceptions = ParameterException.class) 996734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void requiredFields1Fail() { 10094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 101dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust String[] argv = { "-debug" }; 10294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 103dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 104dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 105dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 106e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust * Getting the description of a nonexistent command should throw an exception. 107e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust */ 108e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust @Test(expectedExceptions = ParameterException.class) 109e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust public void nonexistentCommandShouldThrow() { 110e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust String[] argv = { }; 111e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust JCommander jc = new JCommander(new Object(), argv); 112e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust jc.getCommandDescription("foo"); 113e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust } 114e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust 115e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust /** 116dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Required options with multiple names should work with all names. 117dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 118c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust private void multipleNames(String option) { 11994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 120c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust String[] argv = { option, "2" }; 12194fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 122c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust Assert.assertEquals(args.verbose.intValue(), 2); 123c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust } 124c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust 125c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust public void multipleNames1() { 126c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust multipleNames("-log"); 127dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 128dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 129c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust public void multipleNames2() { 130c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust multipleNames("-verbose"); 131dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 132dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 1336734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust private void i18n1(String bundleName, Locale locale, String expectedString) { 1346734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ResourceBundle bundle = locale != null ? ResourceBundle.getBundle(bundleName, locale) 1359b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust : null; 1369b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1376734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ArgsI18N1 i18n = new ArgsI18N1(); 1389b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust String[] argv = { "-host", "localhost" }; 1399b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust JCommander jc = new JCommander(i18n, bundle, argv); 14014516e91e6be4ba1c3e7b573ea450e5c59925ecfCedric Beust// jc.usage(); 1419b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1429b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 1439b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust Assert.assertEquals(pd.getDescription(), expectedString); 1449b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1459b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1469b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nNoLocale() { 1476734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", null, "Host"); 1489b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1499b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1509b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nUsLocale() { 1516734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", new Locale("en", "US"), "Host"); 1529b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1539b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1549b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nFrLocale() { 155c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot i18n1("MessageBundle", new Locale("fr", "FR"), "Hôte"); 1566734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust } 1576734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust 158b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust private void i18n2(Object i18n) { 1596734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust String[] argv = { "-host", "localhost" }; 1606734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust Locale.setDefault(new Locale("fr", "FR")); 1616734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust JCommander jc = new JCommander(i18n, argv); 1626734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 163c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot Assert.assertEquals(pd.getDescription(), "Hôte"); 1649b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1659b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 166b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust public void i18nWithResourceAnnotation() { 167b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust i18n2(new ArgsI18N2()); 168b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust } 169b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust 170b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust public void i18nWithResourceAnnotationNew() { 171b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust i18n2(new ArgsI18N2New()); 172b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust } 173b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust 17421059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust public void noParseConstructor() { 17521059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust JCommander jCommander = new JCommander(new ArgsMainParameter1()); 176b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust jCommander.usage(new StringBuilder()); 17721059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust // Before fix, this parse would throw an exception, because it calls createDescription, which 17821059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust // was already called by usage(), and can only be called once. 17921059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust jCommander.parse(); 18021059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust } 18121059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust 182dae46a1c4166085b56a78669050dc19938735a41Russell Egan /** 183dae46a1c4166085b56a78669050dc19938735a41Russell Egan * Test a use case where there are required parameters, but you still want 184dae46a1c4166085b56a78669050dc19938735a41Russell Egan * to interrogate the options which are specified. 185dae46a1c4166085b56a78669050dc19938735a41Russell Egan */ 186dae46a1c4166085b56a78669050dc19938735a41Russell Egan public void usageWithRequiredArgsAndResourceBundle() { 187dae46a1c4166085b56a78669050dc19938735a41Russell Egan ArgsHelp argsHelp = new ArgsHelp(); 18821059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust JCommander jc = new JCommander(new Object[]{argsHelp, new ArgsRequired()}, 18921059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust java.util.ResourceBundle.getBundle("MessageBundle")); 190dae46a1c4166085b56a78669050dc19938735a41Russell Egan // Should be able to display usage without triggering validation 191b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust jc.usage(new StringBuilder()); 192dae46a1c4166085b56a78669050dc19938735a41Russell Egan try { 193dae46a1c4166085b56a78669050dc19938735a41Russell Egan jc.parse("-h"); 194dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.fail("Should have thrown a required parameter exception"); 195dae46a1c4166085b56a78669050dc19938735a41Russell Egan } catch (ParameterException e) { 196dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.assertTrue(e.getMessage().contains("are required")); 197dae46a1c4166085b56a78669050dc19938735a41Russell Egan } 198dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.assertTrue(argsHelp.help); 199dae46a1c4166085b56a78669050dc19938735a41Russell Egan } 200dae46a1c4166085b56a78669050dc19938735a41Russell Egan 201d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust public void multiObjects() { 202d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsMaster m = new ArgsMaster(); 203d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsSlave s = new ArgsSlave(); 204d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 205b945b741b5de0510ce39f8c793e31202070ef942Cedric Beust new JCommander(new Object[] { m , s }, argv); 206d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 207d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(m.master, "master"); 208d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(s.slave, "slave"); 209d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust } 210d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 2110c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust @Test(expectedExceptions = ParameterException.class) 2126734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void multiObjectsWithDuplicatesFail() { 2130c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsMaster m = new ArgsMaster(); 2140c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsSlave s = new ArgsSlaveBogus(); 2150c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 2160c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust new JCommander(new Object[] { m , s }, argv); 2170c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust } 2180c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust 219f3b82e196a622a959374d7588688e74fe852a512Cedric Beust public void arityString() { 220f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 221a21262377768de124914e354e428ed6860828949Cedric Beust String[] argv = { "-pairs", "pair0", "pair1", "rest" }; 222a21262377768de124914e354e428ed6860828949Cedric Beust new JCommander(args, argv); 223a21262377768de124914e354e428ed6860828949Cedric Beust 224a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.size(), 2); 225a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(0), "pair0"); 226a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(1), "pair1"); 227a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.size(), 1); 228a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.get(0), "rest"); 229a21262377768de124914e354e428ed6860828949Cedric Beust } 230a21262377768de124914e354e428ed6860828949Cedric Beust 231f3b82e196a622a959374d7588688e74fe852a512Cedric Beust @Test(expectedExceptions = ParameterException.class) 232e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity2Fail() { 233f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 234f3b82e196a622a959374d7588688e74fe852a512Cedric Beust String[] argv = { "-pairs", "pair0" }; 235f3b82e196a622a959374d7588688e74fe852a512Cedric Beust new JCommander(args, argv); 236f3b82e196a622a959374d7588688e74fe852a512Cedric Beust } 237f3b82e196a622a959374d7588688e74fe852a512Cedric Beust 238cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust @Test(expectedExceptions = ParameterException.class) 239cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust public void multipleUnparsedFail() { 240cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust ArgsMultipleUnparsed args = new ArgsMultipleUnparsed(); 241cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust String[] argv = { }; 242cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust new JCommander(args, argv); 243cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust } 244cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust 2455f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust public void privateArgs() { 2465f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust ArgsPrivate args = new ArgsPrivate(); 2475f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust new JCommander(args, "-verbose", "3"); 2485f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust Assert.assertEquals(args.getVerbose().intValue(), 3); 2495f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust } 2505f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust 2515a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust public void converterArgs() { 2525a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust ArgsConverter args = new ArgsConverter(); 2535a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust String fileName = "a"; 2545a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust new JCommander(args, "-file", "/tmp/" + fileName, "-days", "Tuesday,Thursday"); 2555a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.file.getName(), fileName); 2565a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.size(), 2); 2575a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.get(0), "Tuesday"); 2585a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.get(1), "Thursday"); 2595a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust } 2605a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust 261b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust private void argsBoolean1(String[] params, Boolean expected) { 262d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust ArgsBooleanArity args = new ArgsBooleanArity(); 263b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust new JCommander(args, params); 264b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust Assert.assertEquals(args.debug, expected); 265b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 266b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 267b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust private void argsBoolean0(String[] params, Boolean expected) { 268b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust ArgsBooleanArity0 args = new ArgsBooleanArity0(); 269b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust new JCommander(args, params); 270b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust Assert.assertEquals(args.debug, expected); 271b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 272b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 273b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust public void booleanArity1() { 274b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean1(new String[] {}, Boolean.FALSE); 275b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean1(new String[] { "-debug", "true" }, Boolean.TRUE); 276b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 277b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 278b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust public void booleanArity0() { 279b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean0(new String[] {}, Boolean.FALSE); 280b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean0(new String[] { "-debug"}, Boolean.TRUE); 281d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust } 282d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust 2834312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust @Test(expectedExceptions = ParameterException.class) 2844312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust public void badParameterShouldThrowParameter1Exception() { 2854312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust Args1 args = new Args1(); 2864312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust String[] argv = { "-log", "foo" }; 2874312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust new JCommander(args, argv); 2884312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust } 2894312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust 2904312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust @Test(expectedExceptions = ParameterException.class) 2914312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust public void badParameterShouldThrowParameter2Exception() { 2924312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust Args1 args = new Args1(); 2934312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust String[] argv = { "-long", "foo" }; 2944312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust new JCommander(args, argv); 2954312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust } 2964312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust 297b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust public void listParameters() { 298b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Args2 a = new Args2(); 299b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust String[] argv = {"-log", "2", "-groups", "unit", "a", "b", "c", "-host", "host2"}; 300b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust new JCommander(a, argv); 301b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.verbose.intValue(), 2); 302b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.groups, "unit"); 303b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.hosts, Arrays.asList("host2")); 304b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.parameters, Arrays.asList("a", "b", "c")); 305b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust } 30685866a95d6479be731596a838b6f5e793a341f5bCedric Beust 307fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorEqual() { 308fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorEqual s = new SeparatorEqual(); 309bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust String[] argv = { "-log=3", "--longoption=10" }; 31085866a95d6479be731596a838b6f5e793a341f5bCedric Beust new JCommander(s, argv); 31185866a95d6479be731596a838b6f5e793a341f5bCedric Beust Assert.assertEquals(s.log.intValue(), 3); 312bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust Assert.assertEquals(s.longOption.intValue(), 10); 31385866a95d6479be731596a838b6f5e793a341f5bCedric Beust } 31485866a95d6479be731596a838b6f5e793a341f5bCedric Beust 315fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorColon() { 316fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorColon s = new SeparatorColon(); 317fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-verbose:true" }; 318fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(s, argv); 319fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertTrue(s.verbose); 320fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 321fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 322fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorBoth() { 323fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorColon s = new SeparatorColon(); 324fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorEqual s2 = new SeparatorEqual(); 325fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-verbose:true", "-log=3" }; 326fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(new Object[] { s, s2 }, argv); 327fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertTrue(s.verbose); 328fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s2.log.intValue(), 3); 329fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 330fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 331fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorMixed1() { 332fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorMixed s = new SeparatorMixed(); 333fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-long:1", "-level=42" }; 334fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(s, argv); 335fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s.l.longValue(), 1l); 336fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s.level.intValue(), 42); 337fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 338fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 339426bf32155b30f5c1819a00d88c16944c01e5a52Cedric Beust public void slashParameters() { 340d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust SlashSeparator a = new SlashSeparator(); 341858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust String[] argv = { "/verbose", "/file", "/tmp/a" }; 3425f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust new JCommander(a, argv); 343d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust Assert.assertTrue(a.verbose); 344d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust Assert.assertEquals(a.file, "/tmp/a"); 3455f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust } 3465f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust 347b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier public void inheritance() { 348b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier ArgsInherited args = new ArgsInherited(); 349b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier String[] argv = { "-log", "3", "-child", "2" }; 350b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier new JCommander(args, argv); 351b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier Assert.assertEquals(args.child.intValue(), 2); 352b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier Assert.assertEquals(args.log.intValue(), 3); 353b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier } 354b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier 355858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust public void negativeNumber() { 356858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust Args1 a = new Args1(); 357858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust String[] argv = { "-verbose", "-3" }; 358858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust new JCommander(a, argv); 359858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust Assert.assertEquals(a.verbose.intValue(), -3); 360858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust } 361858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust 36272cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust @Test(expectedExceptions = ParameterException.class) 3635f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust public void requiredMainParameters() { 36472cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust ArgsRequired a = new ArgsRequired(); 36572cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust String[] argv = {}; 36672cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust new JCommander(a, argv); 3675f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust } 3685f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust 369a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust public void usageShouldNotChange() { 370a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust JCommander jc = new JCommander(new Args1(), new String[]{"-log", "1"}); 371a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust StringBuilder sb = new StringBuilder(); 372a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc.usage(sb); 373a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust String expected = sb.toString(); 374a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc = new JCommander(new Args1(), new String[]{"-debug", "-log", "2", "-long", "5"}); 375a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust sb = new StringBuilder(); 376a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc.usage(sb); 377a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust String actual = sb.toString(); 378a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust Assert.assertEquals(actual, expected); 379a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust } 380a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust 3814c020da73b8b25773bba8553263cf1954c718573Cedric Beust private void verifyCommandOrdering(String[] commandNames, Object[] commands) { 3824c020da73b8b25773bba8553263cf1954c718573Cedric Beust CommandMain cm = new CommandMain(); 3834c020da73b8b25773bba8553263cf1954c718573Cedric Beust JCommander jc = new JCommander(cm); 3844c020da73b8b25773bba8553263cf1954c718573Cedric Beust 3854c020da73b8b25773bba8553263cf1954c718573Cedric Beust for (int i = 0; i < commands.length; i++) { 3864c020da73b8b25773bba8553263cf1954c718573Cedric Beust jc.addCommand(commandNames[i], commands[i]); 3874c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 3884c020da73b8b25773bba8553263cf1954c718573Cedric Beust 3894c020da73b8b25773bba8553263cf1954c718573Cedric Beust Map<String, JCommander> c = jc.getCommands(); 3904c020da73b8b25773bba8553263cf1954c718573Cedric Beust Assert.assertEquals(c.size(), commands.length); 3914c020da73b8b25773bba8553263cf1954c718573Cedric Beust 3924c020da73b8b25773bba8553263cf1954c718573Cedric Beust Iterator<String> it = c.keySet().iterator(); 3934c020da73b8b25773bba8553263cf1954c718573Cedric Beust for (int i = 0; i < commands.length; i++) { 3944c020da73b8b25773bba8553263cf1954c718573Cedric Beust Assert.assertEquals(it.next(), commandNames[i]); 3954c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 3964c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 3974c020da73b8b25773bba8553263cf1954c718573Cedric Beust 3984c020da73b8b25773bba8553263cf1954c718573Cedric Beust public void commandsShouldBeShownInOrderOfInsertion() { 3994c020da73b8b25773bba8553263cf1954c718573Cedric Beust verifyCommandOrdering(new String[] { "add", "commit" }, 4004c020da73b8b25773bba8553263cf1954c718573Cedric Beust new Object[] { new CommandAdd(), new CommandCommit() }); 4014c020da73b8b25773bba8553263cf1954c718573Cedric Beust verifyCommandOrdering(new String[] { "commit", "add" }, 4024c020da73b8b25773bba8553263cf1954c718573Cedric Beust new Object[] { new CommandCommit(), new CommandAdd() }); 4034c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 4044c020da73b8b25773bba8553263cf1954c718573Cedric Beust 405e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust @DataProvider 406e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust public static Object[][] f() { 407e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust return new Integer[][] { 408e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 5, 1 }, 409e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 8, 1 }, 410e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 12, 2 }, 411e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 8, 12, 2 }, 412e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 9, 10, 1 }, 413e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust }; 414e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust } 415e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust 416460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust @Test(expectedExceptions = ParameterException.class) 417e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Fail() { 418e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 419e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 420e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 421e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect" 422e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 423e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 424e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 425e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 426e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Success1() { 427e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 428e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 429e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 430e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect", "true" 431e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 432e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 433e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust Assert.assertTrue(arguments.inspect); 434e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 435e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 436e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Success2() { 437e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 438e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 439e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 440e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect", "false" 441e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 442e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 443e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust Assert.assertFalse(arguments.inspect); 444e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 445e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 446804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Parameters(commandDescription = "Help for the given commands.") 447804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public static class Help { 448804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public static final String NAME = "help"; 449804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 450804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Parameter(description = "List of commands.") 451804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public List<String> commands=new ArrayList<String>(); 452804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 453804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 454804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Test(expectedExceptions = ParameterException.class, 455804498ec24662928bf06efcee6584d55fca3d898Cedric Beust description = "Verify that the main parameter's type is checked to be a List") 456804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public void wrongMainTypeShouldThrow() { 457804498ec24662928bf06efcee6584d55fca3d898Cedric Beust JCommander jc = new JCommander(new ArgsRequiredWrongMain()); 458804498ec24662928bf06efcee6584d55fca3d898Cedric Beust jc.parse(new String[] { "f1", "f2" }); 459804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 460804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 461c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust @Test(description = "This used to run out of memory") 462c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust public void oom() { 463c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust JCommander jc = new JCommander(new ArgsOutOfMemory()); 464c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust jc.usage(new StringBuilder()); 465c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust } 466c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust 467cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust @Test 468cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust public void getParametersShouldNotNpe() { 469cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust JCommander jc = new JCommander(new Args1()); 470cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust List<ParameterDescription> parameters = jc.getParameters(); 471cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust } 472cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust 473cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust public void validationShouldWork1() { 474cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust ArgsValidate1 a = new ArgsValidate1(); 475cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust JCommander jc = new JCommander(a); 476e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust jc.parse(new String[] { "-age", "2 "}); 477e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust Assert.assertEquals(a.age, new Integer(2)); 478e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust } 479e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust 480e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust @Test(expectedExceptions = ParameterException.class) 481fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust public void validationShouldWorkWithDefaultValues() { 482fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust ArgsValidate2 a = new ArgsValidate2(); 483fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust new JCommander(a); 484fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust } 485fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust 486fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust @Test(expectedExceptions = ParameterException.class) 487e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust public void validationShouldWork2() { 488e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust ArgsValidate1 a = new ArgsValidate1(); 489e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust JCommander jc = new JCommander(a); 490cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust jc.parse(new String[] { "-age", "-2 "}); 491cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust } 492cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust 4938877f663e79381340b329180922d7ac448e26317Cedric Beust public void atFileCanContainEmptyLines() throws IOException { 4948877f663e79381340b329180922d7ac448e26317Cedric Beust File f = File.createTempFile("JCommander", null); 4958877f663e79381340b329180922d7ac448e26317Cedric Beust f.deleteOnExit(); 4968877f663e79381340b329180922d7ac448e26317Cedric Beust FileWriter fw = new FileWriter(f); 4978877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("-log\n"); 4988877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("\n"); 4998877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("2\n"); 5008877f663e79381340b329180922d7ac448e26317Cedric Beust fw.close(); 5018877f663e79381340b329180922d7ac448e26317Cedric Beust new JCommander(new Args1(), "@" + f.getAbsolutePath()); 5028877f663e79381340b329180922d7ac448e26317Cedric Beust } 5038877f663e79381340b329180922d7ac448e26317Cedric Beust 5042ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust public void handleEqualSigns() { 5052ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust ArgsEquals a = new ArgsEquals(); 5062ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust JCommander jc = new JCommander(a); 5072ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust jc.parse(new String[] { "-args=a=b,b=c" }); 5082ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust Assert.assertEquals(a.args, "a=b,b=c"); 5092ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust } 5102ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust 511876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust @SuppressWarnings("serial") 512876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust public void handleSets() { 513876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust ArgsWithSet a = new ArgsWithSet(); 514876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust new JCommander(a, new String[] { "-s", "3,1,2" }); 515876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust Assert.assertEquals(a.set, new TreeSet<Integer>() {{ add(1); add(2); add(3); }}); 516876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust } 517876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust 518804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Test(enabled = false) 5198877f663e79381340b329180922d7ac448e26317Cedric Beust public static void main(String[] args) throws Exception { 52036e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust new JCommanderTest().repeatedArgs(); 5212ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust// PortsArgs a = new PortsArgs(); 5222ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust// JCommander jc = new JCommander(a); 5232ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust// jc.usage(); 5242ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust// new JCommanderTest().validationShouldWorkWithDefaultValues(); 5250dcc308f1c08b831376a3e153e2a1ed1a6166697Cedric Beust// new JCommanderTest().booleanArity1(); 526c1d51baff4fb68b90b2f9cdfea512c84ab94eb42Cedric Beust// ArgsLongDescription a = new ArgsLongDescription(); 527c1d51baff4fb68b90b2f9cdfea512c84ab94eb42Cedric Beust// JCommander jc = new JCommander(a); 528c1d51baff4fb68b90b2f9cdfea512c84ab94eb42Cedric Beust// jc.usage(); 529e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust// ArgsPassword a = new ArgsPassword(); 530e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust// JCommander jc = new JCommander(a); 531e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust// jc.parse("-password"); 532e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust// System.out.println("Password:" + a.password); 533ed891ffa6a8894150718d11df446269365bed216Cedric Beust// new JCommanderTest().commandsShouldBeShownInOrderOfInsertion(); 5344c020da73b8b25773bba8553263cf1954c718573Cedric Beust// CommandMain cm = new CommandMain(); 5354c020da73b8b25773bba8553263cf1954c718573Cedric Beust// JCommander jc = new JCommander(cm); 5364c020da73b8b25773bba8553263cf1954c718573Cedric Beust// CommandAdd add = new CommandAdd(); 5374c020da73b8b25773bba8553263cf1954c718573Cedric Beust// jc.addCommand("add", add); 5384c020da73b8b25773bba8553263cf1954c718573Cedric Beust// CommandCommit commit = new CommandCommit(); 5394c020da73b8b25773bba8553263cf1954c718573Cedric Beust// jc.addCommand("commit", commit); 5404c020da73b8b25773bba8553263cf1954c718573Cedric Beust// jc.usage(); 541dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beust 542dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beust// new JCommanderTest().requiredMainParameters(); 543dda1651c0b74aa9e8d225096f1d531871460e692Cedric Beust// new CommandTest().commandTest1(); 544f14a46abd32b378ec56a672a2da0b926c5d7276dCedric Beust// new DefaultProviderTest().defaultProvider1(); 5451eb22b901f731760a479740312337471363febffCedric Beust// ArgsMainParameter a = new ArgsMainParameter(); 5461eb22b901f731760a479740312337471363febffCedric Beust// new JCommander(a, "ex1:10", "ex2:20"); 5471eb22b901f731760a479740312337471363febffCedric Beust// System.out.println(a.parameters.get(0).host); 5481eb22b901f731760a479740312337471363febffCedric Beust// new JCommander(new Args1()).usage(); 54985866a95d6479be731596a838b6f5e793a341f5bCedric Beust// Separator a = new Separator(); 55076c4b6ace154f18794f9eb0c3d6211101bf426d0Cedric Beust// String[] argv = new String[] { "-n", "foo" }; 55176c4b6ace154f18794f9eb0c3d6211101bf426d0Cedric Beust// String[] argv = new String[] { "-v", "t" }; 55285866a95d6479be731596a838b6f5e793a341f5bCedric Beust// String[] argv = { "-log=10" }; 55385866a95d6479be731596a838b6f5e793a341f5bCedric Beust// JCommander jc = new JCommander(a, argv); 55485866a95d6479be731596a838b6f5e793a341f5bCedric Beust// Assert.assertEquals(a.log.intValue(), 10); 555460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust// } 556804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 557c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust 558c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // Tests: 559c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // required unparsed parameter 560e9229f961b3a5799f6798369afe26dec7960249Cedric Beust} 561