@Test
  public void macrosFromDefaultStrings() throws Exception {
    WikiDocument doc = new WikiDocument();

    WikiDocumentDefaults defaults =
        new WikiDocumentDefaults() {
          @Override
          public String[] getContentMacrosAsString() {
            return new String[] {"contentMacro1", "contentMacro2"};
          }

          @Override
          public String getContentText() {
            return "foo";
          }

          @Override
          public String[] getHeaderMacrosAsString() {
            return new String[] {"headerMacro1", "headerMacro2"};
          }

          @Override
          public String getHeaderText() {
            return "bar";
          }

          @Override
          public String[] getFooterMacrosAsString() {
            return new String[] {"footerMacro1", "footerMacro2"};
          }

          @Override
          public String getFooterText() {
            return "baz";
          }
        };
    doc.setDefaults(defaults);

    assert doc.getContentMacros().size() == 2;
    assert doc.getContentMacrosString().contains("contentMacro1");
    assert doc.getContentMacrosString().contains("contentMacro1");
    assert doc.getContent().contains("[<=contentMacro1]");
    assert doc.getContent().contains("[<=contentMacro2]");
    assert doc.getContent().indexOf("foo") == doc.getContent().length() - 3;

    assert doc.getHeaderMacros().size() == 2;
    assert doc.getHeaderMacrosString().contains("headerMacro1");
    assert doc.getHeaderMacrosString().contains("headerMacro2");
    assert doc.getHeader().contains("[<=headerMacro1]");
    assert doc.getHeader().contains("[<=headerMacro2]");
    assert doc.getHeader().indexOf("bar") == doc.getHeader().length() - 3;

    assert doc.getFooterMacros().size() == 2;
    assert doc.getFooterMacrosString().contains("footerMacro1");
    assert doc.getFooterMacrosString().contains("footerMacro2");
    assert doc.getFooter().contains("[<=footerMacro1]");
    assert doc.getFooter().contains("[<=footerMacro2]");
    assert doc.getFooter().indexOf("baz") == 0;
  }
  @Test
  public void macrosFromDefaultTypesafe() throws Exception {
    WikiDocument doc = new WikiDocument();

    WikiDocumentDefaults defaults =
        new WikiDocumentDefaults() {
          @Override
          public List<WikiTextMacro> getContentMacros() {
            return new ArrayList<WikiTextMacro>() {
              {
                add(new WikiTextMacro("contentMacro1", 0));
                add(new WikiTextMacro("contentMacro2", 1));
              }
            };
          }

          @Override
          public String getContentText() {
            return "foo";
          }

          @Override
          public List<WikiTextMacro> getHeaderMacros() {
            return new ArrayList<WikiTextMacro>() {
              {
                add(new WikiTextMacro("headerMacro1", 0));
                add(new WikiTextMacro("headerMacro2", 1));
              }
            };
          }

          @Override
          public String getHeaderText() {
            return "bar";
          }

          @Override
          public List<WikiTextMacro> getFooterMacros() {
            return new ArrayList<WikiTextMacro>() {
              {
                add(new WikiTextMacro("footerMacro1", 0));
                add(new WikiTextMacro("footerMacro2", 1));
              }
            };
          }

          @Override
          public String getFooterText() {
            return "baz";
          }
        };
    doc.setDefaults(defaults);

    assert doc.getContentMacros().size() == 2;
    assert doc.getContentMacrosString().contains("contentMacro1");
    assert doc.getContentMacrosString().contains("contentMacro1");
    assert doc.getContent().contains("[<=contentMacro1]");
    assert doc.getContent().contains("[<=contentMacro2]");
    assert doc.getContent().indexOf("foo") == doc.getContent().length() - 3;

    assert doc.getHeaderMacros().size() == 2;
    assert doc.getHeaderMacrosString().contains("headerMacro1");
    assert doc.getHeaderMacrosString().contains("headerMacro2");
    assert doc.getHeader().contains("[<=headerMacro1]");
    assert doc.getHeader().contains("[<=headerMacro2]");
    assert doc.getHeader().indexOf("bar") == doc.getHeader().length() - 3;

    assert doc.getFooterMacros().size() == 2;
    assert doc.getFooterMacrosString().contains("footerMacro1");
    assert doc.getFooterMacrosString().contains("footerMacro2");
    assert doc.getFooter().contains("[<=footerMacro1]");
    assert doc.getFooter().contains("[<=footerMacro2]");
    assert doc.getFooter().indexOf("baz") == 0;
  }