Uploaded image for project: 'Commons CLI'
  1. Commons CLI
  2. CLI-158

deafult arguments only works if no arguments are submitted

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.0
    • Fix Version/s: 2.0
    • Component/s: CLI-2.x
    • Labels:
      None

      Description

      When using multple arguments and defaults, the behaviour is counter-intuitive and will only pick up a default if no args are passed in.

      For instance in the code below I have set up so 0, 1, or 2 args may bve accepted, with defaults 100 and 1000.

      I expect it to behave as follows.
      1. for 2 args, 1 and 2 the values should be 1 and 2. This works as expected.
      2. for 0 args passed in the values should be 100 and 1000, picking up both of the defaults. This works as expected

      3. for 1 arg passed in the values should be 1 and 1000, so the second argument picks up the second default value. The valuse become just 1, which is not as expected..

      Currently, in the second case will only return 1 and ignore the defaults.

      public void testSingleOptionSingleArgument() throws Exception {
      String defaulValue1 = "100";
      String defaultValue2 = "1000";
      final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
      final ArgumentBuilder abuilder = new ArgumentBuilder();
      final GroupBuilder gbuilder = new GroupBuilder();

      DefaultOption bOption = obuilder.withShortName("b")
      .withLongName("b")
      .withArgument(abuilder.withName("b")
      .withMinimum(0)
      .withMaximum(2)
      .withDefault(defaulValue1)
      .withDefault(defaultValue2)
      .create())
      .create();

      Group options = gbuilder
      .withName("options")
      .withOption(bOption)
      .create();

      Parser parser = new Parser();
      parser.setHelpTrigger("--help");
      parser.setGroup(options);
      String enteredValue1 = "1";
      String[] args = new String[]

      {"-b", enteredValue1}

      ;
      CommandLine cl = parser.parse(args);
      CommandLine cmd = cl;
      assertNotNull(cmd);
      List b = cmd.getValues("-b");
      assertEquals("[" + enteredValue1 + "]", b + "");
      }

        Attachments

        1. cli_158.r676502.patch
          7 kB
          Tobias Bocanegra

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              andrew.oxenburgh Andrew Oxenburgh
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 2h
                2h
                Remaining:
                Remaining Estimate - 2h
                2h
                Logged:
                Time Spent - Not Specified
                Not Specified