You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by as...@apache.org on 2018/03/08 18:42:38 UTC

portals-pluto git commit: PLUTO-696 TCK: Contesting V2 tests that expect PortletURL.setParameter methods to remove the value when null is passed

Repository: portals-pluto
Updated Branches:
  refs/heads/master 20a312be1 -> 8d5aeab34


PLUTO-696 TCK: Contesting V2 tests that expect PortletURL.setParameter methods to remove the value when null is passed


Project: http://git-wip-us.apache.org/repos/asf/portals-pluto/repo
Commit: http://git-wip-us.apache.org/repos/asf/portals-pluto/commit/8d5aeab3
Tree: http://git-wip-us.apache.org/repos/asf/portals-pluto/tree/8d5aeab3
Diff: http://git-wip-us.apache.org/repos/asf/portals-pluto/diff/8d5aeab3

Branch: refs/heads/master
Commit: 8d5aeab347e25f05fae73f0acb7df9ea70949437
Parents: 20a312b
Author: Neil Griffin <ne...@gmail.com>
Authored: Thu Mar 8 13:41:58 2018 -0500
Committer: Neil Griffin <ne...@gmail.com>
Committed: Thu Mar 8 13:41:58 2018 -0500

----------------------------------------------------------------------
 .../pluto/container/PortletResponseContext.java |   4 +-
 .../pluto/container/driver/PortletServlet3.java |   4 +-
 .../pluto/container/impl/ActionURLImpl.java     |   2 +-
 .../pluto/container/impl/BaseURLImpl.java       |  22 +++-
 .../pluto/container/impl/PortletURLImpl.java    |   4 -
 .../pluto/container/impl/RenderURLImpl.java     |   1 -
 .../pluto/container/impl/ResourceURLImpl.java   |   1 -
 .../container/PortletResponseContextImpl.java   |  10 +-
 .../URLTests_BaseURL_ApiRenderActurl.java       | 119 ++++--------------
 .../URLTests_BaseURL_ApiRenderRenurl.java       |  67 ++++------
 .../URLTests_BaseURL_ApiRenderResurl.java       |  89 ++++---------
 .../tck/portlets/URLTests_ActionURL.java        | 126 +++++++++++++++++++
 .../tck/portlets/URLTests_RenderURL.java        |  69 ++++++++++
 .../tck/portlets/URLTests_ResourceURL.java      |  85 +++++++++++++
 .../portlet/tck/util/ModuleTestCaseDetails.java |  14 ++-
 .../tck/beans/JSR286ApiTestCaseDetails.java     |  12 +-
 16 files changed, 404 insertions(+), 225 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container-api/src/main/java/org/apache/pluto/container/PortletResponseContext.java
----------------------------------------------------------------------
diff --git a/pluto-container-api/src/main/java/org/apache/pluto/container/PortletResponseContext.java b/pluto-container-api/src/main/java/org/apache/pluto/container/PortletResponseContext.java
index 4462fca..ab4a4a2 100644
--- a/pluto-container-api/src/main/java/org/apache/pluto/container/PortletResponseContext.java
+++ b/pluto-container-api/src/main/java/org/apache/pluto/container/PortletResponseContext.java
@@ -18,6 +18,7 @@ package org.apache.pluto.container;
 
 import java.util.Collection;
 
