JCommanderTest.java revision d3b9e34aed415eba172befec79d2261c3ac38123
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
167d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust  public void booleanArity() {
168d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust    ArgsBooleanArity args = new ArgsBooleanArity();
169d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust    new JCommander(args, "-debug", "true");
170d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust    Assert.assertEquals(args.debug, Boolean.TRUE);
171d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust  }
172d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust
173696418a94157048544c44f405d757ede86eec926Cedric Beust  public static void main(String[] args) {
1745a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust//    ArgsPassword a = new ArgsPassword();
1755a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust//    new JCommander(a, "-password");
1765a8d2cda56e06eccac04f985cfb6df4886cb270eCedric Beust//    System.out.println("Received:" + a.password);
177d095e39e4a4ba659ec031bd7a4695d48502ba5ebCedric Beust//    Assert.assertEquals(args.getVerbose().intValue(), 3);
178d3b9e34aed415eba172befec79d2261c3ac38123Cedric Beust    new JCommanderTest().converterArgs();
179d095e39e4a4ba659ec031bd7a4695d48502ba5ebCedric Beust//    new JCommanderTest().multipleUnparsedFail();
180696418a94157048544c44f405d757ede86eec926Cedric Beust  }
181c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust
182c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust  // Tests:
183c3e28e12136391968250719b1627b6b4eaa196cdCedric Beust  // required unparsed parameter
184e9229f961b3a5799f6798369afe26dec7960249Cedric Beust}
185