JCommanderTest.java revision c27a04a2e10667dff4390b25fa4224b58b291ca0
1e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpackage com.beust.jcommander; 2e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 3e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport org.testng.Assert; 4e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport org.testng.annotations.Test; 5e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 6e9229f961b3a5799f6798369afe26dec7960249Cedric Beustimport java.util.Arrays; 79b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.Locale; 89b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beustimport java.util.ResourceBundle; 9e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 10e9229f961b3a5799f6798369afe26dec7960249Cedric Beustpublic class JCommanderTest { 11e9229f961b3a5799f6798369afe26dec7960249Cedric Beust @Test 12e9229f961b3a5799f6798369afe26dec7960249Cedric Beust public void simpleArgs() { 1394fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 14cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust String[] argv = { "-debug", "-log", "2", "-groups", "unit", "a", "b", "c" }; 1594fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 16e9229f961b3a5799f6798369afe26dec7960249Cedric Beust 17cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust Assert.assertTrue(args.debug); 1894fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.verbose.intValue(), 2); 1994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.groups, "unit"); 2094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Assert.assertEquals(args.parameters, Arrays.asList("a", "b", "c")); 21e9229f961b3a5799f6798369afe26dec7960249Cedric Beust } 22696418a94157048544c44f405d757ede86eec926Cedric Beust 23696418a94157048544c44f405d757ede86eec926Cedric Beust /** 24696418a94157048544c44f405d757ede86eec926Cedric Beust * Make sure that if there are args with multiple names (e.g. "-log" and "-verbose"), 25696418a94157048544c44f405d757ede86eec926Cedric Beust * the usage will only display it once. 26696418a94157048544c44f405d757ede86eec926Cedric Beust */ 27696418a94157048544c44f405d757ede86eec926Cedric Beust @Test 28696418a94157048544c44f405d757ede86eec926Cedric Beust public void repeatedArgs() { 2994fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 30696418a94157048544c44f405d757ede86eec926Cedric Beust String[] argv = { "-log", "2" }; 3194fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust JCommander jc = new JCommander(args, argv); 32696418a94157048544c44f405d757ede86eec926Cedric Beust Assert.assertEquals(jc.getParameters().size(), 3); 33696418a94157048544c44f405d757ede86eec926Cedric Beust } 34696418a94157048544c44f405d757ede86eec926Cedric Beust 35dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 36dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Not specifying a required option should throw an exception. 37dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 38dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust @Test(expectedExceptions = ParameterException.class) 396734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void requiredFields1Fail() { 4094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 41dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust String[] argv = { "-debug" }; 4294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 43dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 44dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 45dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 46dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Required options with multiple names should work with all names. 47dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 48dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust @Test 49dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust public void requiredFields2() { 5094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 51dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust String[] argv = { "-log", "2" }; 5294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 53dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 54dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 55dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust /** 56dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust * Required options with multiple names should work with all names. 57dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust */ 58dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust @Test 59dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust public void requiredFields3() { 6094fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust Args1 args = new Args1(); 61dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust String[] argv = { "-verbose", "2" }; 6294fca5e6d4506c5b070b17db4063ad360a85d8fcCedric Beust new JCommander(args, argv); 63dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust } 64dc76d5707bd6f5b761772203e9d7c285846e8362Cedric Beust 656734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust private void i18n1(String bundleName, Locale locale, String expectedString) { 666734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ResourceBundle bundle = locale != null ? ResourceBundle.getBundle(bundleName, locale) 679b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust : null; 689b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 696734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ArgsI18N1 i18n = new ArgsI18N1(); 709b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust String[] argv = { "-host", "localhost" }; 719b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust JCommander jc = new JCommander(i18n, bundle, argv); 7214516e91e6be4ba1c3e7b573ea450e5c59925ecfCedric Beust// jc.usage(); 739b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 749b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 759b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust Assert.assertEquals(pd.getDescription(), expectedString); 769b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 779b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 789b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust @Test 799b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nNoLocale() { 806734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", null, "Host"); 819b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 829b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 839b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust @Test 849b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nUsLocale() { 856734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust i18n1("MessageBundle", new Locale("en", "US"), "Host"); 869b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 879b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 889b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust @Test 899b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust public void i18nFrLocale() { 90c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot i18n1("MessageBundle", new Locale("fr", "FR"), "Hôte"); 916734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust } 926734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust 936734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust @Test 946734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void i18nWithResourceAnnotation() { 956734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ArgsI18N2 i18n = new ArgsI18N2(); 966734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust String[] argv = { "-host", "localhost" }; 976734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust Locale.setDefault(new Locale("fr", "FR")); 986734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust JCommander jc = new JCommander(i18n, argv); 996734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust ParameterDescription pd = jc.getParameters().get(0); 100c27a04a2e10667dff4390b25fa4224b58b291ca0David Gageot Assert.assertEquals(pd.getDescription(), "Hôte"); 1019b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust } 1029b9a740c04d97ccbb5c643e55775cf9e9e6fc2d7Cedric Beust 103d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust @Test 104d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust public void multiObjects() { 105d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsMaster m = new ArgsMaster(); 106d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust ArgsSlave s = new ArgsSlave(); 107d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 108b945b741b5de0510ce39f8c793e31202070ef942Cedric Beust new JCommander(new Object[] { m , s }, argv); 109d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 110d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(m.master, "master"); 111d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust Assert.assertEquals(s.slave, "slave"); 112d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust } 113d4e3897873895131ae5ebef4e9552b15a9e804ddCedric Beust 1140c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust @Test(expectedExceptions = ParameterException.class) 1156734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void multiObjectsWithDuplicatesFail() { 1160c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsMaster m = new ArgsMaster(); 1170c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust ArgsSlave s = new ArgsSlaveBogus(); 1180c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust String[] argv = { "-master", "master", "-slave", "slave" }; 1190c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust new JCommander(new Object[] { m , s }, argv); 1200c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust } 1210c0b2226295308797b486e7dcc81d10497ad4886Cedric Beust 122a21262377768de124914e354e428ed6860828949Cedric Beust @Test 123f3b82e196a622a959374d7588688e74fe852a512Cedric Beust public void arityString() { 124f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 125a21262377768de124914e354e428ed6860828949Cedric Beust String[] argv = { "-pairs", "pair0", "pair1", "rest" }; 126a21262377768de124914e354e428ed6860828949Cedric Beust new JCommander(args, argv); 127a21262377768de124914e354e428ed6860828949Cedric Beust 128a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.size(), 2); 129a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(0), "pair0"); 130a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.pairs.get(1), "pair1"); 131a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.size(), 1); 132a21262377768de124914e354e428ed6860828949Cedric Beust Assert.assertEquals(args.rest.get(0), "rest"); 133a21262377768de124914e354e428ed6860828949Cedric Beust } 134a21262377768de124914e354e428ed6860828949Cedric Beust 135f3b82e196a622a959374d7588688e74fe852a512Cedric Beust @Test(expectedExceptions = ParameterException.class) 1366734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust public void arity1Fail() { 137f3b82e196a622a959374d7588688e74fe852a512Cedric Beust ArgsArityString args = new ArgsArityString(); 138f3b82e196a622a959374d7588688e74fe852a512Cedric Beust String[] argv = { "-pairs", "pair0" }; 139f3b82e196a622a959374d7588688e74fe852a512Cedric Beust new JCommander(args, argv); 140f3b82e196a622a959374d7588688e74fe852a512Cedric Beust } 141f3b82e196a622a959374d7588688e74fe852a512Cedric Beust 142cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust @Test(expectedExceptions = ParameterException.class) 143cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust public void multipleUnparsedFail() { 144cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust ArgsMultipleUnparsed args = new ArgsMultipleUnparsed(); 145cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust String[] argv = { }; 146cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust new JCommander(args, argv); 147cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust } 148cb91ef843854605fcde3b84ce91ec4d46205a47aCedric Beust 1495f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust @Test 1505f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust public void privateArgs() { 1515f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust ArgsPrivate args = new ArgsPrivate(); 1525f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust new JCommander(args, "-verbose", "3"); 1535f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust Assert.assertEquals(args.getVerbose().intValue(), 3); 1545f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust } 1555f00acc5afee348e6f3b3741d5e53ca01e508b3eCedric Beust 1565a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust @Test 1575a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust public void converterArgs() { 1585a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust ArgsConverter args = new ArgsConverter(); 1595a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust String fileName = "a"; 1605a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust new JCommander(args, "-file", "/tmp/" + fileName, "-days", "Tuesday,Thursday"); 1615a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.file.getName(), fileName); 1625a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.size(), 2); 1635a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.get(0), "Tuesday"); 1645a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust Assert.assertEquals(args.days.get(1), "Thursday"); 1655a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust } 1665a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust 167696418a94157048544c44f405d757ede86eec926Cedric Beust public static void main(String[] args) { 1685a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust// ArgsPassword a = new ArgsPassword(); 1695a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust// new JCommander(a, "-password"); 1705a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust// System.out.println("Received:" + a.password); 171d095e39e4a4ba659ec031bd7a4695d48502ba5ebCedric Beust// Assert.assertEquals(args.getVerbose().intValue(), 3); 1726734de3a3b73ec9fe6bbfe4f8ba1da9f57264587Cedric Beust new JCommanderTest().i18nWithResourceAnnotation(); 173d095e39e4a4ba659ec031bd7a4695d48502ba5ebCedric Beust// new JCommanderTest().multipleUnparsedFail(); 174696418a94157048544c44f405d757ede86eec926Cedric Beust } 175c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust 176c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // Tests: 177c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust // required unparsed parameter 178e9229f961b3a5799f6798369afe26dec7960249Cedric Beust} 179