<?xml version="1.0" encoding="UTF-8"?>
<!--
  Copyright 2004 The Apache Software Foundation

  Licensed 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.
-->
<testportlet-config>
  
  <testsuite-config>
    <name>Render Parameter Test</name>
    <class>org.apache.pluto.testsuite.test.RenderParameterTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
    <action-param>
      <name>org.apache.pluto.testsuite.PARAM_ACTION_KEY</name>
      <value>org.apache.pluto.testsuite.ACTION_VALUE</value>
    </action-param>
  </testsuite-config>

  <testsuite-config>
    <name>Action Parameter Test</name>
    <class>org.apache.pluto.testsuite.test.ActionParameterTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
    <action-param>
      <name>org.apache.pluto.testsuite.PARAM_ACTION_KEY</name>
      <value>org.apache.pluto.testsuite.ACTION_VALUE</value>
    </action-param>
  </testsuite-config>

  <testsuite-config>
    <name>Dispatcher Render Parameter Test</name>
    <class>org.apache.pluto.testsuite.test.DispatcherRenderParameterTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Dispatcher Request Test</name>
    <class>org.apache.pluto.testsuite.test.DispatcherRequestTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Simple Attribute Test</name>
    <class>org.apache.pluto.testsuite.test.SimpleAttributeTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>
    
  <testsuite-config>
    <name>Application Scoped Session Attribute Test</name>
    <class>org.apache.pluto.testsuite.test.AppScopedSessionAttributeTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>
    
  <testsuite-config>
    <name>External Application Scoped Attribute Test</name>
    <class>org.apache.pluto.testsuite.test.ExternalAppScopedAttributeTest</class>
    <display-uri>/jsp/ExternalAppScopedAttributeTest.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Context Init Parameter Test</name>
    <class>org.apache.pluto.testsuite.test.ContextInitParameterTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Preference In Action Test</name>
    <class>org.apache.pluto.testsuite.test.PreferenceInActionTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Preference In Render Test</name>
    <class>org.apache.pluto.testsuite.test.PreferenceInRenderTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Session Timeout Test</name>
    <class>org.apache.pluto.testsuite.test.SessionTimeoutTest</class>
    <display-uri>/jsp/SessionTimeoutTest.jsp</display-uri>
  </testsuite-config>
  
  <!--testsuite-config>
    <name>Render Response No Content Type Test</name>
    <class>org.apache.pluto.testsuite.test.RenderResponseNoContentTypeTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config-->
  
  <testsuite-config>
    <name>Portlet Mode Test</name>
    <display-uri>/jsp/portlet_mode_test.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Window State Test</name>
    <display-uri>/jsp/window_state_test.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Misc Test</name>
    <class>org.apache.pluto.testsuite.test.MiscTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Security Mapping Test</name>
    <class>org.apache.pluto.testsuite.test.SecurityMappingTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
  </testsuite-config>

  <testsuite-config>
    <name>Resource Bundle Test</name>
    <class>org.apache.pluto.testsuite.test.ResourceBundleTest</class>
    <display-uri>/jsp/test_results.jsp</display-uri>
    <init-param>
        <name>resource-bundle</name>
        <value>false</value>
    </init-param>
    <init-param>
      <name>title</name>
      <value>Test Portlet #1</value>
    </init-param>
    <init-param>
      <name>short-title</name>
      <value>Test #1</value>
    </init-param>
    <init-param>
      <name>keywords</name>
      <value>Test,Testing</value>
    </init-param>
  </testsuite-config>

</testportlet-config>
