JCommanderTest.java revision 61e65090c5495518a9a521149dbecbd17e1df193
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; 585414de6562cc1a597c0d522fc4889e0f4136306cCedric Beustimport org.testng.collections.Lists; 598ebf58f752ae0703b70af57cecfe584968442558Cedric Beustimport org.testng.collections.Maps; 60b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 6139e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beustimport java.io.ByteArrayInputStream; 628877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.File; 638877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.FileWriter; 648877f663e79381340b329180922d7ac448e26317Cedric Beustimport java.io.IOException; 6539e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beustimport java.io.InputStream; 66041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angusimport java.math.BigDecimal; 67f923ee57617c8690d293909c53a4e109a8c2ba26Angusimport java.text.ParseException; 68f923ee57617c8690d293909c53a4e109a8c2ba26Angusimport java.text.SimpleDateFormat; 69804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.ArrayList; 70e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport java.util.Arrays; 71a3199885e5e515af41a01c4d693bf96f1dafbd67Adrian Muraruimport java.util.EnumSet; 724c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Iterator; 73804498ec24662928bf06efcee6584d55fca3d898Cedric Beustimport java.util.List; 749b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.Locale; 754c020da73b8b25773bba8553263cf1954c718573Cedric Beustimport java.util.Map; 769b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.ResourceBundle; 77876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beustimport java.util.TreeSet; 78e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 79460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust@Test 80e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpublic class JCommanderTest { 81f923ee57617c8690d293909c53a4e109a8c2ba26Angus public void simpleArgs() throws ParseException { 8294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 83041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angus String[] argv = { "-debug", "-log", "2", "-float", "1.2", "-double", "1.3", "-bigdecimal", "1.4", 84f923ee57617c8690d293909c53a4e109a8c2ba26Angus "-date", "2011-10-26", "-groups", "unit", "a", "b", "c" }; 8594fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 86e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 87cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust Assert.assertTrue(args.debug); 8894fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.verbose.intValue(), 2); 8994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.groups, "unit"); 9094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.parameters, Arrays.asList("a", "b", "c")); 9136e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust Assert.assertEquals(args.floa, 1.2f, 0.1f); 9236e3614a3ebf663c723e94f30b873194d33a29d1Cedric Beust Assert.assertEquals(args.doub, 1.3f, 0.1f); 93041bdac9067d4ce9c936ff1c0ae3856f2e240f15Angus Assert.assertEquals(args.bigd, new BigDecimal("1.4")); 94f923ee57617c8690d293909c53a4e109a8c2ba26Angus Assert.assertEquals(args.date, new SimpleDateFormat("yyyy-MM-dd").parse("2011-10-26")); 95e9229f961b3a5799f6798369afe26dec7960249Cedric Beust } 96696418a94157048544c44f405d757ede86eec926Cedric Beust 97696418a94157048544c44f405d757ede86eec926Cedric Beust /** 98696418a94157048544c44f405d757ede86eec926Cedric Beust * Make sure that if there are args with multiple names (e.g. "-log" and "-verbose"), 99696418a94157048544c44f405d757ede86eec926Cedric Beust * the usage will only display it once. 100696418a94157048544c44f405d757ede86eec926Cedric Beust */ 101696418a94157048544c44f405d757ede86eec926Cedric Beust public void repeatedArgs() { 10294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 103696418a94157048544c44f405d757ede86eec926Cedric Beust String[] argv = { "-log", "2" }; 10494fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust JCommander jc = new JCommander(args, argv); 105f923ee57617c8690d293909c53a4e109a8c2ba26Angus Assert.assertEquals(jc.getParameters().size(), 8); 106696418a94157048544c44f405d757ede86eec926Cedric Beust } 107696418a94157048544c44f405d757ede86eec926Cedric Beust 108dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 109dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Not specifying a required option should throw an exception. 110dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 111dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust @Test(expectedExceptions = ParameterException.class) 1126734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void requiredFields1Fail() { 11394fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 114dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust String[] argv = { "-debug" }; 11594fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 116dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 117dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 118dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 119e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust * Getting the description of a nonexistent command should throw an exception. 120e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust */ 121e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust @Test(expectedExceptions = ParameterException.class) 122e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust public void nonexistentCommandShouldThrow() { 123e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust String[] argv = { }; 124e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust JCommander jc = new JCommander(new Object(), argv); 125e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust jc.getCommandDescription("foo"); 126e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust } 127e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust 128e2d8da7b584b6a13c23de32ce2df0799a4d3513dCedric Beust /** 129dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Required options with multiple names should work with all names. 130dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 131c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust private void multipleNames(String option) { 13294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 133c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust String[] argv = { option, "2" }; 13494fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 135c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust Assert.assertEquals(args.verbose.intValue(), 2); 136c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust } 1370638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru 138c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust public void multipleNames1() { 139c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust multipleNames("-log"); 140dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 141dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 142c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust public void multipleNames2() { 143c2559dfb9a77c3c8223c5cfb1eac5cc6bbba488eCedric Beust multipleNames("-verbose"); 144dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 145dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 1466734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust private void i18n1(String bundleName, Locale locale, String expectedString) { 1476734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ResourceBundle bundle = locale != null ? ResourceBundle.getBundle(bundleName, locale) 1489b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust : null; 1499b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1506734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ArgsI18N1 i18n = new ArgsI18N1(); 1519b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust String[] argv = { "-host", "localhost" }; 1529b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust JCommander jc = new JCommander(i18n, bundle, argv); 15314516e91e6be4ba1c3e7b573ea450e5c59925ecfCedric Beust// jc.usage(); 1549b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1559b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 1569b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust Assert.assertEquals(pd.getDescription(), expectedString); 1579b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1589b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1599b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nNoLocale() { 1606734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", null, "Host"); 1619b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1629b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1639b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nUsLocale() { 1646734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", new Locale("en", "US"), "Host"); 1659b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1669b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 1679b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nFrLocale() { 168c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot i18n1("MessageBundle", new Locale("fr", "FR"), "Hôte"); 1696734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust } 1706734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust 171b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust private void i18n2(Object i18n) { 1726734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust String[] argv = { "-host", "localhost" }; 1736734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust Locale.setDefault(new Locale("fr", "FR")); 1746734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust JCommander jc = new JCommander(i18n, argv); 1756734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 176c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot Assert.assertEquals(pd.getDescription(), "Hôte"); 1779b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1789b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 179b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust public void i18nWithResourceAnnotation() { 180b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust i18n2(new ArgsI18N2()); 181b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust } 182b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust 183b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust public void i18nWithResourceAnnotationNew() { 184b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust i18n2(new ArgsI18N2New()); 185b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust } 186b8010b01b766d131076f7343be5e36e7014319e3Cedric Beust 18721059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust public void noParseConstructor() { 18821059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust JCommander jCommander = new JCommander(new ArgsMainParameter1()); 189b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust jCommander.usage(new StringBuilder()); 19021059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust // Before fix, this parse would throw an exception, because it calls createDescription, which 19121059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust // was already called by usage(), and can only be called once. 19221059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust jCommander.parse(); 19321059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust } 19421059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust 195dae46a1c4166085b56a78669050dc19938735a41Russell Egan /** 196dae46a1c4166085b56a78669050dc19938735a41Russell Egan * Test a use case where there are required parameters, but you still want 197dae46a1c4166085b56a78669050dc19938735a41Russell Egan * to interrogate the options which are specified. 198dae46a1c4166085b56a78669050dc19938735a41Russell Egan */ 199dae46a1c4166085b56a78669050dc19938735a41Russell Egan public void usageWithRequiredArgsAndResourceBundle() { 200dae46a1c4166085b56a78669050dc19938735a41Russell Egan ArgsHelp argsHelp = new ArgsHelp(); 20121059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust JCommander jc = new JCommander(new Object[]{argsHelp, new ArgsRequired()}, 20221059374aa90082d8d0b94c758a0041c2c6b06deCedric Beust java.util.ResourceBundle.getBundle("MessageBundle")); 203dae46a1c4166085b56a78669050dc19938735a41Russell Egan // Should be able to display usage without triggering validation 204b5598e97aa7d22a933223f6211d50329b1a20308Cedric Beust jc.usage(new StringBuilder()); 205dae46a1c4166085b56a78669050dc19938735a41Russell Egan try { 206dae46a1c4166085b56a78669050dc19938735a41Russell Egan jc.parse("-h"); 207dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.fail("Should have thrown a required parameter exception"); 208dae46a1c4166085b56a78669050dc19938735a41Russell Egan } catch (ParameterException e) { 209dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.assertTrue(e.getMessage().contains("are required")); 210dae46a1c4166085b56a78669050dc19938735a41Russell Egan } 211dae46a1c4166085b56a78669050dc19938735a41Russell Egan Assert.assertTrue(argsHelp.help); 212dae46a1c4166085b56a78669050dc19938735a41Russell Egan } 213dae46a1c4166085b56a78669050dc19938735a41Russell Egan 214d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust public void multiObjects() { 215d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsMaster m = new ArgsMaster(); 216d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsSlave s = new ArgsSlave(); 217d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 218b945b741b5de0510ce39f8c793e31202070ef942Cedric Beust new JCommander(new Object[] { m , s }, argv); 219d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 220d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(m.master, "master"); 221d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(s.slave, "slave"); 222d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust } 223d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 2240c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust @Test(expectedExceptions = ParameterException.class) 2256734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void multiObjectsWithDuplicatesFail() { 2260c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsMaster m = new ArgsMaster(); 2270c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsSlave s = new ArgsSlaveBogus(); 2280c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 2290c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust new JCommander(new Object[] { m , s }, argv); 2300c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust } 2310c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust 232f3b82e196a622a959374d7588688e74fe852a512Cedric Beust public void arityString() { 233f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 234a21262377768de124914e354e428ed6860828949Cedric Beust String[] argv = { "-pairs", "pair0", "pair1", "rest" }; 235a21262377768de124914e354e428ed6860828949Cedric Beust new JCommander(args, argv); 236a21262377768de124914e354e428ed6860828949Cedric Beust 237a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.size(), 2); 238a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(0), "pair0"); 239a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(1), "pair1"); 240a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.size(), 1); 241a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.get(0), "rest"); 242a21262377768de124914e354e428ed6860828949Cedric Beust } 243a21262377768de124914e354e428ed6860828949Cedric Beust 244f3b82e196a622a959374d7588688e74fe852a512Cedric Beust @Test(expectedExceptions = ParameterException.class) 245e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity2Fail() { 246f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 247f3b82e196a622a959374d7588688e74fe852a512Cedric Beust String[] argv = { "-pairs", "pair0" }; 248f3b82e196a622a959374d7588688e74fe852a512Cedric Beust new JCommander(args, argv); 249f3b82e196a622a959374d7588688e74fe852a512Cedric Beust } 250f3b82e196a622a959374d7588688e74fe852a512Cedric Beust 251cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust @Test(expectedExceptions = ParameterException.class) 252cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust public void multipleUnparsedFail() { 253cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust ArgsMultipleUnparsed args = new ArgsMultipleUnparsed(); 254cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust String[] argv = { }; 255cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust new JCommander(args, argv); 256cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust } 257cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust 2585f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust public void privateArgs() { 2595f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust ArgsPrivate args = new ArgsPrivate(); 2605f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust new JCommander(args, "-verbose", "3"); 2615f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust Assert.assertEquals(args.getVerbose().intValue(), 3); 2625f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust } 2635f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust 2645a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust public void converterArgs() { 2655a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust ArgsConverter args = new ArgsConverter(); 2665a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust String fileName = "a"; 2677021eade4657caf7ae25b19539bdc135619d248cAngus new JCommander(args, "-file", "/tmp/" + fileName, 2687021eade4657caf7ae25b19539bdc135619d248cAngus "-listStrings", "Tuesday,Thursday", 2697021eade4657caf7ae25b19539bdc135619d248cAngus "-listInts", "-1,8", 2707021eade4657caf7ae25b19539bdc135619d248cAngus "-listBigDecimals", "-11.52,100.12"); 2715a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.file.getName(), fileName); 2727021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listStrings.size(), 2); 2737021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listStrings.get(0), "Tuesday"); 2747021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listStrings.get(1), "Thursday"); 2757021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listInts.size(), 2); 2767021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listInts.get(0).intValue(), -1); 2777021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listInts.get(1).intValue(), 8); 2787021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listBigDecimals.size(), 2); 2797021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listBigDecimals.get(0), new BigDecimal("-11.52")); 2807021eade4657caf7ae25b19539bdc135619d248cAngus Assert.assertEquals(args.listBigDecimals.get(1), new BigDecimal("100.12")); 2815a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust } 2825a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust 283b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust private void argsBoolean1(String[] params, Boolean expected) { 284d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust ArgsBooleanArity args = new ArgsBooleanArity(); 285b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust new JCommander(args, params); 286b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust Assert.assertEquals(args.debug, expected); 287b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 288b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 289b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust private void argsBoolean0(String[] params, Boolean expected) { 290b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust ArgsBooleanArity0 args = new ArgsBooleanArity0(); 291b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust new JCommander(args, params); 292b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust Assert.assertEquals(args.debug, expected); 293b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 294b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 295b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust public void booleanArity1() { 296b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean1(new String[] {}, Boolean.FALSE); 297b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean1(new String[] { "-debug", "true" }, Boolean.TRUE); 298b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust } 299b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust 300b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust public void booleanArity0() { 301b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean0(new String[] {}, Boolean.FALSE); 302b828856eb3f2d04ebc118babb4068419fce5b3bdCedric Beust argsBoolean0(new String[] { "-debug"}, Boolean.TRUE); 303d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust } 304d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust 3054312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust @Test(expectedExceptions = ParameterException.class) 3064312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust public void badParameterShouldThrowParameter1Exception() { 3074312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust Args1 args = new Args1(); 3084312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust String[] argv = { "-log", "foo" }; 3094312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust new JCommander(args, argv); 3104312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust } 3114312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust 3124312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust @Test(expectedExceptions = ParameterException.class) 3134312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust public void badParameterShouldThrowParameter2Exception() { 3144312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust Args1 args = new Args1(); 3154312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust String[] argv = { "-long", "foo" }; 3164312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust new JCommander(args, argv); 3174312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust } 3184312bccb3787db4e24d19c16c5786bf2a503a9b9Cedric Beust 319b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust public void listParameters() { 320b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Args2 a = new Args2(); 321b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust String[] argv = {"-log", "2", "-groups", "unit", "a", "b", "c", "-host", "host2"}; 322b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust new JCommander(a, argv); 323b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.verbose.intValue(), 2); 324b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.groups, "unit"); 325b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.hosts, Arrays.asList("host2")); 326b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust Assert.assertEquals(a.parameters, Arrays.asList("a", "b", "c")); 327b2b58d4e3845c1eaa85d7a63cf4632f58e634056Cedric Beust } 32885866a95d6479be731596a838b6f5e793a341f5bCedric Beust 329fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorEqual() { 330fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorEqual s = new SeparatorEqual(); 331bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust String[] argv = { "-log=3", "--longoption=10" }; 33285866a95d6479be731596a838b6f5e793a341f5bCedric Beust new JCommander(s, argv); 33385866a95d6479be731596a838b6f5e793a341f5bCedric Beust Assert.assertEquals(s.log.intValue(), 3); 334bc108076cf3dc506d4e87e004d8c2e413b995adaCedric Beust Assert.assertEquals(s.longOption.intValue(), 10); 33585866a95d6479be731596a838b6f5e793a341f5bCedric Beust } 33685866a95d6479be731596a838b6f5e793a341f5bCedric Beust 337fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorColon() { 338fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorColon s = new SeparatorColon(); 339fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-verbose:true" }; 340fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(s, argv); 341fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertTrue(s.verbose); 342fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 343fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 344fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorBoth() { 345fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorColon s = new SeparatorColon(); 346fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorEqual s2 = new SeparatorEqual(); 347fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-verbose:true", "-log=3" }; 348fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(new Object[] { s, s2 }, argv); 349fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertTrue(s.verbose); 350fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s2.log.intValue(), 3); 351fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 352fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 353fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust public void separatorMixed1() { 354fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust SeparatorMixed s = new SeparatorMixed(); 355fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust String[] argv = { "-long:1", "-level=42" }; 356fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust new JCommander(s, argv); 357fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s.l.longValue(), 1l); 358fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust Assert.assertEquals(s.level.intValue(), 42); 359fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust } 360fe9b1e59d132e6b10819ae8c9dc3300fb3200ae0Cedric Beust 361426bf32155b30f5c1819a00d88c16944c01e5a52Cedric Beust public void slashParameters() { 362d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust SlashSeparator a = new SlashSeparator(); 363858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust String[] argv = { "/verbose", "/file", "/tmp/a" }; 3645f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust new JCommander(a, argv); 365d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust Assert.assertTrue(a.verbose); 366d556f4a527306a9769776d1cbb2fccac98618bc9Cedric Beust Assert.assertEquals(a.file, "/tmp/a"); 3675f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust } 3685f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust 369b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier public void inheritance() { 370b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier ArgsInherited args = new ArgsInherited(); 371b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier String[] argv = { "-log", "3", "-child", "2" }; 372b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier new JCommander(args, argv); 373b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier Assert.assertEquals(args.child.intValue(), 2); 374b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier Assert.assertEquals(args.log.intValue(), 3); 375b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier } 376b7e9d9cfe060b02437f867716a8902cc466b0776Guillaume Sauthier 377858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust public void negativeNumber() { 378858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust Args1 a = new Args1(); 379858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust String[] argv = { "-verbose", "-3" }; 380858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust new JCommander(a, argv); 381858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust Assert.assertEquals(a.verbose.intValue(), -3); 382858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust } 383858c0e61453c4b3a8663d9094f38b6aba493d753Cedric Beust 38472cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust @Test(expectedExceptions = ParameterException.class) 3855f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust public void requiredMainParameters() { 38672cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust ArgsRequired a = new ArgsRequired(); 38772cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust String[] argv = {}; 38872cacbaebb04753ddba0c8dc0f9328310e8cb222Cedric Beust new JCommander(a, argv); 3895f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust } 3905f57e62a9aad979f2fe17e6d61ce5d05136661dbCedric Beust 391a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust public void usageShouldNotChange() { 392a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust JCommander jc = new JCommander(new Args1(), new String[]{"-log", "1"}); 393a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust StringBuilder sb = new StringBuilder(); 394a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc.usage(sb); 395a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust String expected = sb.toString(); 396a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc = new JCommander(new Args1(), new String[]{"-debug", "-log", "2", "-long", "5"}); 397a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust sb = new StringBuilder(); 398a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust jc.usage(sb); 399a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust String actual = sb.toString(); 400a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust Assert.assertEquals(actual, expected); 401a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust } 402a76d5b9a334e8600d0bc7b0c51506cf4e67e1a3aCedric Beust 4034c020da73b8b25773bba8553263cf1954c718573Cedric Beust private void verifyCommandOrdering(String[] commandNames, Object[] commands) { 4044c020da73b8b25773bba8553263cf1954c718573Cedric Beust CommandMain cm = new CommandMain(); 4054c020da73b8b25773bba8553263cf1954c718573Cedric Beust JCommander jc = new JCommander(cm); 4064c020da73b8b25773bba8553263cf1954c718573Cedric Beust 4074c020da73b8b25773bba8553263cf1954c718573Cedric Beust for (int i = 0; i < commands.length; i++) { 4084c020da73b8b25773bba8553263cf1954c718573Cedric Beust jc.addCommand(commandNames[i], commands[i]); 4094c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 4104c020da73b8b25773bba8553263cf1954c718573Cedric Beust 4114c020da73b8b25773bba8553263cf1954c718573Cedric Beust Map<String, JCommander> c = jc.getCommands(); 4124c020da73b8b25773bba8553263cf1954c718573Cedric Beust Assert.assertEquals(c.size(), commands.length); 4134c020da73b8b25773bba8553263cf1954c718573Cedric Beust 4144c020da73b8b25773bba8553263cf1954c718573Cedric Beust Iterator<String> it = c.keySet().iterator(); 4154c020da73b8b25773bba8553263cf1954c718573Cedric Beust for (int i = 0; i < commands.length; i++) { 4164c020da73b8b25773bba8553263cf1954c718573Cedric Beust Assert.assertEquals(it.next(), commandNames[i]); 4174c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 4184c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 4194c020da73b8b25773bba8553263cf1954c718573Cedric Beust 4204c020da73b8b25773bba8553263cf1954c718573Cedric Beust public void commandsShouldBeShownInOrderOfInsertion() { 4214c020da73b8b25773bba8553263cf1954c718573Cedric Beust verifyCommandOrdering(new String[] { "add", "commit" }, 4224c020da73b8b25773bba8553263cf1954c718573Cedric Beust new Object[] { new CommandAdd(), new CommandCommit() }); 4234c020da73b8b25773bba8553263cf1954c718573Cedric Beust verifyCommandOrdering(new String[] { "commit", "add" }, 4244c020da73b8b25773bba8553263cf1954c718573Cedric Beust new Object[] { new CommandCommit(), new CommandAdd() }); 4254c020da73b8b25773bba8553263cf1954c718573Cedric Beust } 4264c020da73b8b25773bba8553263cf1954c718573Cedric Beust 427e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust @DataProvider 428e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust public static Object[][] f() { 429e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust return new Integer[][] { 430e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 5, 1 }, 431e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 8, 1 }, 432e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 3, 12, 2 }, 433e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 8, 12, 2 }, 434e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust new Integer[] { 9, 10, 1 }, 435e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust }; 436e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust } 437e78248b969b0fa0f217ce85e43d39a1d7c055753Cedric Beust 438460998fec3b06bf45b024c645b5b5e854de68c24Cedric Beust @Test(expectedExceptions = ParameterException.class) 439e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Fail() { 440e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 441e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 442e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 443e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect" 444e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 445e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 446e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 447e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 448e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Success1() { 449e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 450e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 451e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 452e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect", "true" 453e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 454e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 455e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust Assert.assertTrue(arguments.inspect); 456e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 457e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 458e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust public void arity1Success2() { 459e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final Arity1 arguments = new Arity1(); 460e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final JCommander jCommander = new JCommander(arguments); 461e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust final String[] commands = { 462e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust "-inspect", "false" 463e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust }; 464e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust jCommander.parse(commands); 465e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust Assert.assertFalse(arguments.inspect); 466e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust } 467e5799d36df3ceddb4b71b5f786e343c1c1e0d027Cedric Beust 468804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Parameters(commandDescription = "Help for the given commands.") 469804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public static class Help { 470804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public static final String NAME = "help"; 471804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 472804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Parameter(description = "List of commands.") 473804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public List<String> commands=new ArrayList<String>(); 474804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 475804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 476804498ec24662928bf06efcee6584d55fca3d898Cedric Beust @Test(expectedExceptions = ParameterException.class, 477804498ec24662928bf06efcee6584d55fca3d898Cedric Beust description = "Verify that the main parameter's type is checked to be a List") 478804498ec24662928bf06efcee6584d55fca3d898Cedric Beust public void wrongMainTypeShouldThrow() { 479804498ec24662928bf06efcee6584d55fca3d898Cedric Beust JCommander jc = new JCommander(new ArgsRequiredWrongMain()); 480804498ec24662928bf06efcee6584d55fca3d898Cedric Beust jc.parse(new String[] { "f1", "f2" }); 481804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 482804498ec24662928bf06efcee6584d55fca3d898Cedric Beust 483c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust @Test(description = "This used to run out of memory") 484c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust public void oom() { 485c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust JCommander jc = new JCommander(new ArgsOutOfMemory()); 486c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust jc.usage(new StringBuilder()); 487c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust } 488c512c633a76a8bfe5a8eda8c6198cce7af4c5eafCedric Beust 489cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust @Test 490cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust public void getParametersShouldNotNpe() { 491cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust JCommander jc = new JCommander(new Args1()); 492cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust List<ParameterDescription> parameters = jc.getParameters(); 493cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust } 494cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust 495cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust public void validationShouldWork1() { 496cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust ArgsValidate1 a = new ArgsValidate1(); 497cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust JCommander jc = new JCommander(a); 498e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust jc.parse(new String[] { "-age", "2 "}); 499e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust Assert.assertEquals(a.age, new Integer(2)); 500e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust } 501e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust 502e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust @Test(expectedExceptions = ParameterException.class) 503fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust public void validationShouldWorkWithDefaultValues() { 504fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust ArgsValidate2 a = new ArgsValidate2(); 505fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust new JCommander(a); 506fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust } 507fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust 508fe8a696f6c65438505eb26d8b734d34910932ef7Cedric Beust @Test(expectedExceptions = ParameterException.class) 509e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust public void validationShouldWork2() { 510e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust ArgsValidate1 a = new ArgsValidate1(); 511e1d494d69d20c1afab9ff29a9fd31e48ba71cc7cCedric Beust JCommander jc = new JCommander(a); 512cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust jc.parse(new String[] { "-age", "-2 "}); 513cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust } 514cfbeb8905f1166e5fd03624a34571d6ae5ab321dCedric Beust 5158877f663e79381340b329180922d7ac448e26317Cedric Beust public void atFileCanContainEmptyLines() throws IOException { 5168877f663e79381340b329180922d7ac448e26317Cedric Beust File f = File.createTempFile("JCommander", null); 5178877f663e79381340b329180922d7ac448e26317Cedric Beust f.deleteOnExit(); 5188877f663e79381340b329180922d7ac448e26317Cedric Beust FileWriter fw = new FileWriter(f); 5198877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("-log\n"); 5208877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("\n"); 5218877f663e79381340b329180922d7ac448e26317Cedric Beust fw.write("2\n"); 5228877f663e79381340b329180922d7ac448e26317Cedric Beust fw.close(); 5238877f663e79381340b329180922d7ac448e26317Cedric Beust new JCommander(new Args1(), "@" + f.getAbsolutePath()); 5248877f663e79381340b329180922d7ac448e26317Cedric Beust } 5258877f663e79381340b329180922d7ac448e26317Cedric Beust 5262ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust public void handleEqualSigns() { 5272ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust ArgsEquals a = new ArgsEquals(); 5282ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust JCommander jc = new JCommander(a); 5292ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust jc.parse(new String[] { "-args=a=b,b=c" }); 5302ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust Assert.assertEquals(a.args, "a=b,b=c"); 5312ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust } 5322ee07bc8765f4873b69423e6185120d176c49a2bCedric Beust 533876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust @SuppressWarnings("serial") 534876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust public void handleSets() { 535876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust ArgsWithSet a = new ArgsWithSet(); 536876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust new JCommander(a, new String[] { "-s", "3,1,2" }); 537876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust Assert.assertEquals(a.set, new TreeSet<Integer>() {{ add(1); add(2); add(3); }}); 538876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust } 539876c9776ebe75ca46504847a4807b681ef5d5e4fCedric Beust 540c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust private static final List<String> V = Arrays.asList("a", "b", "c", "d"); 541c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust 542c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust @DataProvider 543c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust public Object[][] variable() { 544c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust return new Object[][] { 545c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new Object[] { 0, V.subList(0, 0), V }, 546c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new Object[] { 1, V.subList(0, 1), V.subList(1, 4) }, 547c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new Object[] { 2, V.subList(0, 2), V.subList(2, 4) }, 548c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new Object[] { 3, V.subList(0, 3), V.subList(3, 4) }, 549c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new Object[] { 4, V.subList(0, 4), V.subList(4, 4) }, 550c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust }; 551c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust } 552c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust 553c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust @Test(dataProvider = "variable") 554c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust public void variableArity(int count, List<String> var, List<String> main) { 555c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust VariableArity va = new VariableArity(count); 556c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust new JCommander(va).parse("-variable", "a", "b", "c", "d"); 557c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust Assert.assertEquals(var, va.var); 558c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust Assert.assertEquals(main, va.main); 559c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust } 560c709e6db81d11fe4aa6c573775ba5577902aa35cCédric Beust 5610638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru public void enumArgs() { 5620638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru ArgsEnum args = new ArgsEnum(); 5630638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru String[] argv = { "-choice", "ONE"}; 564a3199885e5e515af41a01c4d693bf96f1dafbd67Adrian Muraru JCommander jc = new JCommander(args, argv); 5650638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru 5660638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru Assert.assertEquals(args.choice, ArgsEnum.ChoiceType.ONE); 567a3199885e5e515af41a01c4d693bf96f1dafbd67Adrian Muraru 568a3199885e5e515af41a01c4d693bf96f1dafbd67Adrian Muraru Assert.assertEquals(jc.getParameters().get(0).getDescription(), "Options: " + EnumSet.allOf((Class<? extends Enum>) ArgsEnum.ChoiceType.class)); 569a3199885e5e515af41a01c4d693bf96f1dafbd67Adrian Muraru 5700638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru } 5710638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru 5720638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru @Test(expectedExceptions = ParameterException.class) 5730638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru public void enumArgsFail() { 5740638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru ArgsEnum args = new ArgsEnum(); 5750638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru String[] argv = { "-choice", "A" }; 5760638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru new JCommander(args, argv); 5770638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru } 5780638723e74c48bf8960f1401d0c5d99f9b1292b0Adrian Muraru 5793e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust public void testListAndSplitters() { 5803e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust ArgsList al = new ArgsList(); 5813e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust JCommander j = new JCommander(al); 5823e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust j.parse("-groups", "a,b", "-ints", "41,42", "-hp", "localhost:1000;example.com:1001", 5833e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust "-hp2", "localhost:1000,example.com:1001", "-uppercase", "ab,cd"); 5843e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.groups.get(0), "a"); 5853e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.groups.get(1), "b"); 5863e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.ints.get(0).intValue(), 41); 5873e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.ints.get(1).intValue(), 42); 5883e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hostPorts.get(0).host, "localhost"); 5893e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hostPorts.get(0).port.intValue(), 1000); 5903e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hostPorts.get(1).host, "example.com"); 5913e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hostPorts.get(1).port.intValue(), 1001); 5923e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hp2.get(1).host, "example.com"); 5933e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.hp2.get(1).port.intValue(), 1001); 5943e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.uppercase.get(0), "AB"); 5953e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust Assert.assertEquals(al.uppercase.get(1), "CD"); 5963e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust } 5973e7cb52cbf4ca537cafb6617b20387225672ad1aCedric Beust 5984ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust @Test(expectedExceptions = ParameterException.class) 5994ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust public void shouldThrowIfUnknownOption() { 6004ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust class A { 6014ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust @Parameter(names = "-long") 6024ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust public long l; 6034ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust } 6044ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust A a = new A(); 6054ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust new JCommander(a).parse("-lon", "32"); 6064ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust } 6074ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust 608c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust @Test(expectedExceptions = ParameterException.class) 609c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust public void mainParameterShouldBeValidate() { 610c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust class V implements IParameterValidator { 611c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust 612c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust public void validate(String name, String value) throws ParameterException { 613c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust Assert.assertEquals("a", value); 614c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust } 615c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust } 616c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust 617c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust class A { 618c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust @Parameter(validateWith = V.class) 619c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust public List<String> m; 620c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust } 621c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust 622c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust A a = new A(); 623c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust new JCommander(a).parse("b"); 624c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust } 625c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust 6268ad02daa23243bf515009d16205465f1b811da81Cedric Beust @Parameters(commandNames = { "--configure" }) 6278ad02daa23243bf515009d16205465f1b811da81Cedric Beust public static class ConfigureArgs { 6288ad02daa23243bf515009d16205465f1b811da81Cedric Beust } 629c3507ebf6d4b118ebeb443f0da87a63543ab395aCedric Beust 6308ad02daa23243bf515009d16205465f1b811da81Cedric Beust public static class BaseArgs { 6318ad02daa23243bf515009d16205465f1b811da81Cedric Beust @Parameter(names = { "-h", "--help" }, description = "Show this help screen") 6328ad02daa23243bf515009d16205465f1b811da81Cedric Beust private boolean help = false; 6337e743acbff5277d087347bfba2409406865af8a0Cedric Beust 6348ad02daa23243bf515009d16205465f1b811da81Cedric Beust @Parameter(names = { "--version", "-version" }, description = "Show the program version") 6358ad02daa23243bf515009d16205465f1b811da81Cedric Beust private boolean version; 6368ad02daa23243bf515009d16205465f1b811da81Cedric Beust } 6378ad02daa23243bf515009d16205465f1b811da81Cedric Beust 6388ad02daa23243bf515009d16205465f1b811da81Cedric Beust public void commandsWithSamePrefixAsOptionsShouldWork() { 6398ad02daa23243bf515009d16205465f1b811da81Cedric Beust BaseArgs a = new BaseArgs(); 6408ad02daa23243bf515009d16205465f1b811da81Cedric Beust ConfigureArgs conf = new ConfigureArgs(); 6418ad02daa23243bf515009d16205465f1b811da81Cedric Beust JCommander jc = new JCommander(a); 6428ad02daa23243bf515009d16205465f1b811da81Cedric Beust jc.addCommand(conf); 6438ad02daa23243bf515009d16205465f1b811da81Cedric Beust jc.parse("--configure"); 6448ad02daa23243bf515009d16205465f1b811da81Cedric Beust } 6458ad02daa23243bf515009d16205465f1b811da81Cedric Beust 64639e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust // Tests: 64739e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust // required unparsed parameter 64839e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust @Test(enabled = false, 64939e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust description = "For some reason, this test still asks the password on stdin") 65039e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust public void askedRequiredPassword() { 65139e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust class A { 65239e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust @Parameter(names = { "--password", "-p" }, description = "Private key password", 65339e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust password = true, required = true) 65439e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust public String password; 65539e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust 65639e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust @Parameter(names = { "--port", "-o" }, description = "Port to bind server to", 65739e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust required = true) 65839e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust public int port; 65939e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust } 66039e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust A a = new A(); 66139e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust InputStream stdin = System.in; 66239e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust try { 66339e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust System.setIn(new ByteArrayInputStream("password".getBytes())); 66439e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust new JCommander(a,new String[]{"--port", "7","--password"}); 66539e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust Assert.assertEquals(a.port, 7); 66639e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust Assert.assertEquals(a.password, "password"); 66739e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust } finally { 66839e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust System.setIn(stdin); 66939e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust } 67039e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust } 67139e431ec5e9c2505973a976f62a91e738b85fe4cCedric Beust 6728ebf58f752ae0703b70af57cecfe584968442558Cedric Beust public void dynamicParameters() { 6738ebf58f752ae0703b70af57cecfe584968442558Cedric Beust class Command { 6748ebf58f752ae0703b70af57cecfe584968442558Cedric Beust @DynamicParameter(names = {"-P"}, description = "Additional command parameters") 6758ebf58f752ae0703b70af57cecfe584968442558Cedric Beust private Map<String, String> params = Maps.newHashMap(); 6768ebf58f752ae0703b70af57cecfe584968442558Cedric Beust } 6778ebf58f752ae0703b70af57cecfe584968442558Cedric Beust JCommander commander = new JCommander(); 6788ebf58f752ae0703b70af57cecfe584968442558Cedric Beust Command c = new Command(); 6798ebf58f752ae0703b70af57cecfe584968442558Cedric Beust commander.addCommand("command", c); 6808ebf58f752ae0703b70af57cecfe584968442558Cedric Beust commander.parse(new String[] { "command", "-Pparam='name=value'" }); 6818ebf58f752ae0703b70af57cecfe584968442558Cedric Beust Assert.assertEquals(c.params.get("param"), "'name=value'"); 6828ebf58f752ae0703b70af57cecfe584968442558Cedric Beust } 6838ebf58f752ae0703b70af57cecfe584968442558Cedric Beust 684ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust public void exeParser() { 685ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust class Params { 686ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust @Parameter( names= "-i") 687ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust private String inputFile; 688ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust } 689ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust 690ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust String args[] = { "-i", "" }; 691ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust Params p = new Params(); 692ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust new JCommander(p, args); 693ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust } 694ca0789ba868746845d31c2ee9e354d8bfbdeca6eCedric Beust 69574664b26b3b9cdaec4a683ec9666828cbc856e44Cedric Beust public void multiVariableArityList() { 69674664b26b3b9cdaec4a683ec9666828cbc856e44Cedric Beust class Params { 6975414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust @Parameter(names = "-paramA", description = "ParamA", variableArity = true) 6985414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust private List<String> paramA = Lists.newArrayList(); 6995414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust 7005414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust @Parameter(names = "-paramB", description = "ParamB", variableArity = true) 7015414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust private List<String> paramB = Lists.newArrayList(); 7025414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust } 7035414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust 7045414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust String args[] = { "-paramA", "a1", "a2", "-paramB", "b1", "b2", "b3" }; 7055414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust Params p = new Params(); 7065414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust new JCommander(p, args).parse(); 7075414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust Assert.assertEquals(p.paramA, Arrays.asList(new String[] { "a1", "a2" })); 7085414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust Assert.assertEquals(p.paramB, Arrays.asList(new String[] { "b1", "b2", "b3" })); 7095414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust } 7105414de6562cc1a597c0d522fc4889e0f4136306cCedric Beust 71161e65090c5495518a9a521149dbecbd17e1df193Cedric Beust @Test(enabled = false, 71261e65090c5495518a9a521149dbecbd17e1df193Cedric Beust description = "Need to double check that the command description is i18n'ed in the usage") 71361e65090c5495518a9a521149dbecbd17e1df193Cedric Beust public void commandKey() { 71461e65090c5495518a9a521149dbecbd17e1df193Cedric Beust @Parameters(resourceBundle = "MessageBundle", commandDescriptionKey = "command") 71561e65090c5495518a9a521149dbecbd17e1df193Cedric Beust class Args { 71661e65090c5495518a9a521149dbecbd17e1df193Cedric Beust @Parameter(names="-myoption", descriptionKey="myoption") 71761e65090c5495518a9a521149dbecbd17e1df193Cedric Beust private boolean option; 71861e65090c5495518a9a521149dbecbd17e1df193Cedric Beust } 71961e65090c5495518a9a521149dbecbd17e1df193Cedric Beust JCommander j = new JCommander(); 72061e65090c5495518a9a521149dbecbd17e1df193Cedric Beust Args a = new Args(); 72161e65090c5495518a9a521149dbecbd17e1df193Cedric Beust j.addCommand("comm", a); 72261e65090c5495518a9a521149dbecbd17e1df193Cedric Beust j.usage(); 72361e65090c5495518a9a521149dbecbd17e1df193Cedric Beust } 72461e65090c5495518a9a521149dbecbd17e1df193Cedric Beust 7258ad02daa23243bf515009d16205465f1b811da81Cedric Beust @Test(enabled = false) 7268ad02daa23243bf515009d16205465f1b811da81Cedric Beust public static void main(String[] args) throws Exception { 72761e65090c5495518a9a521149dbecbd17e1df193Cedric Beust new JCommanderTest().commandKey(); 7288ad02daa23243bf515009d16205465f1b811da81Cedric Beust// System.out.println("Help:" + a.help); 7298ad02daa23243bf515009d16205465f1b811da81Cedric Beust// System.out.println("A"); 7308ad02daa23243bf515009d16205465f1b811da81Cedric Beust// class A { 7318ad02daa23243bf515009d16205465f1b811da81Cedric Beust// @Parameter 7328ad02daa23243bf515009d16205465f1b811da81Cedric Beust// List<String> parameters; 7338ad02daa23243bf515009d16205465f1b811da81Cedric Beust// 7348ad02daa23243bf515009d16205465f1b811da81Cedric Beust// @Parameter(names = "-long") 7358ad02daa23243bf515009d16205465f1b811da81Cedric Beust// public long l; 7368ad02daa23243bf515009d16205465f1b811da81Cedric Beust// } 7378ad02daa23243bf515009d16205465f1b811da81Cedric Beust// A a = new A(); 7388ad02daa23243bf515009d16205465f1b811da81Cedric Beust// new JCommander(a).parse("-long", "32"); 7394ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// System.out.println(a.l); 7404ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// System.out.println(a.parameters); 7414ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// ArgsList al = new ArgsList(); 7424ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// JCommander j = new JCommander(al); 7434ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// j.setColumnSize(40); 7444ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// j.usage(); 7454ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// new JCommanderTest().testListAndSplitters(); 7464ba2a3c6a66626c4629266729a16e7f7e07b9ad0Cedric Beust// new JCommanderTest().converterArgs(); 747804498ec24662928bf06efcee6584d55fca3d898Cedric Beust } 748c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust 749c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // Tests: 750c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // required unparsed parameter 751e9229f961b3a5799f6798369afe26dec7960249Cedric Beust} 752