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/07/27 09:05:38 UTC
[02/24] Added the JSR 362 TCK to the Pluto project.
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestCaseDetails.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestCaseDetails.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestCaseDetails.java
new file mode 100644
index 0000000..16c1a00
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestCaseDetails.java
@@ -0,0 +1,127 @@
+/* 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.beans;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * Contains all test case names and detail strings used by a
+ * portlet. Provides helper methods for dealing with test
+ * case results.
+ *
+ * The goal is to allow additional test cases to be added by adding
+ * new test modules without having all test cases defined in a
+ * central location, otherwise we could just define all test case
+ * names / details here.
+ *
+ * @author nick
+ */
+public class TestCaseDetails implements Map<String, String> {
+
+ private final Map<String, String> detailsMap = new HashMap<String, String>();
+
+ @Override
+ public void clear() {
+ detailsMap.clear();
+ }
+
+ @Override
+ public boolean containsKey(Object key) {
+ return detailsMap.containsKey(key);
+ }
+
+ @Override
+ public boolean containsValue(Object value) {
+ return detailsMap.containsValue(value);
+ }
+
+ @Override
+ public Set<java.util.Map.Entry<String, String>> entrySet() {
+ return detailsMap.entrySet();
+ }
+
+ @Override
+ public String get(Object key) {
+ return detailsMap.get(key);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return detailsMap.isEmpty();
+ }
+
+ @Override
+ public Set<String> keySet() {
+ return detailsMap.keySet();
+ }
+
+ @Override
+ public String put(String key, String value) {
+ return detailsMap.put(key, value);
+ }
+
+ @Override
+ public void putAll(Map<? extends String, ? extends String> map) {
+ detailsMap.putAll(map);
+ }
+
+ @Override
+ public String remove(Object key) {
+ return detailsMap.remove(key);
+ }
+
+ @Override
+ public int size() {
+ return detailsMap.size();
+ }
+
+ @Override
+ public Collection<String> values() {
+ return detailsMap.values();
+ }
+
+ /**
+ * Gets a test result initialied with the test case name, the
+ * test case detail string, and the results set to
+ * <code>false</code> (test failed).
+ *
+ * @param tcName test case name
+ * @return
+ */
+ public TestResult getTestResultFailed(String tcName) {
+ return new TestResult(tcName, false, detailsMap.get(tcName));
+ }
+
+ /**
+ * Gets a test result initialied with the test case name, the
+ * test case detail string, and the results set to
+ * <code>true</code> (test succeeded).
+ *
+ * @param tcName test case name
+ * @return
+ */
+ public TestResult getTestResultSucceeded(String tcName) {
+ return new TestResult(tcName, true, detailsMap.get(tcName));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestLink.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestLink.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestLink.java
new file mode 100644
index 0000000..15248ae
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestLink.java
@@ -0,0 +1,114 @@
+/* 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.
+ */
+
+/**
+ * This bean encapsulates a single test result. When converted to a string or
+ * written to a writer, it generates HTML markup containing elements and IDs
+ * that can be read by the TCK test driver.
+ *
+ * The TCK test driver works by accessing the page containing the test portlet,
+ * clicking a link for the test if one is present, and reading the test output.
+ *
+ * The test case is identified by a unique name string that contains no blanks.
+ * The test case name is used to generate ID's for the HTML result elements.
+ * The following IDs are generated by this bean:
+ *
+ * (TestCaseName)-success - indicates general test case success or failure
+ * (TestCaseName)-detail - a detailed message about the test
+ *
+ */
+package javax.portlet.tck.beans;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.portlet.PortletURL;
+import javax.portlet.tck.constants.Constants;
+
+/**
+ * Formats a link for a test case.
+ *
+ * @author nick
+ */
+public class TestLink {
+
+ private String tcName;
+ private PortletURL purl;
+
+ /**
+ * Creates an empty test result.
+ */
+ public TestLink() {
+ tcName = "";
+ purl = null;
+ }
+
+ /**
+ * Creates a test link initialized according to the parameters.
+ *
+ * @param tcName test case name
+ * @param url url for the test case
+ */
+ public TestLink(String tcName, PortletURL purl) {
+ this.tcName = tcName;
+ this.purl = purl;
+ }
+
+ /**
+ * Generates HTML markup representing the test link.
+ *
+ * Note that the div element containing the item that is to be acted upon
+ * by the client must have an id equal to the test case name.
+ *
+ * @return HTML markup representing the test link
+ */
+ @Override
+ public String toString() {
+ final String actId = tcName + Constants.CLICK_ID;
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<div class='portletTCKTestcase' id='");
+ sb.append(tcName);
+ sb.append("'>");
+ sb.append("<h4>");
+ sb.append(tcName);
+ sb.append(" link:");
+ sb.append("</h4>");
+ sb.append("<a class='portletTCKLink' id='");
+ sb.append(actId);
+ sb.append("' href='");
+ sb.append(purl.toString());
+ sb.append("'>");
+ sb.append(tcName);
+ sb.append("</a>");
+ sb.append("</div>");
+
+ return sb.toString();
+ }
+
+ /**
+ * Generates HTML markup representing the test link and
+ * writes them to the writer provided.
+ *
+ * @param writer Writer to which the string is written
+ */
+ public void writeTo(Writer writer)throws IOException {
+ writer.write(this.toString());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestMessage.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestMessage.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestMessage.java
new file mode 100644
index 0000000..98e6833
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestMessage.java
@@ -0,0 +1,101 @@
+/* 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.
+ */
+
+/**
+ * This bean encapsulates a single test result. When converted to a string or
+ * written to a writer, it generates HTML markup containing elements and IDs
+ * that can be read by the TCK test driver.
+ *
+ * The TCK test driver works by accessing the page containing the test portlet,
+ * clicking a link for the test if one is present, and reading the test output.
+ *
+ * The test case is identified by a unique name string that contains no blanks.
+ * The test case name is used to generate ID's for the HTML result elements.
+ * The following IDs are generated by this bean:
+ *
+ * (TestCaseName)-success - indicates general test case success or failure
+ * (TestCaseName)-detail - a detailed message about the test
+ *
+ */
+package javax.portlet.tck.beans;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Displays a message for a test case, for example when waiting for results.
+ *
+ * @author nick
+ */
+public class TestMessage {
+
+ private String tcName;
+ private String msg;
+
+ /**
+ * Creates an empty test result.
+ */
+ public TestMessage() {
+ tcName = "";
+ msg = "";
+ }
+
+ /**
+ * Creates a test message initialized according to the parameters.
+ *
+ * @param tcName test case name
+ * @param msg message to be displayed
+ */
+ public TestMessage(String tcName, String msg) {
+ this.tcName = tcName;
+ this.msg = msg;
+ }
+
+ /**
+ * Generates HTML markup representing the test message.
+ *
+ * @return HTML markup representing the test message
+ */
+ @Override
+ public String toString() {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<div class='portletTCKTestcase'>");
+ sb.append("<h4>");
+ sb.append(tcName);
+ sb.append(" message:");
+ sb.append("</h4>");
+ sb.append("<p>");
+ sb.append(msg);
+ sb.append("</p>");
+ sb.append("</div>");
+
+ return sb.toString();
+ }
+
+ /**
+ * Generates HTML markup representing the test link and
+ * writes them to the writer provided.
+ *
+ * @param writer Writer to which the string is written
+ */
+ public void writeTo(Writer writer)throws IOException {
+ writer.write(this.toString());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestResult.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestResult.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestResult.java
new file mode 100644
index 0000000..606a20f
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/beans/TestResult.java
@@ -0,0 +1,157 @@
+/* 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.
+ */
+
+/**
+ * This bean encapsulates a single test result. When converted to a string or
+ * written to a writer, it generates HTML markup containing elements and IDs
+ * that can be read by the TCK test driver.
+ *
+ * The TCK test driver works by accessing the page containing the test portlet,
+ * clicking a link for the test if one is present, and reading the test output.
+ *
+ * The test case is identified by a unique name string that contains no blanks.
+ * The test case name is used to generate ID's for the HTML result elements.
+ * The following IDs are generated by this bean:
+ *
+ * (TestCaseName)-success - indicates general test case success or failure
+ * (TestCaseName)-detail - a detailed message about the test
+ *
+ */
+package javax.portlet.tck.beans;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.portlet.tck.constants.Constants;
+
+/**
+ * Encapsulates test results containint the test case name, the test case
+ * detail description, and the test case result (<code>true</code> = success,
+ * <code>false</code> = failure).
+ * @author nick
+ */
+public class TestResult {
+
+ private String tcName;
+ private String tcDetail;
+ private boolean tcSuccess;
+
+ /**
+ * Creates an empty test result.
+ */
+ public TestResult() {
+ this.tcName = "";
+ this.tcDetail = "";
+ this.tcSuccess = false;
+ }
+
+ /**
+ * Creates a test result initialized according to the parameters.
+ *
+ * @param tcName test case name
+ * @param tcSuccess test case result
+ * @param tcDetail test case detail description
+ */
+ public TestResult(String tcName, boolean tcSuccess, String tcDetail) {
+ this.tcName = tcName;
+ this.tcDetail = tcDetail;
+ this.tcSuccess = tcSuccess;
+ }
+
+ public String getTcName() {
+ return tcName;
+ }
+
+ public void setTcName(String tcName) {
+ this.tcName = tcName;
+ }
+
+ public String getTcDetail() {
+ return tcDetail;
+ }
+
+ public void setTcDetail(String tcDetail) {
+ this.tcDetail = tcDetail;
+ }
+
+ public boolean isTcSuccess() {
+ return tcSuccess;
+ }
+
+ public void setTcSuccess(boolean tcSuccess) {
+ this.tcSuccess = tcSuccess;
+ }
+
+ /**
+ * Appends error message to the test case deail string to indicate
+ * what went wrong when a test fails.
+ *
+ * @param tcDetail String containing detailed error message
+ */
+ public void appendTcDetail(String tcDetail) {
+ this.tcDetail += " " + tcDetail;
+ }
+
+ /**
+ * Generates HTML markup representing the test result.
+ *
+ * Note that the div element containing the item that is to be acted upon
+ * by the client must have an id equal to the test case name.
+ *
+ * @return HTML markup representing the test result
+ */
+ @Override
+ public String toString() {
+ final String resId = tcName + Constants.RESULT_ID;
+ final String detId = tcName + Constants.DETAIL_ID;
+ final String resStr = tcSuccess?Constants.SUCCESS:Constants.FAILURE;
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<div class='portletTCKTestcase' id='");
+ sb.append(tcName);
+ sb.append("'>");
+ sb.append("<h4>");
+ sb.append(tcName);
+ sb.append(" results:");
+ sb.append("</h4>");
+ sb.append("<p class='portletTCKResult' id='");
+ sb.append(resId);
+ sb.append("'>Test ");
+ sb.append(resStr);
+ sb.append("</p>");
+ sb.append("<p class='portletTCKDetail' id='");
+ sb.append(detId);
+ sb.append("'>Details: ");
+ sb.append(tcDetail);
+ sb.append("</p>");
+ sb.append("</div>");
+
+ return sb.toString();
+ }
+
+ /**
+ * Generates HTML markup representing the test results and
+ * writes them to the writer provided.
+ *
+ * @param writer Writer to which the string is written
+ */
+ public void writeTo(Writer writer)throws IOException {
+ writer.write(this.toString());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/constants/Constants.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/constants/Constants.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/constants/Constants.java
new file mode 100644
index 0000000..2cfa8ad
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/constants/Constants.java
@@ -0,0 +1,32 @@
+/* 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.
+ */
+
+/**
+ * Defines constants used by portlets, test beans, and the test driver.
+ */
+package javax.portlet.tck.constants;
+
+public class Constants {
+ public static final String BR = "<br/>";
+ public static final String HR = "<hr/>";
+ public static final String RESULT_ID = "-result";
+ public static final String DETAIL_ID = "-detail";
+ public static final String CLICK_ID = "-clickme";
+ public static final String SUCCESS = "Succeeded";
+ public static final String FAILURE = "Failed";
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/portlets/TestPortlet.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/portlets/TestPortlet.java b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/portlets/TestPortlet.java
new file mode 100644
index 0000000..d66aaeb
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/java/javax/portlet/tck/portlets/TestPortlet.java
@@ -0,0 +1,86 @@
+/* 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.logging.Level;
+import java.util.logging.Logger;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.Portlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+/**
+ * Simplest possible portlet for testing the portlet container implementation
+ */
+public class TestPortlet implements Portlet {
+ private static final String LOG_CLASS = TestPortlet.class.getName();
+ private final Logger LOGGER = Logger.getLogger(LOG_CLASS);
+
+ public TestPortlet() {
+ }
+
+ @Override
+ public void init(PortletConfig config) throws PortletException {
+ if (LOGGER.isLoggable(Level.FINE)) {
+ LOGGER.logp(Level.FINE, LOG_CLASS, "init", "Entry");
+ }
+
+ }
+
+ @Override
+ public void processAction(ActionRequest request, ActionResponse response)
+ throws PortletException, IOException {
+
+ if (LOGGER.isLoggable(Level.FINE)) {
+ LOGGER.logp(Level.FINE, LOG_CLASS, "processAction", "Entry");
+ }
+
+
+ }
+
+ @Override
+ public void render(RenderRequest request, RenderResponse response)
+ throws PortletException, IOException {
+
+ if (LOGGER.isLoggable(Level.FINE)) {
+ LOGGER.logp(Level.FINE, LOG_CLASS, "render", "Entry");
+ }
+
+ PrintWriter writer = response.getWriter();
+ writer.write("I am here!");
+
+ }
+
+ @Override
+ public void destroy() {
+
+ if (LOGGER.isLoggable(Level.FINE)) {
+ LOGGER.logp(Level.FINE, LOG_CLASS, "destroy", "Entry");
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoMultiPortletPage.xsl
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoMultiPortletPage.xsl b/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoMultiPortletPage.xsl
new file mode 100644
index 0000000..9364e2e
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoMultiPortletPage.xsl
@@ -0,0 +1,85 @@
+<!--
+ 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.
+-->
+
+<!--
+ This stylesheet generates a valid page configuration file for pluto by
+ transforming the portlet.xml file. The servlet context is provided through
+ a parameter. The page name is set to the portlet name, which is also a
+ test case name.
+
+ It places all portlets from the portlet application on the same page.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pa="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
+ <xsl:strip-space elements="pa:portlet-app"/>
+ <xsl:output method="xml" indent="yes"/>
+ <xsl:param name="portlet-app-context"/>
+ <xsl:variable name="pageName" select="pa:portlet-app/@id"/>
+ <xsl:template match="/">
+ <pluto-portal-driver
+ xmlns="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.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>
+ <xsl:element name="render-config">
+ <xsl:attribute name="default">About Apache Pluto</xsl:attribute>
+ <page name="About Apache Pluto" uri="/WEB-INF/themes/pluto-default-theme.jsp">
+ <portlet context="/pluto" name="AboutPortlet"/>
+ </page>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </pluto-portal-driver>
+ </xsl:template>
+
+ <xsl:template match="pa:portlet-app">
+ <xsl:element name="page">
+ <xsl:attribute name="name"><xsl:value-of select="$pageName"/></xsl:attribute>
+ <xsl:attribute name="uri">/WEB-INF/themes/pluto-default-theme.jsp</xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="pa:portlet">
+ <xsl:element name="portlet">
+ <xsl:attribute name="context">/<xsl:value-of select='$portlet-app-context'/></xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="pa:portlet-name"/></xsl:attribute>
+ </xsl:element>
+ </xsl:template>
+
+ <!-- ignore all other children of pa:portlet-app -->
+ <xsl:template match="pa:portlet-app/*[not(pa:portlet-name)]"/>
+
+</xsl:stylesheet>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoSinglePortletPage.xsl
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoSinglePortletPage.xsl b/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoSinglePortletPage.xsl
new file mode 100644
index 0000000..6e5610f
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/resources/xml-resources/plutoSinglePortletPage.xsl
@@ -0,0 +1,80 @@
+<!--
+ 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.
+-->
+
+<!--
+ This stylesheet generates a valid page configuration file for pluto by
+ transforming the portlet.xml file. The servlet context is provided through
+ a parameter. The page name is set to the portlet name, which is also a
+ test case name.
+
+ It places each portlet from the portlet application on a separate page.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pa="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
+ <xsl:strip-space elements="pa:portlet-app"/>
+ <xsl:output method="xml" indent="yes"/>
+ <xsl:param name="portlet-app-context"/>
+ <xsl:template match="/">
+ <pluto-portal-driver
+ xmlns="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.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>
+ <xsl:element name="render-config">
+ <xsl:attribute name="default">About Apache Pluto</xsl:attribute>
+ <page name="About Apache Pluto" uri="/WEB-INF/themes/pluto-default-theme.jsp">
+ <portlet context="/pluto" name="AboutPortlet"/>
+ </page>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </pluto-portal-driver>
+ </xsl:template>
+
+ <xsl:template match="pa:portlet-app/pa:portlet">
+ <xsl:element name="page">
+ <xsl:attribute name="name"><xsl:value-of select="pa:portlet-name"/></xsl:attribute>
+ <xsl:attribute name="uri">/WEB-INF/themes/pluto-default-theme.jsp</xsl:attribute>
+ <xsl:element name="portlet">
+ <xsl:attribute name="context">/<xsl:value-of select='$portlet-app-context'/></xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="pa:portlet-name"/></xsl:attribute>
+ </xsl:element>
+ </xsl:element>
+ </xsl:template>
+
+ <!-- ignore all other children of pa:portlet-app -->
+ <xsl:template match="pa:portlet-app/*[not(pa:portlet-name)]"/>
+
+</xsl:stylesheet>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/common/src/main/resources/xml-resources/test.xsl
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/common/src/main/resources/xml-resources/test.xsl b/portlet-tck_3.0/common/src/main/resources/xml-resources/test.xsl
new file mode 100644
index 0000000..63d45d3
--- /dev/null
+++ b/portlet-tck_3.0/common/src/main/resources/xml-resources/test.xsl
@@ -0,0 +1,78 @@
+<!--
+ 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.
+-->
+
+<!--
+ This stylesheet creates a list of test cases from the portlet.xml file.
+
+ A naming convention is used in order to be able to automatically create a
+ properties file containing test case names mapping to the page to be accessed
+ to execute the test. The test case name is used as the portlet name and as
+ the page name for the test.
+
+ Note that the test case name must be unique within the TCK.
+
+ In addition, an additional file containing test case name - page name mappings
+ can be provided. This allows a page and portlet to contain multiple test cases
+ that the test driver will execute sequentially. The parameter "additionalTCs"
+ must be set in the project pom with an absolute URI to the file. If the
+ parameter is not set, no additional test cases will be added.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pa="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
+ <xsl:output method="xml" indent="yes" doctype-system="http://java.sun.com/dtd/properties.dtd"/>
+ <xsl:strip-space elements="pa:portlet-app"/>
+ <xsl:param name="additionalTCs"/>
+ <xsl:param name="copyOnly"/>
+ <xsl:template match="/">
+ <xsl:element name="properties">
+ <xsl:if test="$copyOnly!='true'">
+ <xsl:apply-templates/>
+ </xsl:if>
+ <xsl:if test="$additionalTCs!='false'">
+ <xsl:variable name="addi" select="document($additionalTCs)"/>
+ <xsl:for-each select="$addi//entry">
+ <xsl:element name="entry">
+ <xsl:attribute name="key"><xsl:value-of select="@key"/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:element>
+ </xsl:template>
+
+ <!-- Create entry element for every portlet. For each entry:
+ key attribute = test case name
+ value = page to be addressed to execute the TC
+
+ The test driver will use the name / value pairs along with the context
+ base to construct URLs of the following form for test case execution:
+
+ http://<test.server.host>:<test.server.port>/<test.context.base><value>
+ -->
+ <xsl:template match="pa:portlet-app/pa:portlet">
+ <xsl:element name="entry">
+ <xsl:attribute name="key"><xsl:value-of select="pa:portlet-name"/></xsl:attribute>
+ <xsl:value-of select="pa:portlet-name"/>
+ </xsl:element>
+ </xsl:template>
+
+ <!-- ignore all other children of pa:portlet-app -->
+ <xsl:template match="pa:portlet-app/*[not(pa:portlet-name)]"/>
+
+</xsl:stylesheet>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/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
new file mode 100644
index 0000000..24b738b
--- /dev/null
+++ b/portlet-tck_3.0/deploy/pom.xml
@@ -0,0 +1,177 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>javax.portlet</groupId>
+ <artifactId>tck</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>tck-deploy</artifactId>
+ <packaging>jar</packaging>
+
+ <description>
+ Each test module produces a war file containing test portlets. This project
+ aggregates all test portlet war files into a single directory under
+ target/deploy-files.
+ </description>
+
+
+ <dependencies>
+
+ <!-- List the modules containing test cases in order to aggregate the output -->
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule1</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule2</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule3-Portlet1</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule3-Portlet2</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2AnnotationTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2EnvironmentTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2ExceptionTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2FilterTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2PortletTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2RequestTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2ResponseTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2URLTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2WrapperTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-driver</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${project.artifactId}</finalName>
+
+ <resources>
+ <resource>
+ <directory>${project.build.directory}/generated-resources/xml/final</directory>
+ <targetPath>${project.build.directory}/deploy-files</targetPath>
+ <includes>
+ <include>*.xml</include>
+ </includes>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-wars</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <excludeArtifactIds>tck-driver</excludeArtifactIds>
+ <outputDirectory>${project.build.directory}/deploy-files</outputDirectory>
+ <excludeTransitive>true</excludeTransitive>
+ </configuration>
+ </execution>
+
+ <!-- For extracting the page file from the driver -->
+ <execution>
+ <id>extract-xml-resource</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeArtifactIds>tck-driver</includeArtifactIds>
+ <includes>generated-resources/xml/final/${page.file.final.name}</includes>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/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
new file mode 100644
index 0000000..d952dee
--- /dev/null
+++ b/portlet-tck_3.0/driver/pom.xml
@@ -0,0 +1,339 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>javax.portlet</groupId>
+ <artifactId>tck</artifactId>
+ <version>3.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>tck-driver</artifactId>
+ <packaging>jar</packaging>
+
+ <description>
+ This project builds the Junit / Selenium driver for the portlet API tck.
+ </description>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium</groupId>
+ <artifactId>selenium-java</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- Dependency on common module for element ID suffixes -->
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>tck-common</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+
+ <!-- List the modules containing test cases in order to aggregate the output -->
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule1</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule2</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-TestModule3</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2AnnotationTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2EnvironmentTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2ExceptionTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2FilterTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2PortletTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2RequestTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2ResponseTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2URLTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tck-V2WrapperTests</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${project.artifactId}</finalName>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources/xml-resources</directory>
+ <targetPath>${project.build.directory}/${test.file.dir}</targetPath>
+ <includes>
+ <include>*</include>
+ </includes>
+ </resource>
+ </resources>
+
+ <plugins>
+
+ <!-- For extracting the XML transformation stylesheets from common module -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>xml-resource-dependencies</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeArtifactIds>
+ tck-TestModule1,
+ tck-TestModule2,
+ tck-TestModule3,
+ tck-V2AnnotationTests,
+ tck-V2EnvironmentTests,
+ tck-V2ExceptionTests,
+ tck-V2FilterTests,
+ tck-V2PortletTests,
+ tck-V2RequestTests,
+ tck-V2ResponseTests,
+ tck-V2URLTests,
+ tck-V2WrapperTests
+ </includeArtifactIds>
+ <includes>${test.file.dir}/*.xml</includes>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <!-- For Performing xml translations to create test.xml files -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>xml-maven-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>transform</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <transformationSets>
+
+ <!-- Combine several test list files into a single module -->
+ <transformationSet>
+ <dir>${project.build.directory}/${test.file.dir}</dir>
+ <includes>
+ <include>testFiles.xml</include>
+ </includes>
+ <outputDir>${project.build.directory}/classes/${test.list.dir}</outputDir>
+ <fileMappers>
+ <fileMapper
+ implementation="org.codehaus.plexus.components.io.filemappers.MergeFileMapper">
+ <targetName>${test.list.name}</targetName>
+ </fileMapper>
+ </fileMappers>
+ <stylesheet>${project.build.directory}/${test.file.dir}/${test.list.xsl}</stylesheet>
+ </transformationSet>
+
+ <!-- Combine several page files into a single page file containing
+ all test portal pages -->
+ <transformationSet>
+ <dir>${project.build.directory}/${test.file.dir}</dir>
+ <includes>
+ <include>pageFiles.xml</include>
+ </includes>
+ <outputDir>${project.build.directory}/classes/${test.list.dir}</outputDir>
+ <fileMappers>
+ <fileMapper
+ implementation="org.codehaus.plexus.components.io.filemappers.MergeFileMapper">
+ <targetName>${page.file.final.name}</targetName>
+ </fileMapper>
+ </fileMappers>
+ <stylesheet>${project.build.directory}/${test.file.dir}/${page.file.final.xsl}</stylesheet>
+ </transformationSet>
+
+ </transformationSets>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>example.Selenium2Example</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+
+ <!-- To build the tests, use "mvn clean install" from the parent directory. -->
+ <!-- To run all of the tests, use "mvn test -Prun-tck" from the driver directory. -->
+
+ <!-- To a subset of the tests, use "mvn test -Prun-tck -Dtest.module=<match string>" from the driver directory. -->
+ <!-- the driver will then execute all tests whose test case name contains the specified string. -->
+ <!-- Example: "mvn test -Prun-tck -Dtest.module=PortletRequest" will execute all PortletRequest TCs. -->
+
+ <profiles>
+ <profile>
+ <id>run-tck</id>
+ <build>
+ <plugins>
+
+ <!-- For running the test driver -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.17</version>
+ <configuration>
+ <testClassesDirectory>${project.build.directory}/classes</testClassesDirectory>
+ <includes>
+ <include>**/javax/**</include>
+ </includes>
+ <useFile>false</useFile>
+ <systemProperties>
+ <property>
+ <name>test.server.login.url</name>
+ <value>${test.server.login.url}</value>
+ </property>
+ <property>
+ <name>test.context.base</name>
+ <value>${test.context.base}</value>
+ </property>
+ <property>
+ <name>test.url.strategy</name>
+ <value>${test.url.strategy}</value>
+ </property>
+ <property>
+ <name>test.server.host</name>
+ <value>${test.server.host}</value>
+ </property>
+ <property>
+ <name>test.server.port</name>
+ <value>${test.server.port}</value>
+ </property>
+ <property>
+ <name>test.server.username.id</name>
+ <value>${test.server.username.id}</value>
+ </property>
+ <property>
+ <name>test.server.username</name>
+ <value>${test.server.username}</value>
+ </property>
+ <property>
+ <name>test.server.password.id</name>
+ <value>${test.server.password.id}</value>
+ </property>
+ <property>
+ <name>test.server.password</name>
+ <value>${test.server.password}</value>
+ </property>
+ <property>
+ <name>test.list.file</name>
+ <value>${project.build.directory}/classes/${test.list.dir}/${test.list.name}</value>
+ </property>
+ <property>
+ <name>test.browser</name>
+ <value>${test.browser}</value>
+ </property>
+ <property>
+ <name>test.browser.webDriver</name>
+ <value>${test.browser.webDriver}</value>
+ </property>
+ <property>
+ <name>test.module</name>
+ <value>${test.module}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+
+</project>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/driver/src/main/java/javax/portlet/tck/driver/TCKSimpleTestDriver.java
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/src/main/java/javax/portlet/tck/driver/TCKSimpleTestDriver.java b/portlet-tck_3.0/driver/src/main/java/javax/portlet/tck/driver/TCKSimpleTestDriver.java
new file mode 100644
index 0000000..68f5c0d
--- /dev/null
+++ b/portlet-tck_3.0/driver/src/main/java/javax/portlet/tck/driver/TCKSimpleTestDriver.java
@@ -0,0 +1,345 @@
+/* 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.driver;
+
+import static org.junit.Assert.*;
+
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.htmlunit.HtmlUnitDriver;
+import org.openqa.selenium.ie.InternetExplorerDriver;
+import org.openqa.selenium.safari.SafariDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import javax.portlet.tck.constants.Constants;
+
+
+/**
+ * @author nick
+ *
+ */
+@RunWith(value = Parameterized.class)
+public class TCKSimpleTestDriver {
+
+ private static String loginUrl, host, port, testFile, browser,
+ username, usernameId, password, passwordId, testContextBase, module;
+
+ // used to optimize access for tests on the same page
+ private static String lastPage = "";
+
+ private static boolean useGeneratedUrl = true;
+
+ private static WebDriver driver;
+ private String page, tcName, testUrl;
+
+ /**
+ * Reads the consolidated list of test cases and provides the list to Junit
+ * for parameterized testing.
+ * @return a Collection of test cases to run
+ */
+ @Parameters
+ public static Collection getTestList () {
+ System.out.println("getTestList");
+ testFile = System.getProperty("test.list.file");
+ System.out.println(" TestFile=" + testFile);
+ module = System.getProperty("test.module");
+ System.out.println(" Module =" + module);
+
+ Properties tprops = new Properties();
+ try {
+ FileInputStream fis = new FileInputStream(testFile);
+ tprops.loadFromXML(fis);
+ } catch (Exception e) {
+ System.out.println("Could not read test cases file. Attempted to read file " + testFile);
+ e.printStackTrace();
+ return null;
+ }
+
+ // See if performance can be improved by sorting the test cases by
+ // the page to be accessed. The map uses the page as key and has a
+ // set of test cases for that page as value.
+
+ TreeMap<String, Set<String>> pages = new TreeMap<String, Set<String>>();
+ Set<Object> tcs = tprops.keySet();
+ for (Object o : tcs) {
+ String tcase = (String) o ;
+ if (module == null || module.length() <= 0 || tcase.contains(module)) {
+ String tpage = tprops.getProperty(tcase);
+ if (!pages.containsKey(tpage)) {
+ pages.put(tpage, new TreeSet<String>());
+ }
+ pages.get(tpage).add(tcase);
+ }
+ }
+
+ // now pass TCs, sorted by page, to the driver
+
+ List<String[]> tests = new ArrayList<String[]>();
+ for (String tpage : pages.keySet()) {
+ for (String tcase: pages.get(tpage)) {
+ String[] parms = {tpage, tcase};
+ tests.add(parms);
+ }
+ }
+
+ int numP = pages.size();
+ int numTC = tests.size();
+ System.out.println("Executing " + numTC + " tests on " + numP + "pages.");
+
+ return tests;
+ }
+
+ public TCKSimpleTestDriver(String p, String t) {
+ page = p;
+ tcName = t;
+ StringBuilder sb = new StringBuilder();
+ sb.append("http://");
+ sb.append(host);
+ if (port != null && !port.isEmpty()) {
+ sb.append(":");
+ sb.append(port);
+ }
+ sb.append("/");
+ sb.append(testContextBase);
+ sb.append(page);
+ testUrl = sb.toString();
+ System.out.println("Constructor - Navigating to page: " + testUrl + ", test: " + tcName);
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+
+ loginUrl = System.getProperty("test.server.login.url");
+ host = System.getProperty("test.server.host");
+ port = System.getProperty("test.server.port");
+ username = System.getProperty("test.server.username");
+ usernameId = System.getProperty("test.server.username.id");
+ password = System.getProperty("test.server.password");
+ passwordId = System.getProperty("test.server.password.id");
+ browser = System.getProperty("test.browser");
+ testContextBase = System.getProperty("test.context.base");
+ String str = System.getProperty("test.url.strategy");
+ useGeneratedUrl = str.equalsIgnoreCase("generateURLs");
+ String wd = System.getProperty("test.browser.webDriver");
+
+ System.out.println("before class.");
+ System.out.println(" Login URL =" + loginUrl);
+ System.out.println(" Host =" + host);
+ System.out.println(" Port =" + port);
+ System.out.println(" Context =" + testContextBase);
+ System.out.println(" Generate URL =" + useGeneratedUrl);
+ System.out.println(" Username =" + username);
+ System.out.println(" UsernameId =" + usernameId);
+ System.out.println(" Password =" + password);
+ System.out.println(" PasswordId =" + passwordId);
+ System.out.println(" Browser =" + browser);
+ System.out.println(" Driver =" + wd);
+
+ if (browser.equalsIgnoreCase("firefox")) {
+ driver = new FirefoxDriver();
+ } else if (browser.equalsIgnoreCase("internetExplorer")) {
+ System.setProperty("webdriver.ie.driver", wd);
+ driver = new InternetExplorerDriver();
+ } else if (browser.equalsIgnoreCase("chrome")) {
+ System.setProperty("webdriver.chrome.driver", wd);
+ driver = new ChromeDriver();
+ } else if (browser.equalsIgnoreCase("htmlUnit")) {
+ driver = new HtmlUnitDriver();
+ } else if (browser.equalsIgnoreCase("safari")) {
+ driver = new SafariDriver();
+ } else {
+ throw new Exception("Unsupported browser: " + browser);
+ }
+
+ lastPage = "";
+ login();
+
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ if (driver != null) {
+ driver.quit();
+ }
+ System.out.println("after class.");
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ System.out.println("before test.");
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ System.out.println("after test.");
+ }
+
+ @Test
+ public void test() {
+ System.out.println("execute test.");
+
+ if (!lastPage.equals(page)) {
+ lastPage = page;
+
+ // depending on configuration, either follow links on the portal page
+ // or access the test page using the generated URL
+ if (useGeneratedUrl) {
+ driver.get(testUrl);
+ } else {
+ try {
+ WebElement wel = driver.findElement(By.ByLinkText.linkText(page));
+ System.out.println("Found link: " + wel.getText());
+ wel.click();
+ WebDriverWait wdw = new WebDriverWait(driver, 3);
+ wdw.until(ExpectedConditions.visibilityOfElementLocated(By.ById.id(tcName)));
+ } catch (Exception e) {
+ assertTrue("Test case " + tcName + " failed. Page " + page
+ + " could not be accessed.", false);
+ }
+ }
+
+ }
+
+ processClickable();
+ checkResults();
+ }
+
+ /**
+ * Called to login to the portal if necessary.
+ */
+ private static void login() {
+
+ driver.get(loginUrl);
+
+ // If there is no login or password fields, don't need to login.
+ // find element will throw an exception if element can't be found.
+ try {
+
+ WebElement userEl = driver.findElement(By.ById.id(usernameId));
+ WebElement pwEl = driver.findElement(By.ById.id(passwordId));
+
+ // perform login
+ userEl.sendKeys(username);
+ pwEl.sendKeys(password);
+ pwEl.submit();
+
+ } catch(Exception e) {
+ }
+ }
+
+ /**
+ * Analyzes the page based on the test case name and records success or failure.
+ */
+ private void checkResults() {
+ String resultId = tcName + Constants.RESULT_ID;
+ String detailId = tcName + Constants.DETAIL_ID;
+
+ try {
+
+ System.out.println("resultId=" + resultId);
+ System.out.println("detailId=" + detailId);
+
+ WebElement resEl = driver.findElement(By.ById.id(resultId));
+ WebElement detEl = driver.findElement(By.ById.id(detailId));
+
+ String res = resEl.getText();
+ String det = "Test case " + tcName + " failed. " + detEl.getText();
+
+ boolean ok = res.contains(Constants.SUCCESS);
+ assertTrue(det, ok);
+
+ } catch(Exception e) {
+ assertTrue("Test case " + tcName + " failed. Results could not be found.", false);
+ }
+
+ }
+
+ /**
+ * Looks for a link or button that can be clicked for the TC and clicks it if found.
+ */
+ @SuppressWarnings("unused")
+ private void processClickable() {
+ String actionId = tcName + Constants.CLICK_ID;
+ String resultId = tcName + Constants.RESULT_ID;
+ String detailId = tcName + Constants.DETAIL_ID;
+
+ // after test case click, need to access page again
+ lastPage = "";
+
+ try {
+
+
+ // find element throws if ID not found.
+ WebElement actEl = driver.findElement(By.ById.id(actionId));
+ System.out.println("Clicking link. Id=" + actionId);
+ actEl.click();
+
+ try {
+
+ // click() doesn't necessarily block until page loads
+ WebDriverWait wdw = new WebDriverWait(driver, 3);
+ wdw.until(
+ ExpectedConditions.visibilityOfElementLocated(By.id(resultId)));
+
+ } catch(Exception e) {
+ System.out.println("Exception getting result.");
+ System.out.println(e.getMessage());
+ }
+
+ } catch(Exception e) {
+ System.out.println("no clickable element.");
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/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
new file mode 100644
index 0000000..64abcbb
--- /dev/null
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/pageFiles.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+<!--
+ Lists the page files from the individual modules that will be combined
+ together to form the final page file with all pages for the TCK.
+ -->
+<fl:filelist xmlns:fl="http://www.apache.org/2014/javax/portlet/tck/filelist">
+ <fl:file>tck-TestModule1-pages.xml</fl:file>
+ <fl:file>tck-TestModule2-pages.xml</fl:file>
+ <fl:file>tck-TestModule3-pages.xml</fl:file>
+ <fl:file>tck-V2AnnotationTests-pages.xml</fl:file>
+ <fl:file>tck-V2EnvironmentTests-pages.xml</fl:file>
+ <fl:file>tck-V2ExceptionTests-pages.xml</fl:file>
+ <fl:file>tck-V2FilterTests-pages.xml</fl:file>
+ <fl:file>tck-V2PortletTests-pages.xml</fl:file>
+ <fl:file>tck-V2RequestTests-pages.xml</fl:file>
+ <fl:file>tck-V2ResponseTests-pages.xml</fl:file>
+ <fl:file>tck-V2URLTests-pages.xml</fl:file>
+ <fl:file>tck-V2WrapperTests-pages.xml</fl:file>
+</fl:filelist>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/driver/src/main/resources/xml-resources/plutoPageCombiner.xsl
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/src/main/resources/xml-resources/plutoPageCombiner.xsl b/portlet-tck_3.0/driver/src/main/resources/xml-resources/plutoPageCombiner.xsl
new file mode 100644
index 0000000..1b2cf7d
--- /dev/null
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/plutoPageCombiner.xsl
@@ -0,0 +1,66 @@
+<!-- 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. -->
+
+<!--
+ Each test case module produces as output an xml file containing a list of portal pages
+ to be accessed for the test cases defined in that module. This stylesheet combines the
+ page files listed in the input file into a single output page file.
+
+ When a new test case module is added, the filelist XML file must be updated in order
+ to add the new pages to the complete list of portal pages.
+
+ This stylesheet produces a pluto-portal-driver-config.xml file containing all of the
+ test pages.
+-->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fl="http://www.apache.org/2014/javax/portlet/tck/filelist">
+ <xsl:output method="xml" indent="yes" />
+ <xsl:strip-space elements="*" />
+
+ <xsl:template match="/">
+ <pluto-portal-driver
+ xmlns="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.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>
+ <xsl:element name="render-config">
+ <xsl:attribute name="default">About Apache Pluto</xsl:attribute>
+ <page name="About Apache Pluto" uri="/WEB-INF/themes/pluto-default-theme.jsp">
+ <portlet context="/pluto" name="AboutPortlet"/>
+ </page>
+ <xsl:apply-templates/>
+ </xsl:element>
+ </pluto-portal-driver>
+ </xsl:template>
+
+ <xsl:template match="fl:filelist/fl:file">
+ <xsl:copy-of select="document(.)//page"/>
+ </xsl:template>
+
+</xsl:stylesheet>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/portlet-tck_3.0/driver/src/main/resources/xml-resources/testCombiner.xsl
----------------------------------------------------------------------
diff --git a/portlet-tck_3.0/driver/src/main/resources/xml-resources/testCombiner.xsl b/portlet-tck_3.0/driver/src/main/resources/xml-resources/testCombiner.xsl
new file mode 100644
index 0000000..4d4cddb
--- /dev/null
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/testCombiner.xsl
@@ -0,0 +1,36 @@
+<!-- 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. -->
+
+<!--
+ Each test case module produces as output an xml file containing a list of test cases
+ defined in that module. This stylesheet combines the test case files listed in the input
+ file into a single output test list.
+
+ When a new test case module is added, the filelist XML file must be updated in order
+ to add the new test cases to the complete list of test cases.
+-->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fl="http://www.apache.org/2014/javax/portlet/tck/filelist">
+ <xsl:output method="xml" indent="yes" doctype-system="http://java.sun.com/dtd/properties.dtd" />
+ <xsl:strip-space elements="*" />
+
+ <xsl:template match="/">
+ <xsl:element name="properties">
+ <xsl:apply-templates />
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="fl:filelist/fl:file">
+ <xsl:copy-of select="document(.)/properties/entry"/>
+ </xsl:template>
+
+</xsl:stylesheet>
http://git-wip-us.apache.org/repos/asf/portals-pluto/blob/bd830576/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
new file mode 100644
index 0000000..a524494
--- /dev/null
+++ b/portlet-tck_3.0/driver/src/main/resources/xml-resources/testFiles.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+<!--
+ Lists the test files from the individual modules that will be combined
+ together to form the final list file containing all test cases for the TCK.
+ -->
+<fl:filelist xmlns:fl="http://www.apache.org/2014/javax/portlet/tck/filelist">
+ <fl:file>tck-TestModule1-tests.xml</fl:file>
+ <fl:file>tck-TestModule2-tests.xml</fl:file>
+ <fl:file>tck-TestModule3-tests.xml</fl:file>
+ <fl:file>tck-V2AnnotationTests-tests.xml</fl:file>
+ <fl:file>tck-V2EnvironmentTests-tests.xml</fl:file>
+ <fl:file>tck-V2ExceptionTests-tests.xml</fl:file>
+ <fl:file>tck-V2FilterTests-tests.xml</fl:file>
+ <fl:file>tck-V2PortletTests-tests.xml</fl:file>
+ <fl:file>tck-V2RequestTests-tests.xml</fl:file>
+ <fl:file>tck-V2ResponseTests-tests.xml</fl:file>
+ <fl:file>tck-V2URLTests-tests.xml</fl:file>
+ <fl:file>tck-V2WrapperTests-tests.xml</fl:file>
+</fl:filelist>