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 ms...@apache.org on 2014/08/14 15:23:53 UTC

[18/48] git commit: Added 2nd request dispatcher test module that repeats basic dispatch testing for JSPs

Added 2nd request dispatcher test module that repeats basic dispatch testing for JSPs


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

Branch: refs/heads/master
Commit: 42ea07d04f8f7a2c3023dfde77580d6fd6b0089e
Parents: f326eaa
Author: Scott Nicklous <ms...@apache.org>
Authored: Tue Aug 12 09:35:57 2014 +0200
Committer: Scott Nicklous <ms...@apache.org>
Committed: Tue Aug 12 09:35:57 2014 +0200

----------------------------------------------------------------------
 .gitignore                                      |   2 +
 .../DispatcherTests_SPEC2_19_Action.java        | 229 ++++++
 .../DispatcherTests_SPEC2_19_Dispatch.java      | 147 ----
 .../DispatcherTests_SPEC2_19_Event.java         | 166 +++++
 .../DispatcherTests_SPEC2_19_Event_event.java   | 156 +++++
 ...DispatcherTests_SPEC2_19_ForwardServlet.java | 100 ---
 ...cherTests_SPEC2_19_ForwardServletAction.java | 133 ++++
 ...tcherTests_SPEC2_19_ForwardServletEvent.java | 133 ++++
 ...cherTests_SPEC2_19_ForwardServletRender.java |   1 +
 ...erTests_SPEC2_19_ForwardServletResource.java |   1 +
 ...DispatcherTests_SPEC2_19_IncludeServlet.java | 100 ---
 ...cherTests_SPEC2_19_IncludeServletAction.java | 151 ++++
 ...tcherTests_SPEC2_19_IncludeServletEvent.java | 151 ++++
 ...cherTests_SPEC2_19_IncludeServletRender.java |   1 +
 ...erTests_SPEC2_19_IncludeServletResource.java |   1 +
 .../DispatcherTests_SPEC2_19_Render.java        |  46 +-
 .../DispatcherTests_SPEC2_19_Resource.java      | 168 +++++
 ...s_SPEC2_19_ForwardServletAction_servlet.java | 138 +++-
 ...ts_SPEC2_19_ForwardServletEvent_servlet.java | 138 +++-
 ...s_SPEC2_19_ForwardServletRender_servlet.java | 132 +++-
 ...SPEC2_19_ForwardServletResource_servlet.java | 125 +++-
 ...erTests_SPEC2_19_ForwardServlet_servlet.java | 182 -----
 ...s_SPEC2_19_IncludeServletAction_servlet.java | 152 +++-
 ...ts_SPEC2_19_IncludeServletEvent_servlet.java | 152 +++-
 ...s_SPEC2_19_IncludeServletRender_servlet.java | 138 +++-
 ...SPEC2_19_IncludeServletResource_servlet.java | 131 +++-
 ...erTests_SPEC2_19_IncludeServlet_servlet.java | 131 ----
 .../src/main/webapp/WEB-INF/portlet.xml         |  68 +-
 .../src/main/webapp/WEB-INF/web.xml             |  26 -
 portlet-tck_3.0/V2DispatcherTests2/pom.xml      | 127 ++++
 ...patcherTests2_SPEC2_19_ForwardJSPAction.java | 330 +++++++++
 ...spatcherTests2_SPEC2_19_ForwardJSPEvent.java | 322 +++++++++
 ...erTests2_SPEC2_19_ForwardJSPEvent_event.java | 101 +++
 ...patcherTests2_SPEC2_19_ForwardJSPRender.java | 101 +++
 ...tcherTests2_SPEC2_19_ForwardJSPResource.java | 116 ++++
 ...patcherTests2_SPEC2_19_IncludeJSPAction.java | 348 ++++++++++
 ...spatcherTests2_SPEC2_19_IncludeJSPEvent.java | 340 +++++++++
 ...erTests2_SPEC2_19_IncludeJSPEvent_event.java | 101 +++
 ...patcherTests2_SPEC2_19_IncludeJSPRender.java | 101 +++
 ...tcherTests2_SPEC2_19_IncludeJSPResource.java | 116 ++++
 ...spatcherTests2_SPEC2_19_ForwardJSPAction.jsp | 207 ++++++
 ...ispatcherTests2_SPEC2_19_ForwardJSPEvent.jsp | 207 ++++++
 ...spatcherTests2_SPEC2_19_ForwardJSPRender.jsp | 198 ++++++
 ...atcherTests2_SPEC2_19_ForwardJSPResource.jsp | 191 +++++
 ...spatcherTests2_SPEC2_19_IncludeJSPAction.jsp | 221 ++++++
 ...ispatcherTests2_SPEC2_19_IncludeJSPEvent.jsp | 221 ++++++
 ...spatcherTests2_SPEC2_19_IncludeJSPRender.jsp | 204 ++++++
 ...atcherTests2_SPEC2_19_IncludeJSPResource.jsp | 197 ++++++
 .../src/main/webapp/WEB-INF/portlet.xml         | 196 ++++++
 .../src/main/webapp/WEB-INF/web.xml             |  23 +
 .../beans/JSR286DispatcherTestCaseDetails.java  | 696 +++++++++++++++++--
 portlet-tck_3.0/deploy/pom.xml                  |   6 +
 portlet-tck_3.0/driver/pom.xml                  |   9 +-
 .../main/resources/xml-resources/pageFiles.xml  |   1 +
 .../main/resources/xml-resources/testFiles.xml  |   1 +
 portlet-tck_3.0/pom.xml                         |   1 +
 56 files changed, 6957 insertions(+), 924 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index b55431f..830a7b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,5 @@ faces-config.pageflow
 branches
 tags
 *.dir
