portals-pluto-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From msnickl...@apache.org
Subject [01/13] portals-pluto git commit: Implemented module for portlet asynchronous support testing. Implemented initial batch of test cases.
Date Thu, 27 Oct 2016 13:28:34 GMT
Repository: portals-pluto
Updated Branches:
  refs/heads/master 4af292810 -> 1dc0a4563


http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/portlets/ResourceAsyncTests_SPEC_21_NoAsync.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/portlets/ResourceAsyncTests_SPEC_21_NoAsync.java b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/portlets/ResourceAsyncTests_SPEC_21_NoAsync.java
new file mode 100644
index 0000000..f0b52ff
--- /dev/null
+++ b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/portlets/ResourceAsyncTests_SPEC_21_NoAsync.java
@@ -0,0 +1,240 @@
+/*  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 static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.Portlet;
+import javax.portlet.PortletAsyncContext;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import javax.portlet.ResourceServingPortlet;
+import javax.portlet.ResourceURL;
+import javax.portlet.annotations.PortletConfiguration;
+import javax.portlet.tck.beans.ResourceLink;
+import javax.portlet.tck.beans.TestResult;
+import javax.portlet.tck.util.ModuleTestCaseDetails;
+import javax.servlet.DispatcherType;
+
+/**
+ * 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.
+ *
+ */
+
+@PortletConfiguration(portletName = "ResourceAsyncTests_SPEC_21_NoAsync")
+public class ResourceAsyncTests_SPEC_21_NoAsync implements Portlet, ResourceServingPortlet {
+   
+   @Override
+   public void init(PortletConfig config) throws PortletException {
+   }
+
+   @Override
+   public void destroy() {
+   }
+
+   @Override
+   public void processAction(ActionRequest portletReq, ActionResponse portletResp) throws PortletException, IOException {
+   }
+
+   @Override
+   public void render(RenderRequest portletReq, RenderResponse portletResp) throws PortletException, IOException {
+
+      PrintWriter writer = portletResp.getWriter();
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncSupported            */
+      /* Details: "The ResourceRequest object isAsyncSupported() method returns     */
+      /* false if the portlet does not support async processing"                    */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncStarted              */
+      /* Details: "The ResourceRequest object isAsyncStarted() method returns false */
+      /* if the portlet does not support async processing"                          */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync1                 */
+      /* Details: "The ResourceRequest object startAsync() method throws an         */
+      /* IllegalStateException if the portlet does not support async processing"    */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync2                 */
+      /* Details: "The ResourceRequest object startAsync(ResourceRequest,           */
+      /* ResourceResponse) method throws an IllegalStateException if the portlet    */
+      /* does not support async processing"                                         */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_getDispatcherType           */
+      /* Details: "The ResourceRequest object getDispatcherType() method returns    */
+      /* the value DispatcherType.REQUEST within the resource method if the portlet */
+      /* does not support async processing"                                         */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_getPortletAsyncContext      */
+      /* Details: "The ResourceRequest object getPortletAsyncContext() method       */
+      /* returns the value null if the portlet does not support async processing"   */
+      {
+         ResourceURL rurl = portletResp.createResourceURL();
+         rurl.getResourceParameters().setValue("testcase",V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT) ;
+         ResourceLink link = new ResourceLink(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT, rurl);
+         link.writeResourceFetcherImmediate(writer);
+      }
+
+   }
+
+   @SuppressWarnings("unused")
+   @Override
+   public void serveResource(ResourceRequest req, ResourceResponse resp) throws PortletException, IOException {
+
+      resp.setContentType("text/html");
+      resp.setCharacterEncoding("UTF-8");
+      PrintWriter writer = resp.getWriter();
+      ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+      String testcase = req.getResourceParameters().getValue("testcase");
+      TestResult result = null;
+      
+      if (testcase == null) {
+         writer.write("Unknown test case: null");
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncSupported            */
+      /* Details: "The ResourceRequest object isAsyncSupported() method returns     */
+      /* false if the portlet does not support async processing"                    */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED);
+         if (req.isAsyncSupported() == false) {
+            result.setTcSuccess(true);
+         } else {
+            result.appendTcDetail("isAsyncSupported returns true when async is not supported.");
+         }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncStarted              */
+      /* Details: "The ResourceRequest object isAsyncStarted() method returns false */
+      /* if the portlet does not support async processing"                          */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED);
+         if (req.isAsyncStarted() == false) {
+            result.setTcSuccess(true);
+         } else {
+            result.appendTcDetail("isAsyncStarted returns true when async is not supported.");
+         }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync1                 */
+      /* Details: "The ResourceRequest object startAsync() method throws an         */
+      /* IllegalStateException if the portlet does not support async processing"    */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1);
+         try {
+            PortletAsyncContext ctx = req.startPortletAsync();
+            result.appendTcDetail("startPortletAsync did not throw exception although async is not supported.");
+         } catch (IllegalStateException e) {
+            result.setTcSuccess(true);
+         } catch (Throwable t) {
+            result.appendTcDetail("startPortletAsync threw unexpected exception type: " + t.getMessage());
+         }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync2                 */
+      /* Details: "The ResourceRequest object startAsync(ResourceRequest,           */
+      /* ResourceResponse) method throws an IllegalStateException if the portlet    */
+      /* does not support async processing"                                         */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2);
+         try {
+            PortletAsyncContext ctx = req.startPortletAsync(req, resp);
+            result.appendTcDetail("startPortletAsync did not throw exception although async is not supported.");
+         } catch (IllegalStateException e) {
+            result.setTcSuccess(true);
+         } catch (Throwable t) {
+            result.appendTcDetail("startPortletAsync threw unexpected exception type: " + t.getMessage());
+         }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_getDispatcherType           */
+      /* Details: "The ResourceRequest object getDispatcherType() method returns    */
+      /* the value DispatcherType.REQUEST within the resource method if the portlet */
+      /* does not support async processing"                                         */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE);
+         DispatcherType dt = req.getDispatcherType();
+         if (dt == DispatcherType.REQUEST) {
+            result.setTcSuccess(true);
+         } else {
+            result.appendTcDetail("Unexpected dispatcher type: " + dt.name());
+         }
+
+      /* TestCase: V3ResourceAsyncTests_SPEC_21_NoAsync_getPortletAsyncContext      */
+      /* Details: "The ResourceRequest object getPortletAsyncContext() method       */
+      /* returns the value null if the portlet does not support async processing"   */
+      } else if (testcase.equals(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT)) {
+         result = tcd.getTestResultFailed(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT);
+         if (req.getPortletAsyncContext() == null) {
+            result.setTcSuccess(true);
+         } else {
+            result.appendTcDetail("PortletAsyncContext was not null although async is not supported.");
+         }
+
+      } else {
+         writer.write("Unknown test case:" + testcase);
+      }
+
+      if (result != null) {
+         writer.write(result.toString());
+      }
+
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
new file mode 100644
index 0000000..143d5ce
--- /dev/null
+++ b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
@@ -0,0 +1,206 @@
+/*  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.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.portlet.tck.beans.TestCaseDetails;
+
+/**
+ * Defines constants for the test case names and test case details 
+ * for the JSR 362 TCK.
+ * 
+ * Note that the backing map is static and not threadsafe. Operations
+ * that change the map such as put, remove, etc., should not be used
+ * in portlets.
+ * 
+ * @author nick
+ */
+public class ModuleTestCaseDetails extends TestCaseDetails {
+
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED = "V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncSupported";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED = "V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncStarted";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1 = "V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2 = "V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE = "V3ResourceAsyncTests_SPEC_21_NoAsync_getDispatcherType";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT = "V3ResourceAsyncTests_SPEC_21_NoAsync_getPortletAsyncContext";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSUPPORTED = "V3ResourceAsyncTests_SPEC_21_Async_isAsyncSupported";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSTARTED1 = "V3ResourceAsyncTests_SPEC_21_Async_isAsyncStarted1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSTARTED2 = "V3ResourceAsyncTests_SPEC_21_Async_isAsyncStarted2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC1 = "V3ResourceAsyncTests_SPEC_21_Async_startAsync1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC2 = "V3ResourceAsyncTests_SPEC_21_Async_startAsync2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC3 = "V3ResourceAsyncTests_SPEC_21_Async_startAsync3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC4 = "V3ResourceAsyncTests_SPEC_21_Async_startAsync4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE1 = "V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE2 = "V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE3 = "V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE4 = "V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE5 = "V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType5";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT1 = "V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT2 = "V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE1 = "V3ResourceAsyncTests_SPEC_21_Async_complete1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE2 = "V3ResourceAsyncTests_SPEC_21_Async_complete2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE3 = "V3ResourceAsyncTests_SPEC_21_Async_complete3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE4 = "V3ResourceAsyncTests_SPEC_21_Async_complete4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE5 = "V3ResourceAsyncTests_SPEC_21_Async_complete5";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE6 = "V3ResourceAsyncTests_SPEC_21_Async_complete6";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_SETTIMEOUT = "V3ResourceAsyncTests_SPEC_21_Async_setTimeout";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTIMEOUT1 = "V3ResourceAsyncTests_SPEC_21_Async_getTimeout1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTIMEOUT2 = "V3ResourceAsyncTests_SPEC_21_Async_getTimeout2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE1 = "V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE2 = "V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE3 = "V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST1 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST2 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST3 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE1 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE2 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE3 = "V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER1 = "V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER2 = "V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER3 = "V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER4 = "V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER1 = "V3ResourceAsyncTests_SPEC_21_Async_addListener1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER2 = "V3ResourceAsyncTests_SPEC_21_Async_addListener2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER3 = "V3ResourceAsyncTests_SPEC_21_Async_addListener3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER4 = "V3ResourceAsyncTests_SPEC_21_Async_addListener4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH1 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH2 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH3 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH4 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH5 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch5";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH6 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch6";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH7 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch7";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH8 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch8";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH9 = "V3ResourceAsyncTests_SPEC_21_Async_dispatch9";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCHA = "V3ResourceAsyncTests_SPEC_21_Async_dispatchA";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START1 = "V3ResourceAsyncTests_SPEC_21_Async_start1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START2 = "V3ResourceAsyncTests_SPEC_21_Async_start2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START3 = "V3ResourceAsyncTests_SPEC_21_Async_start3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START4 = "V3ResourceAsyncTests_SPEC_21_Async_start4";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI1 = "V3ResourceAsyncTests_SPEC_21_Async_cdi1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI2 = "V3ResourceAsyncTests_SPEC_21_Async_cdi2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI3 = "V3ResourceAsyncTests_SPEC_21_Async_cdi3";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONTIMEOUT = "V3ResourceAsyncTests_SPEC_21_Async_onTimeout";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONERROR = "V3ResourceAsyncTests_SPEC_21_Async_onError";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONCOMPLETE = "V3ResourceAsyncTests_SPEC_21_Async_onComplete";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONSTARTASYNC = "V3ResourceAsyncTests_SPEC_21_Async_onStartAsync";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT = "V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDREQUEST1 = "V3ResourceAsyncTests_SPEC_21_Async_getSuppliedRequest1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDREQUEST2 = "V3ResourceAsyncTests_SPEC_21_Async_getSuppliedRequest2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDRESPONSE1 = "V3ResourceAsyncTests_SPEC_21_Async_getSuppliedResponse1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDRESPONSE2 = "V3ResourceAsyncTests_SPEC_21_Async_getSuppliedResponse2";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTHROWABLE1 = "V3ResourceAsyncTests_SPEC_21_Async_getThrowable1";
+   public final static String V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTHROWABLE2 = "V3ResourceAsyncTests_SPEC_21_Async_getThrowable2";
+
+   
+   private final static Map<String, String> tcd = new HashMap<String, String>();
+   static {
+
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSUPPORTED, "The ResourceRequest object isAsyncSupported() method returns false if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_ISASYNCSTARTED, "The ResourceRequest object isAsyncStarted() method returns false if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC1, "The ResourceRequest object startAsync() method throws an IllegalStateException if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_STARTASYNC2, "The ResourceRequest object startAsync(ResourceRequest, ResourceResponse) method throws an IllegalStateException if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETDISPATCHERTYPE, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.REQUEST within the resource method if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_NOASYNC_GETPORTLETASYNCCONTEXT, "The ResourceRequest object getPortletAsyncContext() method returns the value null if the portlet does not support async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSUPPORTED, "The ResourceRequest object isAsyncSupported() method returns true if the portlet supports async processing");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSTARTED1, "The ResourceRequest object isAsyncStarted() method returns false if asynchronous processing has not been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ISASYNCSTARTED2, "The ResourceRequest object isAsyncStarted() method returns true if asynchronous processing has been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC1, "The ResourceRequest object startAsync() method returns a PortletAsyncContext object");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC2, "The ResourceRequest object startAsync(ResourceRequest, ResourceResponse) method returns a PortletAsyncContext object");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC3, "The ResourceRequest object startAsync() method throws an IllegalStateException if asynchronous processing has already been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_STARTASYNC4, "The ResourceRequest object startAsync(ResourceRequest, ResourceResponse) method throws an IllegalStateException if asynchronous processing has already been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE1, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.REQUEST within the resource method before the container dispatch cycle in which asynchronous processing is started returns");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE2, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.REQUEST within the resource filter before the container dispatch cycle in which asynchronous processing is started returns");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE3, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.ASYNC within the resource method when the PortletAsyncContext object dispatch() method is used to dispatch to the resource method ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE4, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.ASYNC within the resource filter when the PortletAsyncContext object dispatch() method is used to dispatch to the resource method ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETDISPATCHERTYPE5, "The ResourceRequest object getDispatcherType() method returns the value DispatcherType.ASYNC within the dispatch target method when the PortletAsyncContext object dispatch(String) method is used to dispatch to the resource method ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT1, "The ResourceRequest object getPortletAsyncContext() method returns the value null if async processing has not been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT2, "The ResourceRequest object getPortletAsyncContext() method returns a PortletAsyncContext object if async processing has been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE1, "The PortletAsyncContext object complete() method completes asynchronous processing within the original resource request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE2, "The PortletAsyncContext object complete() method completes asynchronous processing within an asynchronous thread");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE3, "The PortletAsyncContext object complete() method throws an IllegalStateException if called before asynchronous processing has started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE4, "The PortletAsyncContext object complete() method throws an IllegalStateException if called after asynchronous processing has completed");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE5, "The PortletAsyncContext object complete() method throws an IllegalStateException if called after the PortletAsyncContext object dispatch() method has been called");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_COMPLETE6, "The PortletAsyncContext object complete() method throws an IllegalStateException if called after the PortletAsyncContext object dispatch(String) method has been called");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_SETTIMEOUT, "The PortletAsyncContext object setTimeout() method sets the asynchronous timeout value");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTIMEOUT1, "The PortletAsyncContext object getTimeout() method returns the default value of 30000 ms");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTIMEOUT2, "The PortletAsyncContext object getTimeout() method returns a previously set timeout value");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE1, "The PortletAsyncContext object hasOriginalRequestAndResponse() method returns true if asynchronous processing was started through the startPortletAsync() method");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE2, "The PortletAsyncContext object hasOriginalRequestAndResponse() method returns true if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were not wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_HASORIGINALREQUESTANDRESPONSE3, "The PortletAsyncContext object hasOriginalRequestAndResponse() method returns false if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST1, "The PortletAsyncContext object getResourceRequest() method returns the original ResourceRequest object if asynchronous processing was started through the startPortletAsync() method");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST2, "The PortletAsyncContext object getResourceRequest() method returns the original ResourceRequest object if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were not wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCEREQUEST3, "The PortletAsyncContext object getResourceRequest() method returns the wrapped ResourceRequest object if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE1, "The PortletAsyncContext object getResourceResponse() method returns the original ResourceResponse object if asynchronous processing was started through the startPortletAsync() method");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE2, "The PortletAsyncContext object getResourceResponse() method returns the original ResourceResponse object if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were not wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETRESOURCERESPONSE3, "The PortletAsyncContext object getResourceResponse() method returns the wrapped  ResourceResponse object if asynchronous processing was started through the startPortletAsync(ResourceRequest, ResourceResponse) method if the request and response objects were wrapped");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER1, "The PortletAsyncContext object createPortletAsyncListener(Class) method returns an instance of the PortletAsyncListener class provided");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER2, "The PortletAsyncContext object createPortletAsyncListener(Class) method throws a PortletException if the class provided is not of type PortletAsyncListener");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER3, "The PortletAsyncContext object createPortletAsyncListener(Class) method throws a PortletException if the class provided cannot be instantiated");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CREATEPORTLETASYNCLISTENER4, "The PortletAsyncContext object createPortletAsyncListener(Class) method throws a PortletException if the class provided does not have a zero argument constructor");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER1, "The PortletAsyncContext object addListener(PortletAsyncListener) method adds a portlet asynchronous listener");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER2, "The PortletAsyncContext object addListener(PortletAsyncListener) method throws an IllegalStateException if called after the container-initiated dispatch during which one of the startAsync() methods was called has returned to the container");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER3, "The PortletAsyncContext object addListener(PortletAsyncListener, ResourceRequest, ResourceResponse) method adds a portlet asynchronous listener");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ADDLISTENER4, "The PortletAsyncContext object addListener(PortletAsyncListener, ResourceRequest, ResourceResponse) method throws an IllegalStateException if called after the container-initiated dispatch during which one of the startAsync() methods was called has returned to the container");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH1, "The PortletAsyncContext object dispatch() method dispatches to the resource method if called from within the original resource request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH2, "The PortletAsyncContext object dispatch() method dispatches to the resource method if called from within an asynchronous thread");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH3, "The PortletAsyncContext object dispatch() method throws an IllegalStateException if called before a new asynchronous processing cycle has been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH4, "The PortletAsyncContext object dispatch() method throws an IllegalStateException if called after asynchronous processing has completed");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH5, "The PortletAsyncContext object dispatch() method throws an IllegalStateException if called after a dispatch method has been called within the same container dispatch cycle");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH6, "The PortletAsyncContext object dispatch(String) method dispatches to the given path if called from within the original resource request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH7, "The PortletAsyncContext object dispatch(String) method dispatches to the given path if called from within an asynchronous thread");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH8, "The PortletAsyncContext object dispatch(String) method throws an IllegalStateException if called before a new asynchronous processing cycle has been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCH9, "The PortletAsyncContext object dispatch(String) method throws an IllegalStateException if called after asynchronous processing has completed");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_DISPATCHA, "The PortletAsyncContext object dispatch(String) method throws an IllegalStateException if called after a dispatch method has been called within the same container dispatch cycle");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START1, "The PortletAsyncContext object start(String) method causes an asynchronous thread to run");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START2, "The PortletAsyncContext object start(String) method throws an IllegalStateException if called before a new asynchronous processing cycle has been started");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START3, "The PortletAsyncContext object start(String) method throws an IllegalStateException if called after asynchronous processing has completed");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_START4, "The PortletAsyncContext object start(String) method throws an IllegalStateException if called after a dispatch method has been called within the same container dispatch cycle");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI1, "When CDI is available and the asynchronous thread is started through the PortletAsyncContext object, the asynchronous thread runs in the same context as the original request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI2, "When CDI is available and the asynchronous thread is started through the PortletAsyncContext object, the PortletAsyncListener runs in the same context as the original request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_CDI3, "When CDI is available and the asynchronous thread is started through the PortletAsyncContext object, the resource filter runs in the same context as the original request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONTIMEOUT, "The PortletAsyncListener object onTimeout(PortletAsyncEvent) method is called when a timeout occurs ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONERROR, "The PortletAsyncListener object onError(PortletAsyncEvent) method is called if an exception is thrown in an asynchronous thread started through the PortletAsyncContext object ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONCOMPLETE, "The PortletAsyncListener object onComplete(PortletAsyncEvent) method is called when asynchronous processing completes ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_ONSTARTASYNC, "The PortletAsyncListener object onStartAsync(PortletAsyncEvent) method is called when asynchronous processing is restarted ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETPORTLETASYNCCONTEXT, "The PortletAsyncEvent object getPortletAsyncContext() method returns the PortletAsyncContext object for the request");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDREQUEST1, "The PortletAsyncEvent object getSuppliedRequest() method returns null if no resource request was supplied when the PortletAsyncListener was added ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDREQUEST2, "The PortletAsyncEvent object getSuppliedRequest() method returns the supplied request if a resource request was supplied when the PortletAsyncListener was added ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDRESPONSE1, "The PortletAsyncEvent object getSuppliedResponse() method returns null if no resource response was supplied when the PortletAsyncListener was added ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETSUPPLIEDRESPONSE2, "The PortletAsyncEvent object getSuppliedResponse() method returns the supplied response if a resource response was supplied when the PortletAsyncListener was added ");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTHROWABLE1, "The PortletAsyncEvent object getThrowable() method returns null within the PortletAsyncListener object onComplete(), onTimeout(), and onStartAsync() methods");
+      tcd.put(V3RESOURCEASYNCTESTS_SPEC_21_ASYNC_GETTHROWABLE2, "The PortletAsyncEvent object getThrowable() method returns the Throwable object associated with the error within the PortletAsyncListener object onError() method");
+
+   }
+
+   /**
+    * Constructor.
+    * 
+    * Passes the static test case names - details map to the superclass
+    * 
+    * Note that the backing map is static and not threadsafe. Operations
+    * that change the map such as put, remove, etc., should not be used
+    * in portlets.
+    */
+   public ModuleTestCaseDetails() {
+     super(tcd); 
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalPages.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalPages.xml b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalPages.xml
new file mode 100644
index 0000000..883adc7
--- /dev/null
+++ b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalPages.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.     
+-->
+<pluto-portal-driver xmlns="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.xsd" xmlns:pa="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.xsd                         http://portals.apache.org/pluto/pluto-portal/1.1/pluto-portal-driver-config.xsd" version="1.1">
+<portal-name>pluto-portal-driver</portal-name>
+<portal-version>2.1.0-SNAPSHOT</portal-version>
+<container-name>Pluto Portal Driver</container-name>
+<supports>
+<portlet-mode>view</portlet-mode>
+<portlet-mode>edit</portlet-mode>
+<portlet-mode>help</portlet-mode>
+<portlet-mode>config</portlet-mode>
+<window-state>normal</window-state>
+<window-state>maximized</window-state>
+<window-state>minimized</window-state>
+</supports>
+<render-config default="About Apache Pluto">
+<page xmlns="" name="V3ResourceAsyncTests" uri="/WEB-INF/themes/pluto-default-theme.jsp">
+<portlet context="/tck-V3ResourceAsyncTests-3.0-SNAPSHOT" name="ResourceAsyncTests_SPEC_21_NoAsync"/>
+<portlet context="/tck-V3ResourceAsyncTests-3.0-SNAPSHOT" name="ResourceAsyncTests_SPEC_21_Async"/>
+</page>
+</render-config>
+</pluto-portal-driver>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalTCs.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalTCs.xml b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalTCs.xml
new file mode 100644
index 0000000..0e2504d
--- /dev/null
+++ b/portlet-tck_3.0/V3ResourceAsyncTests/src/main/resources/xml-resources/additionalTCs.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.     
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<!-- JSR 362 API ResourceAsyncTests test case names and page mappings -->
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncSupported">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_isAsyncStarted">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_startAsync2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_getDispatcherType">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_NoAsync_getPortletAsyncContext">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_isAsyncSupported">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_isAsyncStarted1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_isAsyncStarted2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_startAsync1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_startAsync2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_startAsync3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_startAsync4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getDispatcherType5">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete5">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_complete6">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_setTimeout">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getTimeout1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getTimeout2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_hasOriginalRequestAndResponse3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceRequest3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getResourceResponse3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_createPortletAsyncListener4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_addListener1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_addListener2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_addListener3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_addListener4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch5">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch6">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch7">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch8">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatch9">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_dispatchA">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_start1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_start2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_start3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_start4">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_cdi1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_cdi2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_cdi3">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_onTimeout">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_onError">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_onComplete">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_onStartAsync">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getPortletAsyncContext">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getSuppliedRequest1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getSuppliedRequest2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getSuppliedResponse1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getSuppliedResponse2">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getThrowable1">V3ResourceAsyncTests</entry>
+<entry key="V3ResourceAsyncTests_SPEC_21_Async_getThrowable2">V3ResourceAsyncTests</entry>
+</properties>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/deploy/pom.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/deploy/pom.xml b/portlet-tck_3.0/deploy/pom.xml
index 6e7dadc..bafb742 100644
--- a/portlet-tck_3.0/deploy/pom.xml
+++ b/portlet-tck_3.0/deploy/pom.xml
@@ -350,6 +350,12 @@
          <version>${project.version}</version>
          <type>war</type>
       </dependency>
+      <dependency>
+         <groupId>${project.groupId}</groupId>
+         <artifactId>tck-V3ResourceAsyncTests</artifactId>
+         <version>${project.version}</version>
+         <type>war</type>
+      </dependency>
 
       <dependency>
          <groupId>${project.groupId}</groupId>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/driver/pom.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/pom.xml b/portlet-tck_3.0/driver/pom.xml
index bc99dd6..d12008e 100644
--- a/portlet-tck_3.0/driver/pom.xml
+++ b/portlet-tck_3.0/driver/pom.xml
@@ -371,6 +371,12 @@
          <version>${project.version}</version>
          <type>war</type>
       </dependency>
+      <dependency>
+         <groupId>${project.groupId}</groupId>
+         <artifactId>tck-V3ResourceAsyncTests</artifactId>
+         <version>${project.version}</version>
+         <type>war</type>
+      </dependency>
    </dependencies>
 
    <properties>
@@ -476,6 +482,7 @@
                         ,tck-V3AnnotationPortletAppConfigOverrideTests
                         ,tck-V3AnnotationPortletConfigTests
                         ,tck-V3PortletHubTests
+                        ,tck-V3ResourceAsyncTests
                      </includeArtifactIds>
                      <includes>${test.file.dir}/*.xml</includes>
                      <outputDirectory>${project.build.directory}</outputDirectory>

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml b/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml
index 9819e8a..12c740a 100644
--- a/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml
@@ -70,4 +70,5 @@
    <fl:file>tck-V3AnnotationPortletAppConfigOverrideTests-pages.xml</fl:file>
    <fl:file>tck-V3AnnotationPortletConfigTests-pages.xml</fl:file>
    <fl:file>tck-V3PortletHubTests-pages.xml</fl:file>
+   <fl:file>tck-V3ResourceAsyncTests-pages.xml</fl:file>
 </fl:filelist>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml b/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml
index 7192e61..0ad89ea 100644
--- a/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml
@@ -70,4 +70,5 @@
    <fl:file>tck-V3AnnotationPortletAppConfigOverrideTests-tests.xml</fl:file>
    <fl:file>tck-V3AnnotationPortletConfigTests-tests.xml</fl:file>
    <fl:file>tck-V3PortletHubTests-tests.xml</fl:file>
+   <fl:file>tck-V3ResourceAsyncTests-tests.xml</fl:file>
 </fl:filelist>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/8a7f84fd/portlet-tck_3.0/pom.xml
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/pom.xml b/portlet-tck_3.0/pom.xml
index c911997..4413d4a 100644
--- a/portlet-tck_3.0/pom.xml
+++ b/portlet-tck_3.0/pom.xml
@@ -184,6 +184,7 @@
       <module>V3AnnotationPortletAppConfigOverrideTests</module>
       <module>V3AnnotationPortletConfigTests</module>
       <module>V3PortletHubTests</module>
+      <module>V3ResourceAsyncTests</module>
       <module>deploy</module>
       <module>driver</module>
    </modules>


Mime
View raw message