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:42 UTC

[07/48] worked on dispatcher tests

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_DispatchIncludeServletResource.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_DispatchIncludeServletResource.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_DispatchIncludeServletResource.java
deleted file mode 100644
index 74a04cc..0000000
--- a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_DispatchIncludeServletResource.java
+++ /dev/null
@@ -1,155 +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.IOException;
-import java.io.PrintWriter;
-
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import static java.util.logging.Logger.*;
-
-import javax.portlet.*;
-import javax.portlet.filter.*;
-import javax.portlet.tck.beans.ClassChecker;
-import javax.portlet.tck.beans.TestCaseDetails;
-import javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails;
-import static javax.portlet.tck.beans.JSR286DispatcherTestCaseDetails.*;
-import javax.portlet.tck.beans.TestResult;
-
-/**
- * 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.
- */
-public class DispatcherTests_SPEC2_19_DispatchIncludeServletResource implements Portlet {
-   private static final String LOG_CLASS = 
-         DispatcherTests_SPEC2_19_DispatchIncludeServletResource.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 actionRequest, ActionResponse actionResponse)
-         throws PortletException, IOException {
-   }
-
-   @Override
-   public void render(RenderRequest renderRequest, RenderResponse renderResponse)
-         throws PortletException, IOException {
-      
-      if (LOGGER.isLoggable(Level.FINE)) {
-         LOGGER.logp(Level.FINE, LOG_CLASS, "render", "Entry");
-      }
-
-      PrintWriter writer = renderResponse.getWriter();
-      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
-
-      // Create result objects for the tests
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes1        */
-      /* Details: "If the request dispatcher is obtained through the          */
-      /* getRequestDispatcher method, the request attribute                   */
-      /* javax.servlet.include.request_uri will be set, and equals the        */
-      /* value from HTTPServletRequest.getRequestURI for the first servlet    */
-      /* in the include chain"                                                */
-      TestResult tr0 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES1);
-      /* TODO: implement test */
-      tr0.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes2        */
-      /* Details: "If the request dispatcher is obtained through the          */
-      /* getRequestDispatcher method, the request attribute                   */
-      /* javax.servlet.include.context_path will be set, and equals the       */
-      /* value from HTTPServletRequest.getContestPath for the first servlet   */
-      /* in the include chain"                                                */
-      TestResult tr1 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES2);
-      /* TODO: implement test */
-      tr1.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes3        */
-      /* Details: "If the request dispatcher is obtained through the          */
-      /* getRequestDispatcher method, the request attribute                   */
-      /* javax.servlet.include.servlet_path will be set, and equals the       */
-      /* value from HTTPServletRequest.getServletPath for the first servlet   */
-      /* in the include chain"                                                */
-      TestResult tr2 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES3);
-      /* TODO: implement test */
-      tr2.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes4        */
-      /* Details: "If the request dispatcher is obtained through the          */
-      /* getRequestDispatcher method, the request attribute                   */
-      /* javax.servlet.include.path_info will be set, and equals the value    */
-      /* from HTTPServletRequest.getPathInfo for the first servlet in the     */
-      /* include chain"                                                       */
-      TestResult tr3 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES4);
-      /* TODO: implement test */
-      tr3.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes5        */
-      /* Details: "If the request dispatcher is obtained through the          */
-      /* getRequestDispatcher method, the request attribute                   */
-      /* javax.servlet.include.query_string will be set, and equals the       */
-      /* value from HTTPServletRequest.getQueryString for the first servlet   */
-      /* in the include chain"                                                */
-      TestResult tr4 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES5);
-      /* TODO: implement test */
-      tr4.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes6        */
-      /* Details: "The request attribute javax.portlet.config must be set     */
-      /* to the javax.portlet.PortletConfig object"                           */
-      TestResult tr5 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES6);
-      /* TODO: implement test */
-      tr5.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes7        */
-      /* Details: "For includes from the serveResource method, The request    */
-      /* attribute javax.portlet.request must be set to the                   */
-      /* javax.portlet.ResourceRequest object"                                */
-      TestResult tr6 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES7);
-      /* TODO: implement test */
-      tr6.writeTo(writer);
-
-      /* TestCase: SPEC2_19_DispatchIncludeServletResource_attributes8        */
-      /* Details: "For includes from the serveResource method, The request    */
-      /* attribute javax.portlet.response must be set to the                  */
-      /* javax.portlet.ResourceResponse object"                               */
-      TestResult tr7 = tcd.getTestResultFailed(SPEC2_19_DISPATCHINCLUDESERVLETRESOURCE_ATTRIBUTES8);
-      /* TODO: implement test */
-      tr7.writeTo(writer);
-
-
-   }
-
-}
-

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..37e830a
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServlet.java
@@ -0,0 +1,91 @@
+/*  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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServlet_servlet");
+      rd.forward(portletReq, portletResp);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..5b5b776
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletAction.java
@@ -0,0 +1,188 @@
+/*  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_ForwardServletAction_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_ForwardServletAction implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_ForwardServletAction.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");
+
+      StringWriter writer = new StringWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServletAction_servlet");
+      rd.forward(portletReq, portletResp);
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletSession ps = portletReq.getPortletSession();
+      String msg = (String) ps.getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_ForwardServletAction", APPLICATION_SCOPE);
+      if (msg != null) {
+         writer.write("<p>" + msg + "</p>\n");
+         ps.removeAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_ForwardServletAction", APPLICATION_SCOPE);
+      } else {
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes1                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.forward.request_uri will be set, and equals the        */
+         /* value from HTTPServletRequest.getRequestURI for the first servlet    */
+         /* in the forward chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes2                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.forward.context_path will be set, and equals the       */
+         /* value from HTTPServletRequest.getContestPath for the first servlet   */
+         /* in the forward chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes3                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.forward.servlet_path will be set, and equals the       */
+         /* value from HTTPServletRequest.getServletPath for the first servlet   */
+         /* in the forward chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes4                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.forward.path_info will be set, and equals the value    */
+         /* from HTTPServletRequest.getPathInfo for the first servlet in the     */
+         /* forward chain"                                                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes5                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.forward.query_string will be set, and equals the       */
+         /* value from HTTPServletRequest.getQueryString for the first servlet   */
+         /* in the forward chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes5", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes6                  */
+         /* Details: "The request attribute javax.portlet.config must be set     */
+         /* to the javax.portlet.PortletConfig object"                           */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes6", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes7                  */
+         /* Details: "For forwards from the processAction method, The request    */
+         /* attribute javax.portlet.request must be set to the                   */
+         /* javax.portlet.ActionRequest object"                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes7", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_ForwardServletAction_attributes8                  */
+         /* Details: "For forwards from the processAction method, The request    */
+         /* attribute javax.portlet.response must be set to the                  */
+         /* javax.portlet.ActionResponse object"                                 */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_ForwardServletAction_attributes8", aurl);
+            tb.writeTo(writer);
+         }
+
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..1e3b493
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent.java
@@ -0,0 +1,180 @@
+/*  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_ForwardServletEvent_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_ForwardServletEvent implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_ForwardServletEvent.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");
+
+      StringWriter writer = new StringWriter();
+
+      QName eventQName = new QName(TCKNAMESPACE,
+             "DispatcherTests_SPEC2_19_ForwardServletEvent");
+      portletResp.setEvent(eventQName, "Hi!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes1                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.forward.request_uri will be set, and equals the        */
+      /* value from HTTPServletRequest.getRequestURI for the first servlet    */
+      /* in the forward chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes2                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.forward.context_path will be set, and equals the       */
+      /* value from HTTPServletRequest.getContestPath for the first servlet   */
+      /* in the forward chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes3                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.forward.servlet_path will be set, and equals the       */
+      /* value from HTTPServletRequest.getServletPath for the first servlet   */
+      /* in the forward chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes4                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.forward.path_info will be set, and equals the value    */
+      /* from HTTPServletRequest.getPathInfo for the first servlet in the     */
+      /* forward chain"                                                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes5                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.forward.query_string will be set, and equals the       */
+      /* value from HTTPServletRequest.getQueryString for the first servlet   */
+      /* in the forward chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes6                   */
+      /* Details: "The request attribute javax.portlet.config must be set     */
+      /* to the javax.portlet.PortletConfig object"                           */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes7                   */
+      /* Details: "For forwards from the processEvent method, The request     */
+      /* attribute javax.portlet.request must be set to the                   */
+      /* javax.portlet.EventRequest object"                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_ForwardServletEvent_attributes8                   */
+      /* Details: "For forwards from the processEvent method, The request     */
+      /* attribute javax.portlet.response must be set to the                  */
+      /* javax.portlet.EventResponse object"                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_ForwardServletEvent_attributes8", aurl);
+         tb.writeTo(writer);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent_event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent_event.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent_event.java
new file mode 100644
index 0000000..2e7246e
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletEvent_event.java
@@ -0,0 +1,98 @@
+/*  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_ForwardServletEvent_event implements Portlet, EventPortlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_ForwardServletEvent_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_ForwardServletEvent_event</p>\n");
+
+      String msg = (String) portletReq.getPortletSession()
+            .getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_ForwardServletEvent", 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");
+
+
+      StringWriter writer = new StringWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServletEvent_servlet");
+      rd.forward(portletReq, portletResp);
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..7460804
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletRender.java
@@ -0,0 +1,91 @@
+/*  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_ForwardServletRender_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_ForwardServletRender implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_ForwardServletRender.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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServletRender_servlet");
+      rd.forward(portletReq, portletResp);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..02a1a0d
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_ForwardServletResource.java
@@ -0,0 +1,106 @@
+/*  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_ForwardServletResource_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_ForwardServletResource implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_ForwardServletResource.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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_ForwardServletResource_servlet");
+      rd.forward(portletReq, portletResp);
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      writer.write("<div id=\"DispatcherTests_SPEC2_19_ForwardServletResource\">no resource output.</div>\n");
+      ResourceURL resurl = portletResp.createResourceURL();
+      resurl.setCacheability(PAGE);
+      writer.write("<script>\n");
+      writer.write("(function () {\n");
+      writer.write("   var xhr = new XMLHttpRequest();\n");
+      writer.write("   xhr.onreadystatechange=function() {\n");
+      writer.write("      if (xhr.readyState==4 && xhr.status==200) {\n");
+      writer.write("         document.getElementById(\"DispatcherTests_SPEC2_19_ForwardServletResource\").innerHTML=xhr.responseText;\n");
+      writer.write("      }\n");
+      writer.write("   };\n");
+      writer.write("   xhr.open(\"GET\",\"" + resurl.toString() + "\",true);\n");
+      writer.write("   xhr.send();\n");
+      writer.write("})();\n");
+      writer.write("</script>\n");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..5ba0034
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServlet.java
@@ -0,0 +1,91 @@
+/*  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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServlet_servlet");
+      rd.include(portletReq, portletResp);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..d358bdb
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletAction.java
@@ -0,0 +1,188 @@
+/*  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_IncludeServletAction_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_IncludeServletAction implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_IncludeServletAction.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");
+
+      StringWriter writer = new StringWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServletAction_servlet");
+      rd.include(portletReq, portletResp);
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletSession ps = portletReq.getPortletSession();
+      String msg = (String) ps.getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_IncludeServletAction", APPLICATION_SCOPE);
+      if (msg != null) {
+         writer.write("<p>" + msg + "</p>\n");
+         ps.removeAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_IncludeServletAction", APPLICATION_SCOPE);
+      } else {
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes1                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.include.request_uri will be set, and equals the        */
+         /* value from HTTPServletRequest.getRequestURI for the first servlet    */
+         /* in the include chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes1", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes2                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.include.context_path will be set, and equals the       */
+         /* value from HTTPServletRequest.getContestPath for the first servlet   */
+         /* in the include chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes2", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes3                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.include.servlet_path will be set, and equals the       */
+         /* value from HTTPServletRequest.getServletPath for the first servlet   */
+         /* in the include chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes3", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes4                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.include.path_info will be set, and equals the value    */
+         /* from HTTPServletRequest.getPathInfo for the first servlet in the     */
+         /* include chain"                                                       */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes4", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes5                  */
+         /* Details: "If the request dispatcher is obtained through the          */
+         /* getRequestDispatcher method, the request attribute                   */
+         /* javax.servlet.include.query_string will be set, and equals the       */
+         /* value from HTTPServletRequest.getQueryString for the first servlet   */
+         /* in the include chain"                                                */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes5", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes6                  */
+         /* Details: "The request attribute javax.portlet.config must be set     */
+         /* to the javax.portlet.PortletConfig object"                           */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes6", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes7                  */
+         /* Details: "For includes from the processAction method, The request    */
+         /* attribute javax.portlet.request must be set to the                   */
+         /* javax.portlet.ActionRequest object"                                  */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes7", aurl);
+            tb.writeTo(writer);
+         }
+
+         /* TestCase: SPEC2_19_IncludeServletAction_attributes8                  */
+         /* Details: "For includes from the processAction method, The request    */
+         /* attribute javax.portlet.response must be set to the                  */
+         /* javax.portlet.ActionResponse object"                                 */
+         {
+            PortletURL aurl = portletResp.createActionURL();
+            TestButton tb = new TestButton("SPEC2_19_IncludeServletAction_attributes8", aurl);
+            tb.writeTo(writer);
+         }
+
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..8ab98a9
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent.java
@@ -0,0 +1,180 @@
+/*  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_IncludeServletEvent_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_IncludeServletEvent implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_IncludeServletEvent.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");
+
+      StringWriter writer = new StringWriter();
+
+      QName eventQName = new QName(TCKNAMESPACE,
+             "DispatcherTests_SPEC2_19_IncludeServletEvent");
+      portletResp.setEvent(eventQName, "Hi!");
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes1                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.include.request_uri will be set, and equals the        */
+      /* value from HTTPServletRequest.getRequestURI for the first servlet    */
+      /* in the include chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes1", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes2                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.include.context_path will be set, and equals the       */
+      /* value from HTTPServletRequest.getContestPath for the first servlet   */
+      /* in the include chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes2", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes3                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.include.servlet_path will be set, and equals the       */
+      /* value from HTTPServletRequest.getServletPath for the first servlet   */
+      /* in the include chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes3", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes4                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.include.path_info will be set, and equals the value    */
+      /* from HTTPServletRequest.getPathInfo for the first servlet in the     */
+      /* include chain"                                                       */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes4", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes5                   */
+      /* Details: "If the request dispatcher is obtained through the          */
+      /* getRequestDispatcher method, the request attribute                   */
+      /* javax.servlet.include.query_string will be set, and equals the       */
+      /* value from HTTPServletRequest.getQueryString for the first servlet   */
+      /* in the include chain"                                                */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes5", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes6                   */
+      /* Details: "The request attribute javax.portlet.config must be set     */
+      /* to the javax.portlet.PortletConfig object"                           */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes6", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes7                   */
+      /* Details: "For includes from the processEvent method, The request     */
+      /* attribute javax.portlet.request must be set to the                   */
+      /* javax.portlet.EventRequest object"                                   */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes7", aurl);
+         tb.writeTo(writer);
+      }
+
+      /* TestCase: SPEC2_19_IncludeServletEvent_attributes8                   */
+      /* Details: "For includes from the processEvent method, The request     */
+      /* attribute javax.portlet.response must be set to the                  */
+      /* javax.portlet.EventResponse object"                                  */
+      {
+         PortletURL aurl = portletResp.createActionURL();
+         TestButton tb = new TestButton("SPEC2_19_IncludeServletEvent_attributes8", aurl);
+         tb.writeTo(writer);
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent_event.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent_event.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent_event.java
new file mode 100644
index 0000000..ba7b1ce
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletEvent_event.java
@@ -0,0 +1,98 @@
+/*  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_IncludeServletEvent_event implements Portlet, EventPortlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_IncludeServletEvent_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_IncludeServletEvent_event</p>\n");
+
+      String msg = (String) portletReq.getPortletSession()
+            .getAttribute(RESULT_ATTR_PREFIX + "DispatcherTests_SPEC2_19_IncludeServletEvent", 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");
+
+
+      StringWriter writer = new StringWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServletEvent_servlet");
+      rd.include(portletReq, portletResp);
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..3c0153b
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletRender.java
@@ -0,0 +1,91 @@
+/*  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_IncludeServletRender_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_IncludeServletRender implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_IncludeServletRender.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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServletRender_servlet");
+      rd.include(portletReq, portletResp);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/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
new file mode 100644
index 0000000..b14e4ff
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_IncludeServletResource.java
@@ -0,0 +1,106 @@
+/*  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_IncludeServletResource_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_IncludeServletResource implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_IncludeServletResource.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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      PortletRequestDispatcher rd = portletConfig.getPortletContext()
+            .getRequestDispatcher("/DispatcherTests_SPEC2_19_IncludeServletResource_servlet");
+      rd.include(portletReq, portletResp);
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      writer.write("<div id=\"DispatcherTests_SPEC2_19_IncludeServletResource\">no resource output.</div>\n");
+      ResourceURL resurl = portletResp.createResourceURL();
+      resurl.setCacheability(PAGE);
+      writer.write("<script>\n");
+      writer.write("(function () {\n");
+      writer.write("   var xhr = new XMLHttpRequest();\n");
+      writer.write("   xhr.onreadystatechange=function() {\n");
+      writer.write("      if (xhr.readyState==4 && xhr.status==200) {\n");
+      writer.write("         document.getElementById(\"DispatcherTests_SPEC2_19_IncludeServletResource\").innerHTML=xhr.responseText;\n");
+      writer.write("      }\n");
+      writer.write("   };\n");
+      writer.write("   xhr.open(\"GET\",\"" + resurl.toString() + "\",true);\n");
+      writer.write("   xhr.send();\n");
+      writer.write("})();\n");
+      writer.write("</script>\n");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/05bf03b7/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Render.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Render.java b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Render.java
new file mode 100644
index 0000000..bbc1b28
--- /dev/null
+++ b/portlet-tck_3.0/V2DispatcherTests/src/main/java/javax/portlet/tck/portlets/DispatcherTests_SPEC2_19_Render.java
@@ -0,0 +1,128 @@
+/*  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_Render_event
+ *
+ */
+public class DispatcherTests_SPEC2_19_Render implements Portlet, ResourceServingPortlet {
+   private static final String LOG_CLASS = 
+         DispatcherTests_SPEC2_19_Render.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");
+
+      StringWriter writer = new StringWriter();
+
+   }
+
+   @Override
+   public void serveResource(ResourceRequest portletReq, ResourceResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet serveResource entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
+      LOGGER.entering(LOG_CLASS, "main portlet render entry");
+
+      PrintWriter writer = portletResp.getWriter();
+
+      JSR286DispatcherTestCaseDetails tcd = new JSR286DispatcherTestCaseDetails();
+
+      // Create result objects for the tests
+
+      /* TestCase: SPEC2_19_Render_getDispatcher7                             */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not start with \"/\", the method returns null"                       */
+      TestResult tr0 = tcd.getTestResultFailed(SPEC2_19_RENDER_GETDISPATCHER7);
+      /* TODO: implement test */
+      tr0.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Render_getDispatcher8                             */
+      /* Details: "If the path provided to getRequestDispatcher method ends   */
+      /* with \"/\", the method returns null"                                 */
+      TestResult tr1 = tcd.getTestResultFailed(SPEC2_19_RENDER_GETDISPATCHER8);
+      /* TODO: implement test */
+      tr1.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Render_getDispatcher9                             */
+      /* Details: "If the path provided to getRequestDispatcher method does   */
+      /* not specify a valid path, the method returns null"                   */
+      TestResult tr2 = tcd.getTestResultFailed(SPEC2_19_RENDER_GETDISPATCHER9);
+      /* TODO: implement test */
+      tr2.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Render_getDispatcher10                            */
+      /* Details: "The PortletContext getNamedDispatcher method returns a     */
+      /* PortletRequestDispatcher for a servlet within the portlet            */
+      /* application"                                                         */
+      TestResult tr3 = tcd.getTestResultFailed(SPEC2_19_RENDER_GETDISPATCHER10);
+      /* TODO: implement test */
+      tr3.writeTo(writer);
+
+      /* TestCase: SPEC2_19_Render_getDispatcher11                            */
+      /* Details: "If the name provided to getNamedDispatcher method is not   */
+      /* valid, the method returns null"                                      */
+      TestResult tr4 = tcd.getTestResultFailed(SPEC2_19_RENDER_GETDISPATCHER11);
+      /* TODO: implement test */
+      tr4.writeTo(writer);
+
+   }
+
+}