+maven-eclipse.xml
+.externalToolBuilders

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Action.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Action.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Action.java
new file mode 100644
index 0000000..99c63f7
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Action.java
@@ -0,0 +1,229 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet DispatcherTests_SPEC2_19_Action_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_Action implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_Action.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: SPEC2_19_Action_dispatch1                                  */
+      /* Details: "The PortletContext getRequestDispatcher method returns a   */
+      /* PortletRequestDispatcher for a path within the portlet               */
+      /* application"                                                         */
+      TestResult tr0 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH1);
+      /* TODO: implement test */
+      tr0.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_dispatch2                                  */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not start with \"/\", the method returns null"                       */
+      TestResult tr1 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH2);
+      /* TODO: implement test */
+      tr1.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_dispatch3                                  */
+      /* Details: "If the path provided to getRequestDispatcher method ends   */
+      /* with \"/\", the method returns null"                                 */
+      TestResult tr2 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH3);
+      /* TODO: implement test */
+      tr2.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_dispatch4                                  */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not specify a valid path, the method returns null"                   */
+      TestResult tr3 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH4);
+      /* TODO: implement test */
+      tr3.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_dispatch5                                  */
+      /* Details: "The PortletContext getNamedDispatcher method returns a     */
+      /* PortletRequestDispatcher for a servlet within the portlet            */
+      /* application"                                                         */
+      TestResult tr4 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH5);
+      /* TODO: implement test */
+      tr4.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_dispatch6                                  */
+      /* Details: "If the name provided to getNamedDispatcher method is not   */
+      /* valid, the method returns null"                                      */
+      TestResult tr5 = tcd.getTestResultFailed(SPEC2_19_ACTION_DISPATCH6);
+      /* TODO: implement test */
+      tr5.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Action_invoke2                                    */
+      /* Details: "If the forward method is called after the response has     */
+      /* been committed, an IllegalStateException exception is thrown"        */
+      TestResult tr6 = tcd.getTestResultFailed(SPEC2_19_ACTION_INVOKE2);
+      /* TODO: implement test */
+      tr6.writeTo(writer);
+
+      portletReq.getPortletSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_Action",
+                   writer.toString(), APPLICATION_SCOPE);
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletSession ps = portletReq.getPortletSession();
+      String msg = (String) ps.getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_Action", APPLICATION_SCOPE);
+      if (msg != null) {
+         writer.write("<p>" + msg + "</p>\n");
+         ps.removeAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_Action", APPLICATION_SCOPE);
+      } else {
+
+         /* TestCase: SPEC2_19_Action_dispatch1                                  */
+         /* Details: "The PortletContext getRequestDispatcher method returns a   */
+         /* PortletRequestDispatcher for a path within the portlet               */
+         /* application"                                                         */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_dispatch2                                  */
+         /* Details: "If the path provided to getRequestDispatcher method does   */
+         /* not start with \"/\", the method returns null"                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_dispatch3                                  */
+         /* Details: "If the path provided to getRequestDispatcher method ends   */
+         /* with \"/\", the method returns null"                                 */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_dispatch4                                  */
+         /* Details: "If the path provided to getRequestDispatcher method does   */
+         /* not specify a valid path, the method returns null"                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_dispatch5                                  */
+         /* Details: "The PortletContext getNamedDispatcher method returns a     */
+         /* PortletRequestDispatcher for a servlet within the portlet            */
+         /* application"                                                         */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch5", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_dispatch6                                  */
+         /* Details: "If the name provided to getNamedDispatcher method is not   */
+         /* valid, the method returns null"                                      */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_dispatch6", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_Action_invoke2                                    */
+         /* Details: "If the forward method is called after the response has     */
+         /* been committed, an IllegalStateException exception is thrown"        */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_Action_invoke2", aurl);
+            tb.writeTo(writer);
+         }
+
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Dispatch.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Dispatch.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Dispatch.java
deleted file mode 100644
index 6fdc085..0000000
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Dispatch.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package javax.portlet.tck.portlets;
-
-import java.io.*;
-import java.util.*;
-import java.util.logging.*;
-import static java.util.logging.Logger.*;
-import javax.xml.namespace.QName;
-import javax.portlet.*;
-import javax.portlet.filter.*;
-import javax.portlet.tck.beans.*;
-import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
-import static javax.portlet.tck.constants.Constants.*;
-import static javax.portlet.PortletSession.*;
-import static javax.portlet.ResourceURL.*;
-
-/**
- * This portlet implements several test cases for the JSR 362 TCK. The test case names
- * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
- * file. The build process will integrate the test case names defined in the 
- * additionalTCs.xml file into the complete list of test case names for execution by the driver.
- *
- * This is the main portlet for the test cases. If the test cases call for events, this portlet
- * will initiate the events, but not process them. The processing is done in the companion 
- * portlet DispatcherTests_SPEC2_19_Dispatch_event
- *
- */
-public class DispatcherTests_SPEC2_19_Dispatch implements Portlet, ResourceServingPortlet {
-   private static final String LOG_CLASS = 
-         DispatcherTests_SPEC2_19_Dispatch.class.getName();
-   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
-   
-   private PortletConfig portletConfig = null;
-
-   @Override
-   public void init(PortletConfig config) throws PortletException {
-      this.portletConfig = config;
-   }
-
-   @Override
-   public void destroy() {
-   }
-
-   @Override
-   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      StringWriter writer = new StringWriter();
-
-   }
-
-   @Override
-   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-   }
-
-   @Override
-   public void render(RenderRequest portletReq, RenderResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet render entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
-
-      // Create result objects for the tests
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher1                           */
-      /* Details: "The PortletContext getRequestDispatcher method returns a   */
-      /* PortletRequestDispatcher for a path within the portlet               */
-      /* application"                                                         */
-      TestResult tr0 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER1);
-      /* TODO: implement test */
-      tr0.writeTo(writer);
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher2                           */
-      /* Details: "If the path provided to getRequestDispatcher method        */
-      /* contains query strings, parameters specified in the query strings    */
-      /* must be passed to the included servlet"                              */
-      TestResult tr1 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER2);
-      /* TODO: implement test */
-      tr1.writeTo(writer);
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher3                           */
-      /* Details: "If the path provided to getRequestDispatcher method        */
-      /* contains query strings, parameters specified in the query strings    */
-      /* must be passed to the forwarded servlet"                             */
-      TestResult tr2 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER3);
-      /* TODO: implement test */
-      tr2.writeTo(writer);
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher4                           */
-      /* Details: "Parameters specified in the query strings must be          */
-      /* aggregated with the portlet render parameters"                       */
-      TestResult tr3 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER4);
-      /* TODO: implement test */
-      tr3.writeTo(writer);
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher5                           */
-      /* Details: "If query string parameters have the same names as render   */
-      /* parameter names, the query string parameters appear in the           */
-      /* parameter values array before the render parameter values"           */
-      TestResult tr4 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER5);
-      /* TODO: implement test */
-      tr4.writeTo(writer);
-
-      /* TestCase: SPEC2_19_Dispatch_getDispatcher6                           */
-      /* Details: "The parameters associated with a request dispatcher are    */
-      /* scoped only for the duration of the include or forward call"         */
-      TestResult tr5 = tcd.getTestResultFailed(SPEC2_19_DISPATCH_GETDISPATCHER6);
-      /* TODO: implement test */
-      tr5.writeTo(writer);
-
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event.java
new file mode 100644
index 0000000..d4cfcb9
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event.java
@@ -0,0 +1,166 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.PortletSession.*;
+import static javax.portlet.ResourceURL.*;
+
+/**
+ * This portlet implements several test cases for the JSR 362 TCK. The test case names
+ * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the 
+ * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ *
+ * This is the main portlet for the test cases. If the test cases call for events, this portlet
+ * will initiate the events, but not process them. The processing is done in the companion 
+ * portlet DispatcherTests_SPEC2_19_Event_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_Event implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_Event.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      StringWriter writer = new StringWriter();
+
+      QName eventQName = new QName(TCKNAMESPACE,
+             "DispatcherTests_SPEC2_19_Event");
+      portletResp.setEvent(eventQName, "Hi!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      PrintWriter writer = portletResp.getWriter();
+
+      /* TestCase: SPEC2_19_Event_dispatch1                                   */
+      /* Details: "The PortletContext getRequestDispatcher method returns a   */
+      /* PortletRequestDispatcher for a path within the portlet               */
+      /* application"                                                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_dispatch2                                   */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not start with \"/\", the method returns null"                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_dispatch3                                   */
+      /* Details: "If the path provided to getRequestDispatcher method ends   */
+      /* with \"/\", the method returns null"                                 */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_dispatch4                                   */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not specify a valid path, the method returns null"                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_dispatch5                                   */
+      /* Details: "The PortletContext getNamedDispatcher method returns a     */
+      /* PortletRequestDispatcher for a servlet within the portlet            */
+      /* application"                                                         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_dispatch6                                   */
+      /* Details: "If the name provided to getNamedDispatcher method is not   */
+      /* valid, the method returns null"                                      */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_dispatch6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_Event_invoke2                                     */
+      /* Details: "If the forward method is called after the response has     */
+      /* been committed, an IllegalStateException exception is thrown"        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_Event_invoke2", aurl);
+         tb.writeTo(writer);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event_event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event_event.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event_event.java
new file mode 100644
index 0000000..5192f1a
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Event_event.java
@@ -0,0 +1,156 @@
+/*  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package javax.portlet.tck.portlets;
+
+import java.io.*;
+import java.util.*;
+import java.util.logging.*;
+import static java.util.logging.Logger.*;
+import javax.xml.namespace.QName;
+import javax.portlet.*;
+import javax.portlet.filter.*;
+import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
+import static javax.portlet.tck.constants.Constants.*;
+import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
+import static javax.portlet.PortletSession.*;
+
+/**
+ * This is the event processing portlet for the test cases. This portlet processes events, 
+ * but does not publish them. Events are published in the main portlet for the test cases. 
+ */
+public class DispatcherTests_SPEC2_19_Event_event implements Portlet, EventPortlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_Event_event.class.getName();
+   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+   
+   private PortletConfig portletConfig = null;
+
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+      this.portletConfig = config;
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processAction - ERROR!!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion serveResource - ERROR!!");
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      
+      LOGGER.entering(LOG_CLASS, "event companion render");
+
+      portletResp.setContentType("text/html");
+      PrintWriter writer = portletResp.getWriter();
+      writer.write("<h3>Event Companion Portlet </h3>\n");
+      writer.write("<p>DispatcherTests_SPEC2_19_Event_event</p>\n");
+
+      String msg = (String) portletReq.getPortletSession()
+            .getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_Event", APPLICATION_SCOPE);
+      msg = (msg==null) ? "Not ready. click test case link." : msg;
+      writer.write("<p>" + msg + "</p>\n");
+
+   }
+
+   @Override
+   public void processEvent(EventRequest portletReq, EventResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "event companion processEvent");
+
+
+      long tid = Thread.currentThread().getId();
+      portletReq.setAttribute("void", tid);
+
+      StringWriter writer = new StringWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: SPEC2_19_Event_dispatch1                                   */
+      /* Details: "The PortletContext getRequestDispatcher method returns a   */
+      /* PortletRequestDispatcher for a path within the portlet               */
+      /* application"                                                         */
+      TestResult tr0 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH1);
+      /* TODO: implement test */
+      tr0.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_dispatch2                                   */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not start with \"/\", the method returns null"                       */
+      TestResult tr1 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH2);
+      /* TODO: implement test */
+      tr1.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_dispatch3                                   */
+      /* Details: "If the path provided to getRequestDispatcher method ends   */
+      /* with \"/\", the method returns null"                                 */
+      TestResult tr2 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH3);
+      /* TODO: implement test */
+      tr2.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_dispatch4                                   */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not specify a valid path, the method returns null"                   */
+      TestResult tr3 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH4);
+      /* TODO: implement test */
+      tr3.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_dispatch5                                   */
+      /* Details: "The PortletContext getNamedDispatcher method returns a     */
+      /* PortletRequestDispatcher for a servlet within the portlet            */
+      /* application"                                                         */
+      TestResult tr4 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH5);
+      /* TODO: implement test */
+      tr4.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_dispatch6                                   */
+      /* Details: "If the name provided to getNamedDispatcher method is not   */
+      /* valid, the method returns null"                                      */
+      TestResult tr5 = tcd.getTestResultFailed(SPEC2_19_EVENT_DISPATCH6);
+      /* TODO: implement test */
+      tr5.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Event_invoke2                                     */
+      /* Details: "If the forward method is called after the response has     */
+      /* been committed, an IllegalStateException exception is thrown"        */
+      TestResult tr6 = tcd.getTestResultFailed(SPEC2_19_EVENT_INVOKE2);
+      /* TODO: implement test */
+      tr6.writeTo(writer);
+
+      portletReq.getPortletSession().setAttribute(
+                   Constants.RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_Event",
+                   writer.toString(), APPLICATION_SCOPE);
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServlet.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServlet.java
deleted file mode 100644
index 9235c90..0000000
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServlet.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package javax.portlet.tck.portlets;
-
-import java.io.*;
-import java.util.*;
-import java.util.logging.*;
-import static java.util.logging.Logger.*;
-import javax.xml.namespace.QName;
-import javax.portlet.*;
-import javax.portlet.filter.*;
-import javax.portlet.tck.beans.*;
-import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
-import static javax.portlet.tck.constants.Constants.*;
-import static javax.portlet.PortletSession.*;
-import static javax.portlet.ResourceURL.*;
-
-/**
- * This portlet implements several test cases for the JSR 362 TCK. The test case names
- * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
- * file. The build process will integrate the test case names defined in the 
- * additionalTCs.xml file into the complete list of test case names for execution by the driver.
- *
- * This is the main portlet for the test cases. If the test cases call for events, this portlet
- * will initiate the events, but not process them. The processing is done in the companion 
- * portlet DispatcherTests_SPEC2_19_ForwardServlet_event
- *
- */
-public class DispatcherTests_SPEC2_19_ForwardServlet implements Portlet, ResourceServingPortlet {
-   private static final String LOG_CLASS = 
-         DispatcherTests_SPEC2_19_ForwardServlet.class.getName();
-   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
-   
-   private PortletConfig portletConfig = null;
-
-   @Override
-   public void init(PortletConfig config) throws PortletException {
-      this.portletConfig = config;
-   }
-
-   @Override
-   public void destroy() {
-   }
-
-   @Override
-   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      StringWriter writer = new StringWriter();
-
-   }
-
-   @Override
-   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-   }
-
-   @Override
-   public void render(RenderRequest portletReq, RenderResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet render entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-      PortletRequestDispatcher rd = portletConfig.getPortletContext()
-            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServlet_servlet?qparm1=qvalue&qparm2=qvalue2");
-      rd.forward(portletReq, portletResp);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java
index 8f662f7..6c26473 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;
@@ -102,6 +103,138 @@ public class DispatcherTests_SPEC2_19_ForwardServletAction implements Portlet, R
          ps.removeAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_ForwardServletAction", APPLICATION_SCOPE);
       } else {
 
+         /* TestCase: SPEC2_19_ForwardServletAction_dispatch1                    */
+         /* Details: "If the path provided to getRequestDispatcher method        */
+         /* contains query strings, parameters specified in the query strings    */
+         /* must be passed to the target servlet during an forward"              */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_dispatch1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_dispatch2                    */
+         /* Details: "Parameters specified in the query strings must be          */
+         /* aggregated with the portlet render parameters"                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_dispatch2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_dispatch3                    */
+         /* Details: "If query string parameters have the same names as render   */
+         /* parameter names, the query string parameters appear in the           */
+         /* parameter values array before the render parameter values"           */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_dispatch3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_dispatch4                    */
+         /* Details: "The parameters associated with a request dispatcher are    */
+         /* scoped only for the duration of the forward or forward call"         */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_dispatch4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke1                      */
+         /* Details: "The PortletRequestDispatcher include method can include    */
+         /* a target servlet "                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke2                      */
+         /* Details: "Parameters to the include method for a target servlet      */
+         /* can be the request and response classes from the portlet lifecyle    */
+         /* method initiating the include"                                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke3                      */
+         /* Details: "Parameters to the include method for a target servlet      */
+         /* can be wrapped request and response classes from the portlet         */
+         /* lifecyle method initiating the include"                              */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke4                      */
+         /* Details: "The portlet container must invoke the target servlet in    */
+         /* the same thread as the PortletRequestDispatcher include              */
+         /* invocation"                                                          */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke5                      */
+         /* Details: "Cookies set by the portlet before the forward call         */
+         /* remain valid"                                                        */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke5", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke6                      */
+         /* Details: "Properties set by the portlet before the forward call      */
+         /* remain valid"                                                        */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke6", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_invoke7                      */
+         /* Details: "The path elements of the request object exposed to the     */
+         /* target servlet must reflect the path used to obtain the              */
+         /* RequestDispatcher"                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_invoke7", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_state1                       */
+         /* Details: "A window state set by the portlet before the forward       */
+         /* call remains valid"                                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_state1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_state2                       */
+         /* Details: "A portlet mode set by the portlet before the forward       */
+         /* call remains valid"                                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_state2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_state3                       */
+         /* Details: "Render parameters set by the portlet before the forward    */
+         /* call remain valid"                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_state3", aurl);
+            tb.writeTo(writer);
+         }
+
          /* TestCase: SPEC2_19_ForwardServletAction_attributes1                  */
          /* Details: "If the request dispatcher is obtained through the          */
          /* getRequestDispatcher method, the request attribute                   */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java
index 8abc11d..226516d 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;
@@ -95,6 +96,138 @@ public class DispatcherTests_SPEC2_19_ForwardServletEvent implements Portlet, Re
 
       PrintWriter writer = portletResp.getWriter();
 
+      /* TestCase: SPEC2_19_ForwardServletEvent_dispatch1                     */
+      /* Details: "If the path provided to getRequestDispatcher method        */
+      /* contains query strings, parameters specified in the query strings    */
+      /* must be passed to the target servlet during an forward"              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_dispatch1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_dispatch2                     */
+      /* Details: "Parameters specified in the query strings must be          */
+      /* aggregated with the portlet render parameters"                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_dispatch2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_dispatch3                     */
+      /* Details: "If query string parameters have the same names as render   */
+      /* parameter names, the query string parameters appear in the           */
+      /* parameter values array before the render parameter values"           */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_dispatch3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_dispatch4                     */
+      /* Details: "The parameters associated with a request dispatcher are    */
+      /* scoped only for the duration of the forward or forward call"         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_dispatch4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke1                       */
+      /* Details: "The PortletRequestDispatcher include method can include    */
+      /* a target servlet "                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke2                       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be the request and response classes from the portlet lifecyle    */
+      /* method initiating the include"                                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke3                       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke4                       */
+      /* Details: "The portlet container must invoke the target servlet in    */
+      /* the same thread as the PortletRequestDispatcher include              */
+      /* invocation"                                                          */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke5                       */
+      /* Details: "Cookies set by the portlet before the forward call         */
+      /* remain valid"                                                        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke6                       */
+      /* Details: "Properties set by the portlet before the forward call      */
+      /* remain valid"                                                        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_invoke7                       */
+      /* Details: "The path elements of the request object exposed to the     */
+      /* target servlet must reflect the path used to obtain the              */
+      /* RequestDispatcher"                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_invoke7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_state1                        */
+      /* Details: "A window state set by the portlet before the forward       */
+      /* call remains valid"                                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_state1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_state2                        */
+      /* Details: "A portlet mode set by the portlet before the forward       */
+      /* call remains valid"                                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_state2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_state3                        */
+      /* Details: "Render parameters set by the portlet before the forward    */
+      /* call remain valid"                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_state3", aurl);
+         tb.writeTo(writer);
+      }
+
       /* TestCase: SPEC2_19_ForwardServletEvent_attributes1                   */
       /* Details: "If the request dispatcher is obtained through the          */
       /* getRequestDispatcher method, the request attribute                   */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java
index 1aa833d..2165dfd 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java
index ebaa227..657c033 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServlet.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServlet.java
deleted file mode 100644
index 7a5e93d..0000000
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServlet.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package javax.portlet.tck.portlets;
-
-import java.io.*;
-import java.util.*;
-import java.util.logging.*;
-import static java.util.logging.Logger.*;
-import javax.xml.namespace.QName;
-import javax.portlet.*;
-import javax.portlet.filter.*;
-import javax.portlet.tck.beans.*;
-import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
-import static javax.portlet.tck.constants.Constants.*;
-import static javax.portlet.PortletSession.*;
-import static javax.portlet.ResourceURL.*;
-
-/**
- * This portlet implements several test cases for the JSR 362 TCK. The test case names
- * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
- * file. The build process will integrate the test case names defined in the 
- * additionalTCs.xml file into the complete list of test case names for execution by the driver.
- *
- * This is the main portlet for the test cases. If the test cases call for events, this portlet
- * will initiate the events, but not process them. The processing is done in the companion 
- * portlet DispatcherTests_SPEC2_19_IncludeServlet_event
- *
- */
-public class DispatcherTests_SPEC2_19_IncludeServlet implements Portlet, ResourceServingPortlet {
-   private static final String LOG_CLASS = 
-         DispatcherTests_SPEC2_19_IncludeServlet.class.getName();
-   private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
-   
-   private PortletConfig portletConfig = null;
-
-   @Override
-   public void init(PortletConfig config) throws PortletException {
-      this.portletConfig = config;
-   }
-
-   @Override
-   public void destroy() {
-   }
-
-   @Override
-   public void processAction(ActionRequest portletReq, ActionResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet processAction entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      StringWriter writer = new StringWriter();
-
-   }
-
-   @Override
-   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-   }
-
-   @Override
-   public void render(RenderRequest portletReq, RenderResponse portletResp)
-         throws PortletException, IOException {
-      LOGGER.entering(LOG_CLASS, "main portlet render entry");
-
-      long tid = Thread.currentThread().getId();
-      portletReq.setAttribute("void", tid);
-
-      PrintWriter writer = portletResp.getWriter();
-
-      PortletRequestDispatcher rd = portletConfig.getPortletContext()
-            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServlet_servlet?qparm1=qvalue&qparm2=qvalue2");
-      rd.include(portletReq, portletResp);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java
index 7707c2a..69aa810 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;
@@ -102,6 +103,156 @@ public class DispatcherTests_SPEC2_19_IncludeServletAction implements Portlet, R
          ps.removeAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_IncludeServletAction", APPLICATION_SCOPE);
       } else {
 
+         /* TestCase: SPEC2_19_IncludeServletAction_dispatch1                    */
+         /* Details: "If the path provided to getRequestDispatcher method        */
+         /* contains query strings, parameters specified in the query strings    */
+         /* must be passed to the target servlet during an include"              */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_dispatch1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_dispatch2                    */
+         /* Details: "Parameters specified in the query strings must be          */
+         /* aggregated with the portlet render parameters"                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_dispatch2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_dispatch3                    */
+         /* Details: "If query string parameters have the same names as render   */
+         /* parameter names, the query string parameters appear in the           */
+         /* parameter values array before the render parameter values"           */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_dispatch3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_dispatch4                    */
+         /* Details: "The parameters associated with a request dispatcher are    */
+         /* scoped only for the duration of the include or forward call"         */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_dispatch4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke1                      */
+         /* Details: "The PortletRequestDispatcher include method can include    */
+         /* a target servlet "                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke2                      */
+         /* Details: "Parameters to the include method for a target servlet      */
+         /* can be the request and response classes from the portlet lifecyle    */
+         /* method initiating the include"                                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke3                      */
+         /* Details: "Parameters to the include method for a target servlet      */
+         /* can be wrapped request and response classes from the portlet         */
+         /* lifecyle method initiating the include"                              */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke4                      */
+         /* Details: "The portlet container must invoke the target servlet in    */
+         /* the same thread as the PortletRequestDispatcher include              */
+         /* invocation"                                                          */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke5                      */
+         /* Details: "Cookies set by the portlet before the include call         */
+         /* remain valid"                                                        */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke5", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke6                      */
+         /* Details: "Properties set by the portlet before the include call      */
+         /* remain valid"                                                        */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke6", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke7                      */
+         /* Details: "The path elements of the request object exposed to the     */
+         /* target servlet must reflect the path used to obtain the              */
+         /* RequestDispatcher"                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke7", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke8                      */
+         /* Details: "The portlet can include multiple servlets during the       */
+         /* same lifecycle method"                                               */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke8", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_invoke9                      */
+         /* Details: "The included servlet must be handled as an HTTP GET        */
+         /* request"                                                             */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_invoke9", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_state1                       */
+         /* Details: "A window state set by the portlet before the include       */
+         /* call remains valid"                                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_state1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_state2                       */
+         /* Details: "A portlet mode set by the portlet before the include       */
+         /* call remains valid"                                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_state2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_state3                       */
+         /* Details: "Render parameters set by the portlet before the include    */
+         /* call remain valid"                                                   */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_state3", aurl);
+            tb.writeTo(writer);
+         }
+
          /* TestCase: SPEC2_19_IncludeServletAction_attributes1                  */
          /* Details: "If the request dispatcher is obtained through the          */
          /* getRequestDispatcher method, the request attribute                   */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java
index 4525099..ef4ad19 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;
@@ -95,6 +96,156 @@ public class DispatcherTests_SPEC2_19_IncludeServletEvent implements Portlet, Re
 
       PrintWriter writer = portletResp.getWriter();
 
+      /* TestCase: SPEC2_19_IncludeServletEvent_dispatch1                     */
+      /* Details: "If the path provided to getRequestDispatcher method        */
+      /* contains query strings, parameters specified in the query strings    */
+      /* must be passed to the target servlet during an include"              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_dispatch1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_dispatch2                     */
+      /* Details: "Parameters specified in the query strings must be          */
+      /* aggregated with the portlet render parameters"                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_dispatch2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_dispatch3                     */
+      /* Details: "If query string parameters have the same names as render   */
+      /* parameter names, the query string parameters appear in the           */
+      /* parameter values array before the render parameter values"           */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_dispatch3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_dispatch4                     */
+      /* Details: "The parameters associated with a request dispatcher are    */
+      /* scoped only for the duration of the include or forward call"         */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_dispatch4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke1                       */
+      /* Details: "The PortletRequestDispatcher include method can include    */
+      /* a target servlet "                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke2                       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be the request and response classes from the portlet lifecyle    */
+      /* method initiating the include"                                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke3                       */
+      /* Details: "Parameters to the include method for a target servlet      */
+      /* can be wrapped request and response classes from the portlet         */
+      /* lifecyle method initiating the include"                              */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke4                       */
+      /* Details: "The portlet container must invoke the target servlet in    */
+      /* the same thread as the PortletRequestDispatcher include              */
+      /* invocation"                                                          */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke5                       */
+      /* Details: "Cookies set by the portlet before the include call         */
+      /* remain valid"                                                        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke6                       */
+      /* Details: "Properties set by the portlet before the include call      */
+      /* remain valid"                                                        */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke7                       */
+      /* Details: "The path elements of the request object exposed to the     */
+      /* target servlet must reflect the path used to obtain the              */
+      /* RequestDispatcher"                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke8                       */
+      /* Details: "The portlet can include multiple servlets during the       */
+      /* same lifecycle method"                                               */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke8", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_invoke9                       */
+      /* Details: "The included servlet must be handled as an HTTP GET        */
+      /* request"                                                             */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_invoke9", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_state1                        */
+      /* Details: "A window state set by the portlet before the include       */
+      /* call remains valid"                                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_state1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_state2                        */
+      /* Details: "A portlet mode set by the portlet before the include       */
+      /* call remains valid"                                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_state2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_state3                        */
+      /* Details: "Render parameters set by the portlet before the include    */
+      /* call remain valid"                                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_state3", aurl);
+         tb.writeTo(writer);
+      }
+
       /* TestCase: SPEC2_19_IncludeServletEvent_attributes1                   */
       /* Details: "If the request dispatcher is obtained through the          */
       /* getRequestDispatcher method, the request attribute                   */

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java
index 8c0e14c..86bb5ea 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/42ea07d0/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java
index 01e7275..576e783 100644
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java
@@ -26,6 +26,7 @@ import javax.xml.namespace.QName;
 import javax.portlet.*;
 import javax.portlet.filter.*;
 import javax.portlet.tck.beans.*;
+import javax.portlet.tck.constants.*;
 import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
 import static javax.portlet.tck.constants.Constants.*;
 import static javax.portlet.PortletSession.*;