<!--

    Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="QuickLookTests" verbose="2" >
  <parameter name="admin.url" value="http://localhost:4848/__asadmin"/>
  <parameter name="admin.user" value="admin"/>
  <parameter name="admin.password" value=""/>
  <parameter name="admin.console.url" value="http://localhost:4848/"/>
  <parameter name="resources.xml.relative.path" value="admin/resources/resources.xml"/>

<!-- AMX -->
  <parameter name="amx.debug" value="true"/>
<!-- AMX: port of the JMX RMI -->
  <parameter name="amx.rmiport" value="8686"/>

<!-- AMX -->
  <test name="amx_tests">
    <classes>
      <class name="amxtest.AMXCoreTests"/>
      <class name="amxtest.AMXProxyTests"/>
      <class name="amxtest.AMXConfigProxyTests"/>
      <class name="amxtest.AMXOtherTests"/>
      </classes>
  </test>

  <test name="adminconsole_tests">
    <classes>
        <class name="test.admin.AdminConsoleTests"/>
    </classes>
  </test>

  <test name="classloader_jsf">
        <classes>
                <class name="test.classloader.hellojsf.helloJSFTestNG"/>
        </classes>
  </test>
  <test name="web_jspservlet_war">
    <classes>
       <class name="test.web.jsp.hello.HelloJSPTestNG" />
    </classes>
  </test>
  <test name="jsf_hello_world">
    <classes>
       <class name="test.jsf.astrologer.JSFWebTestNG" />
    </classes>
  </test>
  <test name="jsf_injection">
    <classes>
       <class name="test.web.jsfinjection.JSFInjectionTestNG" />
    </classes>
  </test>
  <test name="jdbc_user_tx">
    <classes>
       <class name="test.jdbc.jdbcusertx.JdbcUserTxTestNG" />
    </classes>
  </test>
  <test name="jpa_inject_emf">
    <classes>
       <class name="test.jpa.jpainjectemf.JpaInjectEMFTestNG" />
    </classes>
  </test>
  <test name="jpa_validation">
    <classes>
       <class name="test.jpa.jpavalidation.JpaValidationTestNG" />
    </classes>
  </test>
  <test name="security_hello_jsp">
    <classes>
       <class name="test.security.hellojsp.HelloSecurityTestNG" />
    </classes>
  </test>
  <test name="security_hello_basicauth">
    <classes>
       <class name="test.security.basicauth.BasicAuthTestNG" />
    </classes>
  </test>
   <!--<test name="ejb30_session_hello">
    <classes>
       <class name="ejb30.session.hello.test.TestClient" />
    </classes>
  </test>-->
  <test name="asadmin_tests">
    <classes>
      <class name="test.admin.JvmOptionTests"/>
      <class name="test.admin.JdbcConnectionPoolTests"/>
      <class name="test.admin.WebtierTests"/>
    </classes>
  </test>

</suite>

