@SuppressWarnings("unchecked")
  @Test
  public void asElevatedRequestShouldPropagateSubjectAndLoginContext() throws Exception {
    final DefaultHttpSession session = context.mock(DefaultHttpSession.class, "session");
    Subject subject = new Subject();
    final ResultAwareLoginContext loginContext =
        context.mock(ResultAwareLoginContext.class, "loginContext");

    final HttpRequestMessage expectedRequest = new HttpRequestMessage();
    expectedRequest.setVersion(HTTP_1_1);
    expectedRequest.setMethod(POST);
    final URI requestURI = URI.create("/path/;e/cte");
    expectedRequest.setRequestURI(requestURI);
    expectedRequest.setContent(EMPTY);

    context.checking(
        new Expectations() {
          {
            oneOf(session).getVersion();
            will(returnValue(HTTP_1_1));
            oneOf(session).getMethod();
            will(returnValue(POST));
            oneOf(session).getParameters();
            oneOf(session).getRequestURI();
            will(returnValue(requestURI));
            oneOf(session).isSecure();
            oneOf(session).getReadCookies();
            oneOf(session).getReadHeader("Content-Length");
            will(returnValue(null));
            allowing(session).getReadHeaders();
            will(returnValue(new HashMap<String, List<String>>()));
            oneOf(session).getSubject();
            will(returnValue(subject));
            oneOf(session).getLoginContext();
            will(returnValue(loginContext));
            oneOf(session).setReadHeaders(with(any(HashMap.class)));
          }
        });

    HttpRequestMessage request = HttpElevateEmulatedRequestFilter.asElevatedRequest(session);
    assertSame(subject, request.getSubject());
    assertSame(loginContext, request.getLoginContext());

    context.assertIsSatisfied();
  }