### Question:
DefaultDispatcher implements CommandDispatcher { @Override public void dispatch(@Nonnull String command, @Nonnull CommandContext context) { CommandInput input = CommandInput.parse(root, command); context.put(CommandInput.class, "input", input); CommandCallable callable = input.getCommand() .orElseThrow(() -> new UnknownCommandException( "Could not find command for input \"" + input + "\"" )); CommandArguments arguments = CommandArguments.of(input.getRemaining(), stringDelimiter); executor.execute(() -> callable.call(arguments, context)); } @Inject  DefaultDispatcher(
      CommandGroup root,
      @Nullable @StringDelimiter Character stringDelimiter,
      @Nullable @CommandExecutor Executor executor
  ); @Nonnull static CommandDispatcher create(@Nonnull CommandGroup root); @Nonnull static CommandDispatcher create(@Nonnull CommandGroup root, char stringDelimiter); @Nonnull static CommandDispatcher create(@Nonnull CommandGroup root, @Nonnull Executor executor); @Nonnull static CommandDispatcher create(
      @Nonnull CommandGroup root, char stringDelimiter, @Nonnull Executor executor); @Override void dispatch(@Nonnull String command, @Nonnull CommandContext context);  }### Answer:
@Test void testSimpleCommandDispatch() { CommandContext context = CommandContext.of(ImmutableMap.of("env", "test")); dispatcher.dispatch("foo\n \t bar \nbaz", context); assertTrue(command.executed, "Command was not executed"); assertEquals("baz", command.arguments.getRaw(), "command arguments were changed"); assertEquals(context, command.context, "command context was changed"); }