@Test
  public void ableToCreateUrlWithAnchors() {
    HelpUrlBuilder builder = createBuilder("prefix", "suffix").key("key").url("url#anchor");
    final HelpUrlMatcher matcher = new HelpUrlMatcher().key("key").url("prefixurlsuffix#anchor");
    assertThat(builder.build(), matcher);

    builder.url("url#");
    matcher.url("prefixurlsuffix#");
    assertThat(builder.build(), matcher);

    builder = createBuilder("prefix", null).key("key").url("url#anchor");
    matcher.url("prefixurl#anchor");
    assertThat(builder.build(), matcher);

    builder = createBuilder("prefix", null).key("key").url("empty#");
    matcher.url("prefixempty#");
    assertThat(builder.build(), matcher);

    builder = createBuilder("prefix", "suffix").key("key").url("#");
    matcher.url("prefixsuffix#");
    assertThat(builder.build(), matcher);

    builder = createBuilder().key("key").url("#ignoreme");
    matcher.url("#ignoreme");
    assertThat(builder.build(), matcher);
  }
  @Test
  public void blanksInterpretedAsBlanks() {
    HelpUrlBuilder builder = createBuilder().key("key");
    HelpUrlMatcher matcher = new HelpUrlMatcher().key("key");

    assertThat(builder.build(), matcher);

    List<String> emptys = Lists.newArrayList(null, "", "   ", "\t\r\n");

    for (String empty : emptys) {
      builder.title(empty);
      matcher.title(empty);
      assertThat(builder.build(), matcher);
    }

    for (String empty : emptys) {
      builder.alt(empty);
      matcher.alt(empty);
      assertThat(builder.build(), matcher);
    }

    for (String empty : emptys) {
      builder.url(empty);
      matcher.url(empty);
      assertThat(builder.build(), matcher);
    }
  }
  @Test
  public void ableToCreateUrlWithPrefixAndSuffix() {
    HelpUrlBuilder builder = createBuilder("prefix", "suffix").key("key").url("url");
    final HelpUrlMatcher matcher = new HelpUrlMatcher().key("key").url("prefixurlsuffix");

    assertThat(builder.build(), matcher);

    builder = createBuilder("    ", "suffix").key("key").url("url");
    matcher.url("    urlsuffix");

    assertThat(builder.build(), matcher);

    builder = createBuilder("start", null).key("key").url("url");
    matcher.url("starturl");

    assertThat(builder.build(), matcher);
  }
  // HIROL-62
  @Test
  public void ableToCreateUrlsWithBlankParameters() {
    List<String> emptys = Lists.newArrayList(null, "", "   ", "\t\r\n");
    for (String prefix : emptys) {
      for (String suffix : emptys) {
        final HelpUrlBuilder builder = createBuilder(prefix, suffix).key("key");
        HelpUrlMatcher matcher = new HelpUrlMatcher().key("key");

        if (prefix == null && suffix == null) {
          assertThat(builder.build(), matcher);
        } else {
          StringBuilder expectedUrl = new StringBuilder();
          if (prefix != null) {
            expectedUrl.append(prefix);
          }
          if (suffix != null) {
            expectedUrl.append(suffix);
          }
          assertThat(builder.build(), matcher.url(expectedUrl.toString()));
        }
      }
    }
  }
  @Test
  public void ableToCreateSimpleUrl() {
    HelpUrlBuilder builder = createBuilder().key("key").alt("alt").title("title").url("url");
    final HelpUrlMatcher matcher =
        new HelpUrlMatcher().url("url").key("key").alt("alt").title("title");

    assertThat(builder.build(), matcher);
    assertThat(builder.build(), matcher);

    builder.title("newtitle");
    matcher.title("newtitle");
    assertThat(builder.build(), matcher);

    builder.alt("newalt");
    matcher.alt("newalt");
    assertThat(builder.build(), matcher);

    builder.key("newKey");
    matcher.key("newKey");
    assertThat(builder.build(), matcher);

    builder.url("newUrl");
    matcher.url("newUrl");
    assertThat(builder.build(), matcher);

    builder.local(true);
    matcher.local(true);
    assertThat(builder.build(), matcher);
  }
  @Test
  public void ableToCopyBuilderClonesBuilderAndIsIndependent() {
    HelpUrlBuilder builder = createBuilder().key("key").alt("alt").title("title").url("url");
    final HelpUrlMatcher matcher =
        new HelpUrlMatcher().url("url").key("key").alt("alt").title("title");

    final HelpUrlBuilder builderCopy = builder.copy();
    final HelpUrlMatcher matcherCopy = matcher.copy();

    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcher);

    builder.title("newtitle");
    matcher.title("newtitle");
    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);

    builder.alt("newalt");
    matcher.alt("newalt");
    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);

    builder.key("newKey");
    matcher.key("newKey");
    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);

    builder.url("newUrl");
    matcher.url("newUrl");
    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);

    builder.local(true);
    matcher.local(true);
    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);

    builderCopy.url("url2").title("title2").local(false);
    matcherCopy.url("url2").title("title2").local(false);

    assertThat(builder.build(), matcher);
    assertThat(builderCopy.build(), matcherCopy);
  }