<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!--
    
    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.
-->
<suite name="JSR-346-TCK" verbose="2" configfailurepolicy="continue">
  <test name="JSR-346 TCK">
    <classes>
          <class name="org.jboss.cdi.tck.tests.alternative.selection.stereotype.SelectedBeanWithUnselectedStereotypeTest" />
      <!--

      <class name="org.jboss.cdi.tck.tests.event.parameterized.ParameterizedEventTest" />
      <class name="org.jboss.cdi.tck.tests.event.fires.FireEventTest" />
      -->
    </classes>
    <groups>
      <run>
        <exclude name="integration"/>
        <exclude name="javaee-full"/>
      </run>
    </groups>
  </test>
  <listeners>
    <listener class-name="org.jboss.cdi.tck.impl.testng.SingleTestClassMethodInterceptor"/>
    <listener class-name="org.jboss.cdi.tck.impl.testng.ProgressLoggingTestListener"/>
  </listeners>
</suite>
