<?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 suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue" >
  <listeners>
    <!-- debug -->
    <!--listener class-name="org.apache.openejb.tck.cdi.embedded.GCListener"/-->
    <!-- Required - avoid randomly mixed test method execution -->
    <listener class-name="org.jboss.cdi.tck.impl.testng.SingleTestClassMethodInterceptor"/>
    <!-- Optional - intended for debug purpose only -->
    <listener class-name="org.jboss.cdi.tck.impl.testng.ConfigurationLoggingListener"/>
    <listener class-name="org.jboss.cdi.tck.impl.testng.ProgressLoggingTestListener"/>
    <!-- Optional - it's recommended to disable the default JUnit XML reporter -->
    <!-- too slow to be there by default
    <listener class-name="org.testng.reporters.SuiteHTMLReporter"/>
    <listener class-name="org.testng.reporters.FailedReporter"/>
    <listener class-name="org.testng.reporters.XMLReporter"/>
    <listener class-name="org.testng.reporters.EmailableReporter"/>
    <listener class-name="org.apache.openejb.tck.testng.HTMLReporter"/>
    -->
  </listeners>

  <test name="JSR-365 TCK">
<!--
    <packages>
      <package name="org.jboss.cdi.tck.tests.*">
        &lt;!&ndash; CHALLENGED TCK TESTS: clarifying this in the EG &ndash;&gt;
        <exclude name="org.jboss.cdi.tck.tests.inheritance.specialization.simple"/>
        &lt;!&ndash; CDITCK-432 &ndash;&gt;
        <exclude name="org.jboss.cdi.tck.tests.decorators.builtin.event.complex"/>
      </package>
      <package name="org.jboss.cdi.tck.interceptors.tests.*"/>
    </packages>
-->

    <classes>
      <!-- fails due to integration issue within openejb-http, but passes on cdi-tomee -->
      <class name="org.jboss.cdi.tck.tests.implementation.builtin.metadata.session.BuiltinMetadataSessionBeanTest">
        <methods><include name="testInterceptorMetadata"/></methods>
      </class>

    </classes>
  </test>
</suite>

