static Optional<String> execute(Experiment.Builder builder, String[] args) { return createMenu(builder).execute(args); }
/** * Test for adding an entire sub menu. */ @Test public void testAddSubMenu() { final Menu m = Menu.builder() .addSubMenu("l", "list.", menu) .addHelpOption("d", "delp", "Help") .build(); // help options are not copied assertFalse(m.containsOption("h")); assertFalse(m.containsOption("lh")); assertEquals(m.getOptionNames().size(), menu.getOptionNames().size()); }
/** * Same as {@link #execute(String...)} but catches all thrown * {@link CliException}s. If an exception is thrown it's message will be added * to the returned error message. * @param args The arguments to parse. * @return A string containing an error message or {@link Optional#absent()} * if no error occurred. */ public Optional<String> safeExecute(String... args) { try { return execute(args); } catch (final CliException e) { return Optional.of(Joiner.on("\n").join(e.getMessage(), printHelp())); } }
/** * Test help. */ @Test public void testHelp() { assertTrue(menu.execute("--help").isPresent()); assertTrue(menu.execute("-help").isPresent()); assertTrue(menu.execute("--h").isPresent()); assertTrue(menu.safeExecute("-h").isPresent()); }
/** * Tests correct parsing of enum. */ @Test public void testEnum() { final List<TestEnum> consumer = new ArrayList<>(); final Menu m = Menu.builder() .addHelpOption("h", "help", "Hi") .add(Option.builder("e", ArgumentParser.enumParser("testenum", TestEnum.class)).build(), consumer, new AddToListHandler<TestEnum>()) .build(); m.execute("-e", "A"); assertThat(consumer) .containsExactly(TestEnum.A); consumer.clear(); m.execute("-e", "B"); assertThat(consumer) .containsExactly(TestEnum.B); consumer.clear(); testFail(m, "e", CauseType.INVALID_ARG_FORMAT, "-e", "a"); testFail(m, "e", CauseType.INVALID_ARG_FORMAT, "-e", "NON_EXISTING_ENUM"); assertThat(consumer).isEmpty(); }
/** * Empty short name is not allowed. */ @Test(expected = IllegalArgumentException.class) public void testAddSubMenuInvalidShortName() { Menu.builder().addSubMenu("", "long", menu); }
/** * Test for setting a custom help formatter. */ @Test public void testCustomHelpFormatter() { final HelpFormatter defaultFormatter = DefaultHelpFormatter.INSTANCE; final HelpFormatter customFormatter = new DummyHelpFormatter(); final Menu m = Menu.builder() .addHelpOption("h", "help", "help") .commandLineSyntax("") .helpFormatter(customFormatter) .build(); assertEquals(" -h,--help help\n", defaultFormatter.format(m)); assertEquals("[h, help]", customFormatter.format(m)); assertNotEquals(defaultFormatter.format(m), m.printHelp()); assertEquals(customFormatter.format(m), m.printHelp()); }
while (it.hasNext()) { final String arg = it.next(); final Optional<OptionParser> optParser = parseOption(arg); return Optional.of(printHelp()); while (it.hasNext() && !parseOption(it.peek()).isPresent()) { arguments.add(it.next());
static Optional<String> safeExecute(Experiment.Builder builder, String[] args) { return createMenu(builder).safeExecute(args); }
/** * Construct a new {@link Menu}. * @return A new instance containing the options as defined by this builder. */ public Menu build() { checkArgument(addedHelpOption, "At least one help option is required for creating a menu."); return new Menu(this); } }
final List<List<TestEnum>> consumer = new ArrayList<>(); final Menu m = Menu .builder() .addHelpOption("h", "help", "Hi") .add(Option.builder("e", .build(); m.execute("-e", "A,B,C"); assertThat(consumer) .containsExactly(asList(TestEnum.A, TestEnum.B, TestEnum.C)) .inOrder(); consumer.clear(); m.execute("-e", "C,B,A"); assertThat(consumer) .containsExactly(asList(TestEnum.C, TestEnum.B, TestEnum.A)) consumer.clear(); m.execute("-e", "B"); assertThat(consumer) .containsExactly(asList(TestEnum.B));
/** * Empty long name is not allowed. */ @Test(expected = IllegalArgumentException.class) public void testAddSubMenuInvalidLongName() { Menu.builder().addSubMenu("short", "", menu); }
/** * Test the correct detection of a missing argument. */ @Test public void testMissingArg() { testFail("a", CauseType.MISSING_ARG, "-a"); assertTrue(menu.safeExecute("-a").isPresent()); // -aa has an optional argument, so this is valid assertFalse(menu.execute("-aa").isPresent()); }
static Optional<String> safeExecute(Experiment.Builder builder, String[] args) { return createMenu(builder).safeExecute(args); }
static Optional<String> execute(FileProvider.Builder builder, String[] args) { return createDefaultMenu(builder).execute(args); }
public void testPrefixedIntList() { final List<String> consumer = new ArrayList<>(); final Menu m = Menu.builder() .addHelpOption("h", "help", "Hi") .add(Option.builder("i", ArgumentParser.prefixedIntList("t")).build(), .build(); m.execute("-i", "t1,..,t5"); assertThat(consumer) .containsExactly("t1", "t2", "t3", "t4", "t5") m.execute("-i", "t1,..,t3,..,t5"); assertThat(consumer) .containsExactly("t1", "t2", "t3", "t4", "t5")
/** * Closing an empty group is not allowed. */ @Test(expected = IllegalArgumentException.class) public void failGroup1() { Menu.builder().openGroup().closeGroup(); }
static Optional<String> execute(FileProvider.Builder builder, String[] args) { return createDefaultMenu(builder).execute(args); }
/** * Constructs a menu wilt multiple groups and tests the behavior. */ @Test public void multipleGroups() { final Menu m = Menu.builder() .openGroup() .add(Option.builder("a").build(), list, dummyHandler()) .add(Option.builder("b").build(), list, dummyHandler()) .openGroup() .add(Option.builder("c").build(), list, dummyHandler()) .add(Option.builder("d").build(), list, dummyHandler()) .add(Option.builder("e").build(), list, dummyHandler()) .closeGroup() .addHelpOption("h", "help", "Print me") .build(); assertFalse(m.execute("-a", "-c").isPresent()); assertFalse(m.execute("-b", "-d").isPresent()); testFail(m, "a", CauseType.ALREADY_SELECTED, "-b", "-a"); testFail(m, "b", CauseType.ALREADY_SELECTED, "-d", "-a", "-b"); testFail(m, "c", CauseType.ALREADY_SELECTED, "-d", "-a", "-c"); }
/** * Check for group building. */ @Test(expected = IllegalStateException.class) public void testAddSubMenuInvalidGroup() { Menu.builder().openGroup().addSubMenu("short", "long", menu); }