public void renderHeaders()

in portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC15_Header.java [210:699]


   public void renderHeaders(HeaderRequest headerRequest,
         HeaderResponse headerResponse) throws PortletException, IOException {
      ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();

      StringWriter writer = new StringWriter();

      RenderParameters renderParams = headerRequest.getRenderParameters();
      String action = headerRequest.getParameter("inputval");
      Boolean successTr2 = false, successTr5 = false, successTr6 = false;
      Boolean successTr7 = false, successTr8 = false, successTr13 = false;

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters10 */
      /*
       * Details: "The portlet-container must not propagate parameters received
       * in an action or event request to subsequent header requests of the
       * portlet"
       */
      if (renderParams.getValue("actionURLTr0") == null
            && renderParams.getValue("tr0") != null
            && "true".equals(renderParams.getValue("tr0"))) {
         TestResult tr0 = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS10);
         tr0.setTcSuccess(true);
         tr0.writeTo(writer);
      } else {
         ActionURL aurl = headerResponse.createActionURL();
         aurl.setParameter("actionURLTr0", "true");
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS10, aurl);
         tb.writeTo(writer);
      }

      if (action != null) {
         if (action.equals(V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS13)) {
            /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters13 */
            /*
             * Details: "If a portlet receives a render request that is the
             * result of invoking a render URL targeting this portlet the render
             * parameters received with the render request must be the
             * parameters set on the render URL"
             */
            TestResult tr2 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS13);
            if (headerRequest.getParameter("renderURLTr2") != null
                  && headerRequest.getParameter("tr2") != null
                  && (headerRequest.getParameter("renderURLTr2").contains("tr2:" + headerRequest.getParameter("tr2")) ||
                      headerRequest.getParameter("renderURLTr2").contains("tr2=" + headerRequest.getParameter("tr2")))) {
               tr2.setTcSuccess(true);
               successTr2 = true;
            } else {
               tr2.appendTcDetail(
                     "Parameter renderURLTr2 is missing or does not contain tr2 parameter value.");
            }
            tr2.writeTo(writer);
         } else if (action
               .equals(V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS2)) {
            /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters2 */
            /* Details: "The parameters the request object returns must be */
            /* \"x-www-form-urlencoded\" decoded" */
            TestResult tr5 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS2);
            if (headerRequest.getParameter("tr5") != null
                  && headerRequest.getParameter("tr5").equals("true&<>'")) {
               tr5.setTcSuccess(true);
               successTr5 = true;
            }
            tr5.writeTo(writer);
         } else if (action
               .equals(V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS6)) {
            /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters6 */
            /*
             * Details: "The getParameterMap method must return an unmodifiable
             * Map object"
             */
            TestResult tr6 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS6);
            if (headerRequest.getParameterMap().containsKey("inputval")
                  && V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS6.equals(
                        headerRequest.getParameterMap().get("inputval")[0])) {
               String tr6TestStringArray[] = { "Modified Value" };
               try {
                  headerRequest.getParameterMap().put(
                      "inputval", tr6TestStringArray);
                  if (V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS6
                      .equals(
                          headerRequest.getParameterMap().get("inputval")[0])) {
                     tr6.setTcSuccess(true);
                     successTr6 = true;
                  }
               }
               catch (UnsupportedOperationException e) {
                  tr6.setTcSuccess(true);
                  successTr6 = true;
               }
            }
            tr6.writeTo(writer);
         } else if (action.equals(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS15)) {
            /*
             * TestCase:
             * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters15
             */
            /*
             * Details: "A map of private parameters can be obtained through the
             * getPrivateParameterMap method"
             */
            TestResult tr7 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS15);
            Map<String, String[]> privateParamMap = headerRequest
                  .getPrivateParameterMap();
            if (privateParamMap != null && privateParamMap.containsKey("tr7")
                  && privateParamMap.get("tr7")[0].equals("true")) {
               tr7.setTcSuccess(true);
               successTr7 = true;
            }
            tr7.writeTo(writer);
         } else if (action.equals(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS16)) {
            /*
             * TestCase:
             * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters16
             */
            /*
             * Details: "A map of public parameters can be obtained through the
             * getPublicParameterMap method"
             */
            TestResult tr8 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS16);
            if (headerRequest.getPublicParameterMap() != null && headerRequest
                  .getPublicParameterMap().containsKey("tckPRP3")) {
               tr8.setTcSuccess(true);
               successTr8 = true;
            } else {
               tr8.appendTcDetail("No public render parameter found.");
            }
            tr8.writeTo(writer);
         } else if (action.equals(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS13A)) {
            /*
             * TestCase:
             * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters13a
             */
            /* Details: "A public render parameter can be deleted using the */
            /* removePublicRenderParameter method on the PortletURL" */
            TestResult tr13 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS13A);
            if (headerRequest.getPublicParameterMap() != null && !headerRequest
                  .getPublicParameterMap().containsKey("tckPRP3")) {
               tr13.setTcSuccess(true);
               successTr13 = true;
            } else {
               tr13.appendTcDetail("Render parameter tckPRP3 is not removed.");
            }
            tr13.writeTo(writer);
         }
      }

      if (!successTr2) {
         /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters13 */
         /*
          * Details: "If a portlet receives a render request that is the result
          * of invoking a render URL targeting this portlet the render
          * parameters received with the render request must be the parameters
          * set on the render URL"
          */
         PortletURL rurl = headerResponse.createRenderURL();
         rurl.setParameters(headerRequest.getPrivateParameterMap());
         rurl.setParameter("tr2", "true");
         rurl.setParameter("renderURLTr2", rurl.toString());
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS13, rurl);
         tb.writeTo(writer);
      }

      if (!successTr5) {
         /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters2 */
         /* Details: "The parameters the request object returns must be */
         /* \"x-www-form-urlencoded\" decoded" */
         PortletURL purl = headerResponse.createRenderURL();
         purl.setParameter("tr5", "true&<>'");
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS2, purl);
         tb.writeTo(writer);
      }

      if (!successTr6) {
         /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters6 */
         /*
          * Details: "The getParameterMap method must return an unmodifiable Map
          * object"
          */
         PortletURL purl = headerResponse.createRenderURL();
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS6, purl);
         tb.writeTo(writer);
      }

      if (!successTr7) {
         /*
          * TestCase:
          * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters15
          */
         /* Details: "A map of private parameters can be obtained through the */
         /* getPrivateParameterMap method" */
         PortletURL purl = headerResponse.createRenderURL();
         purl.setParameter("tr7", "true");
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS15,
               purl);
         tb.writeTo(writer);
      }

      if (!successTr8) {
         /*
          * TestCase:
          * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters16
          */
         /* Details: "A map of public parameters can be obtained through the */
         /* getPublicParameterMap method" */
         if (headerRequest.getParameter("tckPRP3") == null) {
            PortletURL purl = headerResponse.createRenderURL();
            purl.setParameter("tckPRP3", "true");
            TestSetupLink tl = new TestSetupLink(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS16,
                  purl);
            tl.writeTo(writer);
         } else {
            PortletURL aurl = headerResponse.createRenderURL();
            aurl.setParameters(headerRequest.getPrivateParameterMap());
            TestButton tb = new TestButton(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS16,
                  aurl);
            tb.writeTo(writer);
         }
      }

      if (!successTr13) {
         /*
          * TestCase:
          * V3HeaderPortletTests_SPEC15_Header_publicRenderParameters13a
          */
         /* Details: "A public render parameter can be deleted using the */
         /* removePublicRenderParameter method on the PortletURL" */
         if (headerRequest.getParameter("tckPRP3") == null) {
            PortletURL purl = headerResponse.createRenderURL();
            purl.setParameter("tckPRP3", "true");
            TestSetupLink tl = new TestSetupLink(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS13A,
                  purl);
            tl.writeTo(writer);
         } else {
            PortletURL purl = headerResponse.createRenderURL();
            purl.setParameters(headerRequest.getPrivateParameterMap());
            purl.removePublicRenderParameter("tckPRP3");
            TestButton tb = new TestButton(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PUBLICRENDERPARAMETERS13A,
                  purl);
            tb.writeTo(writer);
         }
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_parameters15 */
      /* Details: "Render parameters get automatically cleared if the portlet */
      /* receives a processAction or processEvent call" */
      if (headerRequest.getParameter("tr3a") != null) {
         PortletURL aurl = headerResponse.createActionURL();
         aurl.setParameter("tr3a", "true");
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS15, aurl);
         tb.writeTo(writer);
      } else {
         if (headerRequest.getParameter("tr3b") != null
               && headerRequest.getParameter("tr3b").equals("true")) {
            TestResult tr3 = tcd.getTestResultFailed(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS15);
            tr3.setTcSuccess(true);
            tr3.writeTo(writer);
         } else {
            PortletURL purl = headerResponse.createRenderURL();
            purl.setParameter("tr3a", "true");
            TestSetupLink tl = new TestSetupLink(
                  V3HEADERPORTLETTESTS_SPEC15_HEADER_PARAMETERS15, purl);
            tl.writeTo(writer);
         }
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_properties1 */
      /*
       * Details: "The portlet can use the getProperty method to access single
       * portal property and optionally-available HTTP header values"
       */
      {
         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PROPERTIES1);
         if (headerRequest.getProperty("Accept") != null) {
            result.setTcSuccess(true);
         } else {
            result.appendTcDetail(
                  "Failed because Accept header is not found in request headers.");
         }
         result.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_properties2 */
      /*
       * Details: "The portlet can use the getProperties method to access
       * multiple portal property and optionally-available HTTP header values by
       * the same property name"
       */
      {
         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PROPERTIES2);
         if (headerRequest.getProperties("Accept").hasMoreElements()) {
            result.setTcSuccess(true);
         } else {
            result.appendTcDetail(
                  "Failed because Accept header is not found in request headers.");
         }
         result.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_properties3 */
      /*
       * Details: "The portlet can use the getPropertyNames method to obtain an
       * Enumeration of all available property names"
       */
      {

         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PROPERTIES3);
         if (headerRequest.getPropertyNames().hasMoreElements()) {
            result.setTcSuccess(true);
         } else {
            result.appendTcDetail(
                  "Failed because no header is not found in request headers.");
         }
         result.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_properties4 */
      /*
       * Details: "The portlet can access cookies provided by the current
       * request using the getCookies method"
       */
      {
         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_PROPERTIES4);
         if (headerRequest.getCookies().length > 0) {
            result.setTcSuccess(true);
         } else {
            result.appendTcDetail(
                  "Failed because no cookies are found in HeaderRequest object");
         }
         result.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_cookie8 */
      /*
       * Details: "Cookies set during the Header phase should be available to
       * the portlet during the Resource phase"
       */
      {
         Cookie c = new Cookie("header_tr0_cookie", "true");
         c.setMaxAge(100);
         c.setPath("/");
         headerResponse.addProperty(c);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_cookie9 */
      /*
       * Details: "Cookies set during the Header phase should be available to
       * the portlet during a subsequent Action phase"
       */
      if (headerRequest.getParameter("trCookie1") != null
            && headerRequest.getParameter("trCookie1").equals("true")) {
         TestResult tr1 = tcd
               .getTestResultFailed(V3HEADERPORTLETTESTS_SPEC15_HEADER_COOKIE9);
         tr1.setTcSuccess(true);
         tr1.writeTo(writer);
      } else {
         Cookie c = new Cookie("header_tr1_cookie", "true");
         c.setMaxAge(100);
         c.setPath("/");
         headerResponse.addProperty(c);
         PortletURL aurl = headerResponse.createActionURL();
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_COOKIE9, aurl);
         tb.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_cookie10 */
      /*
       * Details: "Cookies set during the Header phase should be available to
       * the portlet during a subsequent Render phase"
       */
      {
         Cookie c = new Cookie("header_tr2_cookie", "true");
         c.setMaxAge(100);
         c.setPath("/");
         headerResponse.addProperty(c);
         PortletURL rurl = headerResponse.createRenderURL();
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_COOKIE10, rurl);
         tb.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_cookie11 */
      /*
       * Details: "Cookies set during the Header phase should be available to
       * the portlet during a subsequent request triggered by a URL"
       */
      if (headerRequest.getParameter("tr3") != null
            && headerRequest.getParameter("tr3").equals("true")) {
         Cookie[] cookies = headerRequest.getCookies();

         StringBuilder txt = new StringBuilder(128);
         txt.append("<p>Debug info:");
         txt.append("<br>");
         txt.append("# Cookies: ").append(cookies.length).append("<br>");
         TestResult tr2 = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_COOKIE11);
         for (Cookie c : cookies) {
            txt.append("Name: ").append(c.getName());
            txt.append(", Value: ").append(c.getValue()).append("<br>");
            if (c.getName().equals("header_tr3_cookie")
                  && c.getValue().equals("true")) {
               txt.append("<br>").append("Found my cookie!").append("<br>");
               c.setMaxAge(0);
               c.setValue("");
               tr2.setTcSuccess(true);
            }
         }
         tr2.writeTo(writer);
         txt.append("</p>");
         writer.append(txt.toString());
      } else {
         Cookie c = new Cookie("header_tr3_cookie", "true");
         c.setMaxAge(100);
         c.setPath("/");
         headerResponse.addProperty(c);
         PortletURL rurl = headerResponse.createRenderURL();
         rurl.setParameter("tr3", "true");
         TestButton tb = new TestButton(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_COOKIE11, rurl);
         tb.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_contentType5 */
      /*
       * Details: "If the setContentType method is not called before the
       * getWriter or getPortletOutputStream method is used, the portlet
       * container uses the content type returned by getResponseContentType"
       */
      {
         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_CONTENTTYPE5);
         if (headerRequest.getResponseContentType() != null) {
            result.setTcSuccess(true);
            result.appendTcDetail(
                  "Content type is - " + headerRequest.getResponseContentType());
         } else {
            result.appendTcDetail(
                  "Failed because getResponseContentType() method returned null");
         }
         result.writeTo(writer);
      }

      /* TestCase: V3HeaderPortletTests_SPEC15_Header_characterEncoding4 */
      /*
       * Details: "If the portlet does not set the character encoding, the
       * portlet container uses UTF-8 as the default character encoding"
       */
      {
         TestResult result = tcd.getTestResultFailed(
               V3HEADERPORTLETTESTS_SPEC15_HEADER_CHARACTERENCODING4);
         if (headerResponse.getCharacterEncoding().equals("UTF-8")) {
            result.setTcSuccess(true);
         } else {
            result.appendTcDetail(
                  "Failed because default character encoding is not UTF-8 but "
                        + headerResponse.getCharacterEncoding());
         }
         result.writeTo(writer);
      }

      headerRequest.setAttribute(
            RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC15_Header",
            writer.toString());

   }