/**
   * {@inheritDoc}
   *
   * @see junit.framework.TestCase#setUp()
   */
  @Override
  protected void setUp() throws Exception {
    super.setUp();

    this.databases.put(MAIN_WIKI_NAME, new HashMap<String, XWikiDocument>());

    XWiki xwiki =
        new XWiki() {
          public XWikiDocument getDocument(String fullname, XWikiContext context)
              throws XWikiException {
            return XWikiServletURLFactoryTest.this.getDocument(
                Utils.getComponent(DocumentReferenceResolver.class, "currentmixed")
                    .resolve(fullname));
          }

          public XWikiDocument getDocument(
              DocumentReference documentReference, XWikiContext context) throws XWikiException {
            return XWikiServletURLFactoryTest.this.getDocument(documentReference);
          }

          public String getXWikiPreference(
              String prefname, String defaultValue, XWikiContext context) {
            return defaultValue;
          }

          protected void registerWikiMacros() {}
        };
    xwiki.setConfig((this.config = new XWikiConfig()));
    xwiki.setDatabase(getContext().getDatabase());

    Mock mockXWikiRequest = mock(XWikiRequest.class, new Class[] {}, new Object[] {});
    mockXWikiRequest.stubs().method("getScheme").will(returnValue("http"));
    mockXWikiRequest
        .stubs()
        .method("isSecure")
        .will(
            new CustomStub("Implements ServletRequest.isSecure") {
              public Object invoke(Invocation invocation) throws Throwable {
                return secure;
              }
            });
    mockXWikiRequest.stubs().method("getServletPath").will(returnValue(""));
    mockXWikiRequest.stubs().method("getContextPath").will(returnValue("/xwiki"));
    mockXWikiRequest
        .stubs()
        .method("getHeader")
        .will(
            new CustomStub("Implements HttpServletRequest.getHeader") {
              public Object invoke(Invocation invocation) throws Throwable {
                String headerName = (String) invocation.parameterValues.get(0);
                return httpHeaders.get(headerName);
              }
            });

    getContext().setWiki(xwiki);
    getContext().setRequest((XWikiRequest) mockXWikiRequest.proxy());

    // Create sub-wikis.
    createWiki("wiki1");
    createWiki("wiki2");

    getContext().setURL(new URL("http://127.0.0.1/xwiki/view/InitialSpace/InitialPage"));

    this.urlFactory.init(getContext());
  }