+import javax.portlet.PortletConfig;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -32,10 +33,11 @@ import org.w3c.dom.Element;
  */
 public interface PortletResponseContext
 {
-    void init(HttpServletRequest servletRequest, HttpServletResponse servletResponse);
+    void init(PortletConfig portletConfig, HttpServletRequest servletRequest, HttpServletResponse servletResponse);
     PortletContainer getContainer();
     HttpServletRequest getContainerRequest();
     HttpServletResponse getContainerResponse();
+    PortletConfig getPortletConfig();
     HttpServletRequest getServletRequest();
     HttpServletResponse getServletResponse();
     PortletWindow getPortletWindow();

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container-driver-api/src/main/java/org/apache/pluto/container/driver/PortletServlet3.java
----------------------------------------------------------------------
diff --git a/pluto-container-driver-api/src/main/java/org/apache/pluto/container/driver/PortletServlet3.java b/pluto-container-driver-api/src/main/java/org/apache/pluto/container/driver/PortletServlet3.java
index de3bf94..aeeea83 100644
--- a/pluto-container-driver-api/src/main/java/org/apache/pluto/container/driver/PortletServlet3.java
+++ b/pluto-container-driver-api/src/main/java/org/apache/pluto/container/driver/PortletServlet3.java
@@ -447,7 +447,7 @@ public class PortletServlet3 extends HttpServlet {
 
             requestContext.init(portletConfig, getServletContext(), hreq, hresp, responseContext);
             requestContext.setAsyncServletRequest(request);       // store original request
-            responseContext.init(hreq, hresp);
+            responseContext.init(portletConfig, hreq, hresp);
             
          } else {
             LOG.debug("Couldn't find the portlet async wrapper.");
@@ -462,7 +462,7 @@ public class PortletServlet3 extends HttpServlet {
          
          requestContext.init(portletConfig, getServletContext(), request, response, responseContext);
          requestContext.setExecutingRequestBody(true);
-         responseContext.init(request, response);
+         responseContext.init(portletConfig, request, response);
 
          // enable contextual support
          beforeInvoke(portletRequest, portletResponse, portletConfig);

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container/src/main/java/org/apache/pluto/container/impl/ActionURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/impl/ActionURLImpl.java b/pluto-container/src/main/java/org/apache/pluto/container/impl/ActionURLImpl.java
index 6c9f6fd..b1eda62 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/impl/ActionURLImpl.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/impl/ActionURLImpl.java
@@ -33,7 +33,7 @@ public class ActionURLImpl extends PortletURLImpl implements ActionURL {
 
    /**
     * @param responseContext
-    * @param urlProvider
+    * @param copy
     */
    public ActionURLImpl(PortletMimeResponseContext responseContext, Copy copy) {
       super(responseContext, 

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container/src/main/java/org/apache/pluto/container/impl/BaseURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/impl/BaseURLImpl.java b/pluto-container/src/main/java/org/apache/pluto/container/impl/BaseURLImpl.java
index 1fc6cef..8b7785d 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/impl/BaseURLImpl.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/impl/BaseURLImpl.java
@@ -31,6 +31,8 @@ import javax.portlet.ActionURL;
 import javax.portlet.BaseURL;
 import javax.portlet.MimeResponse.Copy;
 import javax.portlet.PortalContext;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
 import javax.portlet.PortletMode;
 import javax.portlet.PortletSecurityException;
 import javax.portlet.PortletURLGenerationListener;
@@ -226,7 +228,12 @@ public abstract class BaseURLImpl implements BaseURL {
    public void setParameter(String name, String value) {
       ArgumentUtility.validateNotEmpty("name", name);
       if (value == null) {
-         urlProvider.removeParameter(windowId, name);
+         if (getPortletMajorVersion() < 3) {
+            throw new IllegalArgumentException();
+         }
+         else {
+            urlProvider.removeParameter(windowId, name);
+         }
       } else {
          String[] values = new String[] { value };
          urlProvider.setParameter(windowId, name, values);
@@ -239,7 +246,12 @@ public abstract class BaseURLImpl implements BaseURL {
    public void setParameter(String name, String... values) {
       ArgumentUtility.validateNotEmpty("name", name);
       if (values == null) {
-         urlProvider.removeParameter(windowId, name);
+         if (getPortletMajorVersion() < 3) {
+            throw new IllegalArgumentException();
+         }
+         else {
+            urlProvider.removeParameter(windowId, name);
+         }
       } else {
          urlProvider.setParameter(windowId, name, values.clone());
       }
@@ -316,4 +328,10 @@ public abstract class BaseURLImpl implements BaseURL {
       urlProvider.setSecure(secure);
    }
 
+   private int getPortletMajorVersion() {
+      PortletConfig portletConfig = responseContext.getPortletConfig();
+      PortletContext portletContext = portletConfig.getPortletContext();
+      return portletContext.getEffectiveMajorVersion();
+   }
+
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletURLImpl.java b/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletURLImpl.java
index a6f93ed..0940130 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletURLImpl.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/impl/PortletURLImpl.java
@@ -56,10 +56,6 @@ public abstract class PortletURLImpl extends BaseURLImpl implements PortletURL {
    // Constructors
    // ------------------------------------------------------------
 
-   public PortletURLImpl(PortletResponseContext responseContext, PortletURLProvider urlProvider) {
-      super(responseContext, urlProvider);
-   }
-
    public PortletURLImpl(PortletResponseContext responseContext,
          PortletURLProvider portletURLProvider, Copy copy) {
       super(responseContext, portletURLProvider, copy);

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderURLImpl.java b/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderURLImpl.java
index 9aee468..4fc4402 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderURLImpl.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/impl/RenderURLImpl.java
@@ -35,7 +35,6 @@ public class RenderURLImpl extends PortletURLImpl implements RenderURL {
    /**
     * @param responseContext
     * @param copy 
-    * @param urlProvider
     */
    public RenderURLImpl(PortletResponseContext responseContext, Copy copy) {
       super(responseContext,

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceURLImpl.java
----------------------------------------------------------------------
diff --git a/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceURLImpl.java b/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceURLImpl.java
index ee9d6b9..499ce28 100644
--- a/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceURLImpl.java
+++ b/pluto-container/src/main/java/org/apache/pluto/container/impl/ResourceURLImpl.java
@@ -35,7 +35,6 @@ public class ResourceURLImpl extends BaseURLImpl implements ResourceURL {
 
    /**
     * @param responseContext
-    * @param type
     */
    public ResourceURLImpl(PortletMimeResponseContext responseContext) {
       super(responseContext, 

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletResponseContextImpl.java
----------------------------------------------------------------------
diff --git a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletResponseContextImpl.java b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletResponseContextImpl.java
index 25a5516..e69c66c 100644
--- a/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletResponseContextImpl.java
+++ b/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletResponseContextImpl.java
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.portlet.MimeResponse;
+import javax.portlet.PortletConfig;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -64,6 +65,7 @@ public abstract class PortletResponseContextImpl implements PortletResponseConte
    private PortletContainer         container;
    private HttpServletRequest       containerRequest;
    private HttpServletResponse      containerResponse;
+   private PortletConfig            portletConfig;
    private HttpServletRequest       servletRequest;
    private HttpServletResponse      servletResponse;
    private PortletWindow            window;
@@ -107,6 +109,11 @@ public abstract class PortletResponseContextImpl implements PortletResponseConte
       return requestContext;
    }
 
+   @Override
+   public PortletConfig getPortletConfig() {
+      return portletConfig;
+   }
+
    public String getLifecycle() {
       return lifecycle;
    }
@@ -154,7 +161,8 @@ public abstract class PortletResponseContextImpl implements PortletResponseConte
       return released;
    }
 
-   public void init(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
+   public void init(PortletConfig portletConfig, HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
+      this.portletConfig = portletConfig;
       this.servletRequest = servletRequest;
       this.servletResponse = servletResponse;
    }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderActurl.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderActurl.java b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderActurl.java
index c2125e7..bbd60aa 100644
--- a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderActurl.java
+++ b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderActurl.java
@@ -172,28 +172,6 @@ public class URLTests_BaseURL_ApiRenderActurl implements Portlet {
       }
 
       // evaluate results for test case
-      // V2URLTests_BaseURL_ApiRenderActurl_setParameterA7
-      {
-         JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
-         TestResult tr3 = tcd.getTestResultFailed(
-               V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA7);
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't defined (test case error)
-         if (tcval != null && tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderActurl_setParameterA7")) {
-            String aval = portletReq.getParameter("parm1");
-            String eval = null;
-            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
-                  tr3);
-            PortletSession ps = portletReq.getPortletSession();
-            ps.setAttribute(
-                  RESULT_ATTR_PREFIX
-                        + "V2URLTests_BaseURL_ApiRenderActurl_setParameterA7",
-                  tr3);
-         }
-      }
-
-      // evaluate results for test case
       // V2URLTests_BaseURL_ApiRenderActurl_setParameterB1
       {
          JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
@@ -257,27 +235,6 @@ public class URLTests_BaseURL_ApiRenderActurl implements Portlet {
       }
 
       // evaluate results for test case
-      // V2URLTests_BaseURL_ApiRenderActurl_setParameterB7
-      {
-         JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
-         TestResult tr8 = tcd.getTestResultFailed(
-               V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB7);
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't defined (test case error)
-         if (tcval != null && tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderActurl_setParameterB7")) {
-            String[] aval = portletReq.getParameterValues("parm1");
-            String[] eval = null;
-            CompareUtils.arraysEqual("Request", aval, " expected: ", eval, tr8);
-            PortletSession ps = portletReq.getPortletSession();
-            ps.setAttribute(
-                  RESULT_ATTR_PREFIX
-                        + "V2URLTests_BaseURL_ApiRenderActurl_setParameterB7",
-                  tr8);
-         }
-      }
-
-      // evaluate results for test case
       // V2URLTests_BaseURL_ApiRenderActurl_setParameters1
       {
          JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
@@ -612,35 +569,19 @@ public class URLTests_BaseURL_ApiRenderActurl implements Portlet {
       tr2.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderActurl_setParameterA7 */
-      /* Details: "Method setParameter(String, String): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr3 = tcd.getTestResultFailed(
-            V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA7);
+          V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA7);
       try {
-         PortletURL turl = portletResp.createActionURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderActurl_setParameterA7");
-         turl.setParameter("parm1", "val1");
-         turl.setParameter("parm1", (String) null);
-
-         // add the execution button for an action request
-         TestButton tb = new TestButton(
-               "V2URLTests_BaseURL_ApiRenderActurl_setParameterA7", turl);
-         tb.writeTo(writer);
-
-         // display evaluated results
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderActurl_setParameterA7")) {
-            PortletSession ps = portletReq.getPortletSession();
-            TestResult tmp = (TestResult) ps.getAttribute(RESULT_ATTR_PREFIX
-                  + "V2URLTests_BaseURL_ApiRenderActurl_setParameterA7");
-            if (tmp != null) {
-               tr3 = tmp;
-               ps.removeAttribute(RESULT_ATTR_PREFIX
-                     + "V2URLTests_BaseURL_ApiRenderActurl_setParameterA7");
-            }
+         try {
+            PortletURL turl = portletResp.createActionURL();
+            turl.setParameter("parm1", (String) null);
+            tr3.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr3.setTcSuccess(true);
+         } catch (Exception e) {
+            tr3.appendTcDetail(e);
          }
       } catch (Exception e) {
          tr3.appendTcDetail(e);
@@ -774,35 +715,19 @@ public class URLTests_BaseURL_ApiRenderActurl implements Portlet {
       tr7.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderActurl_setParameterB7 */
-      /* Details: "Method setParameter(String, String[]): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String[]): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr8 = tcd.getTestResultFailed(
-            V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB7);
+          V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB7);
       try {
-         PortletURL turl = portletResp.createActionURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderActurl_setParameterB7");
-         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
-         turl.setParameter("parm1", (String[]) null);
-
-         // add the execution button for an action request
-         TestButton tb = new TestButton(
-               "V2URLTests_BaseURL_ApiRenderActurl_setParameterB7", turl);
-         tb.writeTo(writer);
-
-         // display evaluated results
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderActurl_setParameterB7")) {
-            PortletSession ps = portletReq.getPortletSession();
-            TestResult tmp = (TestResult) ps.getAttribute(RESULT_ATTR_PREFIX
-                  + "V2URLTests_BaseURL_ApiRenderActurl_setParameterB7");
-            if (tmp != null) {
-               tr8 = tmp;
-               ps.removeAttribute(RESULT_ATTR_PREFIX
-                     + "V2URLTests_BaseURL_ApiRenderActurl_setParameterB7");
-            }
+         try {
+            PortletURL turl = portletResp.createActionURL();
+            turl.setParameter("parm1", (String[]) null);
+            tr8.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr8.setTcSuccess(true);
+         } catch (Exception e) {
+            tr8.appendTcDetail(e);
          }
       } catch (Exception e) {
          tr8.appendTcDetail(e);

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderRenurl.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderRenurl.java b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderRenurl.java
index 8bbedeb..fdda938 100644
--- a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderRenurl.java
+++ b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderRenurl.java
@@ -246,31 +246,19 @@ public class URLTests_BaseURL_ApiRenderRenurl implements Portlet {
       tr3.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderRenurl_setParameterA7 */
-      /* Details: "Method setParameter(String, String): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr4 = tcd.getTestResultFailed(
-            V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERA7);
+          V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERA7);
       try {
-         PortletURL turl = portletResp.createRenderURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderRenurl_setParameterA7");
-         turl.setParameter("parm1", "val1");
-         turl.setParameter("parm1", (String) null);
-
-         // add the execution link
-         TestLink tl = new TestLink(
-               "V2URLTests_BaseURL_ApiRenderRenurl_setParameterA7", turl);
-         tl.writeTo(writer);
-
-         // evaluate results
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderRenurl_setParameterA7")) {
-            String aval = portletReq.getParameter("parm1");
-            String eval = null;
-            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
-                  tr4);
+         try {
+            PortletURL turl = portletResp.createRenderURL();
+            turl.setParameter("parm1", (String) null);
+            tr4.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr4.setTcSuccess(true);
+         } catch (Exception e) {
+            tr4.appendTcDetail(e);
          }
       } catch (Exception e) {
          tr4.appendTcDetail(e);
@@ -419,31 +407,20 @@ public class URLTests_BaseURL_ApiRenderRenurl implements Portlet {
       tr9.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderRenurl_setParameterB7 */
-      /* Details: "Method setParameter(String, String[]): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String[]): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr10 = tcd.getTestResultFailed(
             V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERB7);
       try {
-         PortletURL turl = portletResp.createRenderURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderRenurl_setParameterB7");
-         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
-         turl.setParameter("parm1", (String[]) null);
-
-         // add the execution link
-         TestLink tl = new TestLink(
-               "V2URLTests_BaseURL_ApiRenderRenurl_setParameterB7", turl);
-         tl.writeTo(writer);
-
-         // evaluate results
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderRenurl_setParameterB7")) {
-            String[] aval = portletReq.getParameterValues("parm1");
-            String[] eval = null;
-            CompareUtils.arraysEqual("Request", aval, " expected: ", eval,
-                  tr10);
+         try {
+            PortletURL turl = portletResp.createRenderURL();
+            turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
+            turl.setParameter("parm1", (String[]) null);
+            tr10.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr10.setTcSuccess(true);
+         } catch (Exception e) {
+            tr10.appendTcDetail(e);
          }
       } catch (Exception e) {
          tr10.appendTcDetail(e);

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderResurl.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderResurl.java b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderResurl.java
index 4096dca..69899f8 100644
--- a/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderResurl.java
+++ b/portlet-tck_3.0/V2URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_BaseURL_ApiRenderResurl.java
@@ -176,24 +176,6 @@ public class URLTests_BaseURL_ApiRenderResurl
       }
 
       // evaluate results for test case
-      // V2URLTests_BaseURL_ApiRenderResurl_setParameterA7
-      {
-         JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
-         TestResult tr3 = tcd.getTestResultFailed(
-               V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA7);
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderResurl_setParameterA7")) {
-            String aval = portletReq.getParameter("parm1");
-            String eval = null;
-            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
-                  tr3);
-            tr3.writeTo(writer);
-         }
-      }
-
-      // evaluate results for test case
       // V2URLTests_BaseURL_ApiRenderResurl_setParameterB1
       {
          JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
@@ -245,23 +227,6 @@ public class URLTests_BaseURL_ApiRenderResurl
       }
 
       // evaluate results for test case
-      // V2URLTests_BaseURL_ApiRenderResurl_setParameterB7
-      {
-         JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
-         TestResult tr8 = tcd.getTestResultFailed(
-               V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB7);
-         String tcval = portletReq.getParameter("tc");
-         // let exception be thrown if tc parm isn't set (test case error)
-         if (tcval != null && tcval
-               .equals("V2URLTests_BaseURL_ApiRenderResurl_setParameterB7")) {
-            String[] aval = portletReq.getParameterValues("parm1");
-            String[] eval = null;
-            CompareUtils.arraysEqual("Request", aval, " expected: ", eval, tr8);
-            tr8.writeTo(writer);
-         }
-      }
-
-      // evaluate results for test case
       // V2URLTests_BaseURL_ApiRenderResurl_setParameters1
       {
          JSR286ApiTestCaseDetails tcd = new JSR286ApiTestCaseDetails();
@@ -509,25 +474,24 @@ public class URLTests_BaseURL_ApiRenderResurl
       }
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderResurl_setParameterA7 */
-      /* Details: "Method setParameter(String, String): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr3 = tcd.getTestResultFailed(
-            V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA7);
+          V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA7);
       try {
-         ResourceURL turl = portletResp.createResourceURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderResurl_setParameterA7");
-         turl.setParameter("parm1", "val1");
-         turl.setParameter("parm1", (String) null);
-
-         // add the resource results fetcher to the output stream
-         ResourceLink rl = new ResourceLink(
-               "V2URLTests_BaseURL_ApiRenderResurl_setParameterA7", turl);
-         rl.writeResourceFetcher(writer);
+         try {
+            ResourceURL turl = portletResp.createResourceURL();
+            turl.setParameter("parm1", (String) null);
+            tr3.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr3.setTcSuccess(true);
+         } catch (Exception e) {
+            tr3.appendTcDetail(e);
+         }
       } catch (Exception e) {
          tr3.appendTcDetail(e);
-         tr3.writeTo(writer);
       }
+      tr3.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderResurl_setParameterA8 */
       /* Details: "Method setParameter(String, String): Throws */
@@ -611,25 +575,24 @@ public class URLTests_BaseURL_ApiRenderResurl
       }
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderResurl_setParameterB7 */
-      /* Details: "Method setParameter(String, String[]): If the value is */
-      /* null, all values for the specified key are removed" */
+      /* Details: "Method setParameter(String, String[]): Throws */
+      /* IllegalArgumentException if the value is null" */
       TestResult tr8 = tcd.getTestResultFailed(
-            V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB7);
+          V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB7);
       try {
-         ResourceURL turl = portletResp.createResourceURL();
-         turl.setParameter("tc",
-               "V2URLTests_BaseURL_ApiRenderResurl_setParameterB7");
-         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
-         turl.setParameter("parm1", (String[]) null);
-
-         // add the resource results fetcher to the output stream
-         ResourceLink rl = new ResourceLink(
-               "V2URLTests_BaseURL_ApiRenderResurl_setParameterB7", turl);
-         rl.writeResourceFetcher(writer);
+         try {
+            ResourceURL turl = portletResp.createResourceURL();
+            turl.setParameter("parm1", (String[]) null);
+            tr8.appendTcDetail("Method did not throw an exception.");
+         } catch (IllegalArgumentException iae) {
+            tr8.setTcSuccess(true);
+         } catch (Exception e) {
+            tr8.appendTcDetail(e);
+         }
       } catch (Exception e) {
          tr8.appendTcDetail(e);
-         tr8.writeTo(writer);
       }
+      tr8.writeTo(writer);
 
       /* TestCase: V2URLTests_BaseURL_ApiRenderResurl_setParameterB8 */
       /* Details: "Method setParameter(String, String[]): Throws */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ActionURL.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ActionURL.java b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ActionURL.java
index 44d2782..e9d4820 100644
--- a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ActionURL.java
+++ b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ActionURL.java
@@ -25,11 +25,16 @@ import javax.portlet.ActionURL;
 import javax.portlet.MutableActionParameters;
 import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
+import javax.portlet.PortletSession;
+import javax.portlet.PortletURL;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
 import javax.portlet.ResourceRequest;
 import javax.portlet.ResourceResponse;
+import javax.portlet.annotations.ActionMethod;
 import javax.portlet.annotations.RenderMethod;
+import javax.portlet.tck.beans.CompareUtils;
+import javax.portlet.tck.beans.TestButton;
 import javax.portlet.tck.beans.TestResult;
 import javax.portlet.tck.util.ModuleTestCaseDetails;
 
@@ -37,10 +42,13 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Map;
 
+import static javax.portlet.tck.constants.Constants.RESULT_ATTR_PREFIX;
 import static javax.portlet.tck.constants.Constants.THREADID_ATTR;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS2;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS3;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_ACTIONURL_SETPARAMETERA7;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_ACTIONURL_SETPARAMETERB7;
 
 /**
  * This portlet implements several test cases for the JSR 362 TCK. The test case
@@ -60,8 +68,54 @@ public class URLTests_ActionURL {
    @Inject
    PortletConfig portletConfig;
 
+   @ActionMethod(portletName = "ActionURLTests")
    public void processAction(ActionRequest portletReq,
          ActionResponse portletResp) throws PortletException, IOException {
+
+      // evaluate results for test case
+      // V3URLTests_ActionURL_setParameterA7
+      {
+         ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+         TestResult tr3 = tcd.getTestResultFailed(
+             V3URLTESTS_ACTIONURL_SETPARAMETERA7);
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't defined (test case error)
+         if (tcval != null && tcval != null && tcval
+             .equals("V3URLTests_ActionURL_setParameterA7")) {
+            String aval = portletReq.getParameter("parm1");
+            String eval = null;
+            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
+                tr3);
+            PortletSession ps = portletReq.getPortletSession();
+            ps.setAttribute(
+                RESULT_ATTR_PREFIX
+                + "V3URLTests_ActionURL_setParameterA7",
+                tr3);
+            portletResp.setRenderParameter("tc", tcval);
+         }
+      }
+
+      // evaluate results for test case
+      // V3URLTests_ActionURL_setParameterB7
+      {
+         ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+         TestResult tr8 = tcd.getTestResultFailed(
+             V3URLTESTS_ACTIONURL_SETPARAMETERB7);
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't defined (test case error)
+         if (tcval != null && tcval != null && tcval
+             .equals("V3URLTests_ActionURL_setParameterB7")) {
+            String[] aval = portletReq.getParameterValues("parm1");
+            String[] eval = null;
+            CompareUtils.arraysEqual("Request", aval, " expected: ", eval, tr8);
+            PortletSession ps = portletReq.getPortletSession();
+            ps.setAttribute(
+                RESULT_ATTR_PREFIX
+                + "V3URLTests_ActionURL_setParameterB7",
+                tr8);
+            portletResp.setRenderParameter("tc", tcval);
+         }
+      }
    }
 
    public void serveResource(ResourceRequest portletReq,
@@ -139,6 +193,78 @@ public class URLTests_ActionURL {
          tr2.writeTo(writer);
       }
 
+      /* TestCase: V3URLTests_ActionURL_setParameterA7 */
+      /* Details: "Method setParameter(String, String): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr3 = tcd.getTestResultFailed(
+          V3URLTESTS_ACTIONURL_SETPARAMETERA7);
+      try {
+         PortletURL turl = portletResp.createActionURL();
+         turl.setParameter("tc",
+             "V3URLTests_ActionURL_setParameterA7");
+         turl.setParameter("parm1", "val1");
+         turl.setParameter("parm1", (String) null);
+
+         // add the execution button for an action request
+         TestButton tb = new TestButton(
+             "V3URLTests_ActionURL_setParameterA7", turl);
+         tb.writeTo(writer);
+
+         // display evaluated results
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval != null && tcval
+             .equals("V3URLTests_ActionURL_setParameterA7")) {
+            PortletSession ps = portletReq.getPortletSession();
+            TestResult tmp = (TestResult) ps.getAttribute(RESULT_ATTR_PREFIX
+                                                          + "V3URLTests_ActionURL_setParameterA7");
+            if (tmp != null) {
+               tr3 = tmp;
+               ps.removeAttribute(RESULT_ATTR_PREFIX
+                                  + "V3URLTests_ActionURL_setParameterA7");
+            }
+         }
+      } catch (Exception e) {
+         tr3.appendTcDetail(e);
+      }
+      tr3.writeTo(writer);
+
+      /* TestCase: V3URLTests_ActionURL_setParameterB7 */
+      /* Details: "Method setParameter(String, String[]): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr8 = tcd.getTestResultFailed(
+          V3URLTESTS_ACTIONURL_SETPARAMETERB7);
+      try {
+         PortletURL turl = portletResp.createActionURL();
+         turl.setParameter("tc",
+             "V3URLTests_ActionURL_setParameterB7");
+         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
+         turl.setParameter("parm1", (String[]) null);
+
+         // add the execution button for an action request
+         TestButton tb = new TestButton(
+             "V3URLTests_ActionURL_setParameterB7", turl);
+         tb.writeTo(writer);
+
+         // display evaluated results
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval != null && tcval
+             .equals("V3URLTests_ActionURL_setParameterB7")) {
+            PortletSession ps = portletReq.getPortletSession();
+            TestResult tmp = (TestResult) ps.getAttribute(RESULT_ATTR_PREFIX
+                                                          + "V3URLTests_ActionURL_setParameterB7");
+            if (tmp != null) {
+               tr8 = tmp;
+               ps.removeAttribute(RESULT_ATTR_PREFIX
+                                  + "V3URLTests_ActionURL_setParameterB7");
+            }
+         }
+      } catch (Exception e) {
+         tr8.appendTcDetail(e);
+      }
+      tr8.writeTo(writer);
+
    }
 
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_RenderURL.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_RenderURL.java b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_RenderURL.java
index 6d87d9f..9b628a5 100644
--- a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_RenderURL.java
+++ b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_RenderURL.java
@@ -23,12 +23,15 @@ import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
 import javax.portlet.PortletConfig;
 import javax.portlet.PortletException;
+import javax.portlet.PortletURL;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
 import javax.portlet.RenderURL;
 import javax.portlet.ResourceRequest;
 import javax.portlet.ResourceResponse;
 import javax.portlet.annotations.RenderMethod;
+import javax.portlet.tck.beans.CompareUtils;
+import javax.portlet.tck.beans.TestLink;
 import javax.portlet.tck.beans.TestResult;
 import javax.portlet.tck.util.ModuleTestCaseDetails;
 
@@ -43,6 +46,8 @@ import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER5;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER2;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_SETPARAMETERA7;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RENDERURL_SETPARAMETERB7;
 
 /**
  * This portlet implements several test cases for the JSR 362 TCK. The test case
@@ -241,6 +246,70 @@ public class URLTests_RenderURL {
          tr4.writeTo(writer);
       }
 
+      /* TestCase: V3URLTests_RenderURL_setParameterA7 */
+      /* Details: "Method setParameter(String, String): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr4 = tcd.getTestResultFailed(
+          V3URLTESTS_RENDERURL_SETPARAMETERA7);
+      try {
+         PortletURL turl = portletResp.createRenderURL();
+         turl.setParameter("tc",
+             "V3URLTests_RenderURL_setParameterA7");
+         turl.setParameter("parm1", "val1");
+         turl.setParameter("parm1", (String) null);
+
+         // add the execution link
+         TestLink tl = new TestLink(
+             "V3URLTests_RenderURL_setParameterA7", turl);
+         tl.writeTo(writer);
+
+         // evaluate results
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval
+             .equals("V3URLTests_RenderURL_setParameterA7")) {
+            String aval = portletReq.getParameter("parm1");
+            String eval = null;
+            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
+                tr4);
+         }
+      } catch (Exception e) {
+         tr4.appendTcDetail(e);
+      }
+      tr4.writeTo(writer);
+
+      /* TestCase: V3URLTests_RenderURL_setParameterB7 */
+      /* Details: "Method setParameter(String, String[]): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr10 = tcd.getTestResultFailed(
+          V3URLTESTS_RENDERURL_SETPARAMETERB7);
+      try {
+         PortletURL turl = portletResp.createRenderURL();
+         turl.setParameter("tc",
+             "V3URLTests_RenderURL_setParameterB7");
+         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
+         turl.setParameter("parm1", (String[]) null);
+
+         // add the execution link
+         TestLink tl = new TestLink(
+             "V3URLTests_RenderURL_setParameterB7", turl);
+         tl.writeTo(writer);
+
+         // evaluate results
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval
+             .equals("V3URLTests_RenderURL_setParameterB7")) {
+            String[] aval = portletReq.getParameterValues("parm1");
+            String[] eval = null;
+            CompareUtils.arraysEqual("Request", aval, " expected: ", eval,
+                tr10);
+         }
+      } catch (Exception e) {
+         tr10.appendTcDetail(e);
+      }
+      tr10.writeTo(writer);
+
    }
 
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ResourceURL.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ResourceURL.java b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ResourceURL.java
index b74c6dc..c71867b 100644
--- a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ResourceURL.java
+++ b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/portlets/URLTests_ResourceURL.java
@@ -30,6 +30,9 @@ import javax.portlet.RenderResponse;
 import javax.portlet.ResourceRequest;
 import javax.portlet.ResourceResponse;
 import javax.portlet.annotations.RenderMethod;
+import javax.portlet.annotations.ServeResourceMethod;
+import javax.portlet.tck.beans.CompareUtils;
+import javax.portlet.tck.beans.ResourceLink;
 import javax.portlet.tck.beans.TestResult;
 import javax.portlet.tck.util.ModuleTestCaseDetails;
 
@@ -41,6 +44,8 @@ import static javax.portlet.tck.constants.Constants.THREADID_ATTR;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS2;
 import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS3;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RESOURCEURL_SETPARAMETERA7;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3URLTESTS_RESOURCEURL_SETPARAMETERB7;
 
 /**
  * This portlet implements several test cases for the JSR 362 TCK. The test case
@@ -64,8 +69,46 @@ public class URLTests_ResourceURL {
          ActionResponse portletResp) throws PortletException, IOException {
    }
 
+   @ServeResourceMethod(portletNames = "ResourceURLTests")
    public void serveResource(ResourceRequest portletReq,
          ResourceResponse portletResp) throws PortletException, IOException {
+
+      PrintWriter writer = portletResp.getWriter();
+
+      // evaluate results for test case
+      // V3URLTests_ResourceURL_setParameterA7
+      {
+         ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+         TestResult tr3 = tcd.getTestResultFailed(
+             V3URLTESTS_RESOURCEURL_SETPARAMETERA7);
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval
+             .equals("V3URLTests_ResourceURL_setParameterA7")) {
+            String aval = portletReq.getParameter("parm1");
+            String eval = null;
+            CompareUtils.stringsEqual("Request", aval, " expected: ", eval,
+                tr3);
+            tr3.writeTo(writer);
+         }
+      }
+
+      // evaluate results for test case
+      // V3URLTests_ResourceURL_setParameterB7
+      {
+         ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+         TestResult tr8 = tcd.getTestResultFailed(
+             V3URLTESTS_RESOURCEURL_SETPARAMETERB7);
+         String tcval = portletReq.getParameter("tc");
+         // let exception be thrown if tc parm isn't set (test case error)
+         if (tcval != null && tcval
+             .equals("V3URLTests_ResourceURL_setParameterB7")) {
+            String[] aval = portletReq.getParameterValues("parm1");
+            String[] eval = null;
+            CompareUtils.arraysEqual("Request", aval, " expected: ", eval, tr8);
+            tr8.writeTo(writer);
+         }
+      }
    }
 
    @RenderMethod(portletNames = "ResourceURLTests")
@@ -139,6 +182,48 @@ public class URLTests_ResourceURL {
          tr2.writeTo(writer);
       }
 
+      /* TestCase: V3URLTests_ResourceURL_setParameterA7 */
+      /* Details: "Method setParameter(String, String): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr3 = tcd.getTestResultFailed(
+          V3URLTESTS_RESOURCEURL_SETPARAMETERA7);
+      try {
+         ResourceURL turl = portletResp.createResourceURL();
+         turl.setParameter("tc",
+             "V3URLTests_ResourceURL_setParameterA7");
+         turl.setParameter("parm1", "val1");
+         turl.setParameter("parm1", (String) null);
+
+         // add the resource results fetcher to the output stream
+         ResourceLink rl = new ResourceLink(
+             "V3URLTests_ResourceURL_setParameterA7", turl);
+         rl.writeResourceFetcher(writer);
+      } catch (Exception e) {
+         tr3.appendTcDetail(e);
+         tr3.writeTo(writer);
+      }
+
+      /* TestCase: V3URLTests_ResourceURL_setParameterB7 */
+      /* Details: "Method setParameter(String, String[]): If the value is */
+      /* null, all values for the specified key are removed" */
+      TestResult tr8 = tcd.getTestResultFailed(
+          V3URLTESTS_RESOURCEURL_SETPARAMETERB7);
+      try {
+         ResourceURL turl = portletResp.createResourceURL();
+         turl.setParameter("tc",
+             "V3URLTests_ResourceURL_setParameterB7");
+         turl.setParameter("parm1", new String[] { "val1", "val2", "val3" });
+         turl.setParameter("parm1", (String[]) null);
+
+         // add the resource results fetcher to the output stream
+         ResourceLink rl = new ResourceLink(
+             "V3URLTests_ResourceURL_setParameterB7", turl);
+         rl.writeResourceFetcher(writer);
+      } catch (Exception e) {
+         tr8.appendTcDetail(e);
+         tr8.writeTo(writer);
+      }
+
    }
 
 }

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
index ceda21a..b5cfead 100644
--- a/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
+++ b/portlet-tck_3.0/V3URLTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
@@ -41,9 +41,13 @@ public class ModuleTestCaseDetails extends TestCaseDetails {
    public final static String V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS = "V3URLTests_ActionURL_getActionParameters";
    public final static String V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS2 = "V3URLTests_ActionURL_getActionParameters2";
    public final static String V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS3 = "V3URLTests_ActionURL_getActionParameters3";
+   public final static String V3URLTESTS_ACTIONURL_SETPARAMETERA7 = "V3URLTests_ActionURL_setParameterA7";
+   public final static String V3URLTESTS_ACTIONURL_SETPARAMETERB7 = "V3URLTests_ActionURL_setParameterB7";
    public final static String V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS = "V3URLTests_ResourceURL_getResourceParameters";
    public final static String V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS2 = "V3URLTests_ResourceURL_getResourceParameters2";
    public final static String V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS3 = "V3URLTests_ResourceURL_getResourceParameters3";
+   public final static String V3URLTESTS_RESOURCEURL_SETPARAMETERA7 = "V3URLTests_ResourceURL_setParameterA7";
+   public final static String V3URLTESTS_RESOURCEURL_SETPARAMETERB7 = "V3URLTests_ResourceURL_setParameterB7";
    public final static String V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER = "V3URLTests_RenderURL_setFragmentIdentifier";
    public final static String V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER2 = "V3URLTests_RenderURL_setFragmentIdentifier2";
    public final static String V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER3 = "V3URLTests_RenderURL_setFragmentIdentifier3";
@@ -51,6 +55,8 @@ public class ModuleTestCaseDetails extends TestCaseDetails {
    public final static String V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER5 = "V3URLTests_RenderURL_setFragmentIdentifier5";
    public final static String V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER = "V3URLTests_RenderURL_getFragmentIdentifier";
    public final static String V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER2 = "V3URLTests_RenderURL_getFragmentIdentifier2";
+   public final static String V3URLTESTS_RENDERURL_SETPARAMETERA7 = "V3URLTests_RenderURL_setParameterA7";
+   public final static String V3URLTESTS_RENDERURL_SETPARAMETERB7 = "V3URLTests_RenderURL_setParameterB7";
    
    private final static Map<String, String> tcd = new HashMap<String, String>();
    static {
@@ -62,9 +68,13 @@ public class ModuleTestCaseDetails extends TestCaseDetails {
       tcd.put(V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS, "Initially the returned object is empty.");
       tcd.put(V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS2, "Modifying the parameter values encapsulated by the returned object directly modifies the action parameters applied to the URL.");
       tcd.put(V3URLTESTS_ACTIONURL_GETACTIONPARAMETERS3, "Gets the action parameter values set for this URL.");
+      tcd.put(V3URLTESTS_ACTIONURL_SETPARAMETERA7, "setParameter(String, String): If the value is null, all values for the specified key are removed.");
+      tcd.put(V3URLTESTS_ACTIONURL_SETPARAMETERB7, "setParameter(String, String[]): If the value is null, all values for the specified key are removed.");
       tcd.put(V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS, "Initially the returned object is empty.");
       tcd.put(V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS2, "Modifying the parameter values encapsulated by the returned object directly modifies the resource parameters applied to the URL.");
       tcd.put(V3URLTESTS_RESOURCEURL_GETRESOURCEPARAMETERS3, "Gets the resource parameter values set for this URL.");
+      tcd.put(V3URLTESTS_RESOURCEURL_SETPARAMETERA7, "setParameter(String, String): If the value is null, all values for the specified key are removed.");
+      tcd.put(V3URLTESTS_RESOURCEURL_SETPARAMETERB7, "setParameter(String, String[]): If the value is null, all values for the specified key are removed.");
       tcd.put(V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER, "Sets a fragment identifier on the URL.");
       tcd.put(V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER2, "A URL can have only a single fragment identifier. Any previously set fragment identifier will be replaced.");
       tcd.put(V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER3, "The fragment identifier consists of additional information appended to the URL after a '#' character.");
@@ -72,7 +82,9 @@ public class ModuleTestCaseDetails extends TestCaseDetails {
       tcd.put(V3URLTESTS_RENDERURL_SETFRAGMENTIDENTIFIER5, "Setting the empty string as the fragment identifier will create an empty fragment identifier.");
       tcd.put(V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER, "Gets the fragment identifier previously set on the URL.");
       tcd.put(V3URLTESTS_RENDERURL_GETFRAGMENTIDENTIFIER2, "Returns null if no fragment identifier has been set.");
-      
+      tcd.put(V3URLTESTS_RENDERURL_SETPARAMETERA7, "setParameter(String, String): If the value is null, all values for the specified key are removed.");
+      tcd.put(V3URLTESTS_RENDERURL_SETPARAMETERB7, "setParameter(String, String[]): If the value is null, all values for the specified key are removed.");
+
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8d5aeab3/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/JSR286ApiTestCaseDetails.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/JSR286ApiTestCaseDetails.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/JSR286ApiTestCaseDetails.java
index 33c1601..5280a9c 100644
--- a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/JSR286ApiTestCaseDetails.java
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/JSR286ApiTestCaseDetails.java
@@ -3488,7 +3488,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERA6,
             "Method setParameter(String, String): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERA7,
-            "Method setParameter(String, String): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERA8,
             "Method setParameter(String, String): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERB1,
@@ -3500,7 +3500,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERB6,
             "Method setParameter(String, String[]): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERB7,
-            "Method setParameter(String, String[]): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String[]): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERB8,
             "Method setParameter(String, String[]): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRENURL_SETPARAMETERS1,
@@ -3553,7 +3553,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA6,
             "Method setParameter(String, String): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA7,
-            "Method setParameter(String, String): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERA8,
             "Method setParameter(String, String): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB1,
@@ -3563,7 +3563,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB6,
             "Method setParameter(String, String[]): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB7,
-            "Method setParameter(String, String[]): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String[]): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERB8,
             "Method setParameter(String, String[]): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERACTURL_SETPARAMETERS1,
@@ -3614,7 +3614,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA6,
             "Method setParameter(String, String): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA7,
-            "Method setParameter(String, String): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERA8,
             "Method setParameter(String, String): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB1,
@@ -3624,7 +3624,7 @@ public class JSR286ApiTestCaseDetails extends TestCaseDetails {
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB6,
             "Method setParameter(String, String[]): All previously existing values for the specified key are removed");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB7,
-            "Method setParameter(String, String[]): If the value is null, all values for the specified key are removed");
+            "Method setParameter(String, String[]): Throws IllegalArgumentException if the value is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERB8,
             "Method setParameter(String, String[]): Throws IllegalArgumentException if the name is null");
       tcd.put(V2URLTESTS_BASEURL_APIRENDERRESURL_SETPARAMETERS1,