public void testMultiCommandUnknownCommand() {
   Terminal terminal = new MockTerminal();
   int count = randomIntBetween(2, 7);
   List<AtomicReference<Boolean>> executed = new ArrayList<>(count);
   for (int i = 0; i < count; i++) {
     executed.add(new AtomicReference<>(false));
   }
   NamedCommand[] cmds = new NamedCommand[count];
   for (int i = 0; i < count; i++) {
     final int index = i;
     cmds[i] =
         new NamedCommand("cmd" + index, terminal) {
           @Override
           public CliTool.ExitStatus execute(Settings settings, Environment env) throws Exception {
             executed.get(index).set(true);
             return OK;
           }
         };
   }
   MultiCmdTool tool = new MultiCmdTool("tool", terminal, cmds);
   CliTool.ExitStatus status = tool.execute("cmd" + count); // "cmd" + count doesn't exist
   assertThat(status, is(CliTool.ExitStatus.USAGE));
   for (int i = 0; i < count; i++) {
     assertThat(executed.get(i).get(), is(false));
   }
 }
 public void testMultiCommandCmdHelp() {
   CaptureOutputTerminal terminal = new CaptureOutputTerminal();
   NamedCommand[] cmds = new NamedCommand[2];
   cmds[0] =
       new NamedCommand("cmd0", terminal) {
         @Override
         public CliTool.ExitStatus execute(Settings settings, Environment env) throws Exception {
           return OK;
         }
       };
   cmds[1] =
       new NamedCommand("cmd1", terminal) {
         @Override
         public CliTool.ExitStatus execute(Settings settings, Environment env) throws Exception {
           return OK;
         }
       };
   MultiCmdTool tool = new MultiCmdTool("tool", terminal, cmds);
   CliTool.ExitStatus status = tool.execute(args("cmd1 -h"));
   assertStatus(status, CliTool.ExitStatus.OK_AND_EXIT);
   assertThat(terminal.getTerminalOutput(), hasSize(3));
   assertThat(terminal.getTerminalOutput(), hasItem(containsString("cmd1 help")));
 }