<!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" >

    <listeners>
        <!-- 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 -->
        <!-- this is slow, activate locally if needed
        <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.testng.reporters.TestHTMLReporter"/>
        -->
    </listeners>

    <test name="JSR-346 TCK">
        <groups>
            <run>
                <exclude name="integration" />
                <exclude name="javaee-full" />
            </run>
        </groups>


        <packages>
            <package name="org.jboss.cdi.tck.tests.*">
                <!-- CHALLENGED TCK TESTS: clarifying this in the EG -->
                <exclude name="org.jboss.cdi.tck.tests.inheritance.specialization.simple"/>

                <!-- CDITCK-432 -->
                <exclude name="org.jboss.cdi.tck.tests.decorators.builtin.event.complex"/>

            </package>

            <package name="org.jboss.cdi.tck.interceptors.tests.*"/>

        </packages>


        <classes>
            <!-- Issues in the spec -->
            <!-- CDI-437 -->
            <class name="org.jboss.cdi.tck.tests.lookup.byname.ambiguous.broken.AmbiguousELNamesTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- Issues in the TCK -->
            <!-- CDITCK-444 -->
            <class name="org.jboss.cdi.tck.tests.extensions.lifecycle.processBeanAttributes.broken.invalid.InvalidStereotypeTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- CDITCK-418 -->
            <class name="org.jboss.cdi.tck.interceptors.tests.contract.interceptorLifeCycle.environment.jndi.ejb.InterceptorEnvironmentJNDISessionBeanTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- CDITCK-417 -->
            <class name="org.jboss.cdi.tck.tests.extensions.registration.BeanRegistrationByExtensionInEarLibraryTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- CDITCK-421 -->
            <class name="org.jboss.cdi.tck.interceptors.tests.contract.aroundInvoke.AroundInvokeAccessInterceptorTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>
            
            <!-- CDITCK-427 -->
            <class name="org.jboss.cdi.tck.tests.lookup.circular.CircularDependencyTest">
                <methods>
                    <exclude name="testDependentProducerMethodDeclaredOnNormalBeanWhichInjectsProducedBean"/>
                </methods>
            </class>

            <!-- CDITCK-428 -->
            <class name="org.jboss.cdi.tck.interceptors.tests.contract.interceptorLifeCycle.InterceptorLifeCycleTest">
                <methods>
                    <exclude name="testInterceptorInstanceCreatedWhenTargetInstanceCreated"/>
                </methods>
            </class>

            <class name="org.jboss.cdi.tck.interceptors.tests.contract.aroundTimeout.AroundTimeoutInterceptorTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- CDITCK-423 -->
            <class name="org.jboss.cdi.tck.tests.implementation.enterprise.definition.remote.RemoteInterfaceNotInAPITypesTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>
            
            <!-- CDITCK-437 -->
            <class name="org.jboss.cdi.tck.tests.decorators.interceptor.DecoratorAndInterceptorTest">
                <methods>
                    <exclude name="testLifecycleCallbacks"/>
                </methods>
            </class>

            <!-- CDITCK-449 -->
            <class name="org.jboss.cdi.tck.tests.extensions.beanManager.beanAttributes.CreateBeanAttributesTest">
                <methods>
                    <exclude name="testBeanAttributesForManagedBeanWithModifiedAnnotatedType"/>
                </methods>
            </class>

            <!-- CDITCK-466 -->
            <class name="org.jboss.cdi.tck.tests.extensions.lifecycle.bbd.broken.passivatingScope.AddingPassivatingScopeTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>

            <!-- CDI-514 (issue got moved from original CDITC -->
            <class name="org.jboss.cdi.tck.tests.event.fires.FireEventTest">
                <methods>
                    <exclude name="testDuplicateBindingsToFireEventFails"/>
                </methods>
            </class>
            <class name="org.jboss.cdi.tck.tests.event.select.SelectEventTest">
                <methods>
                    <exclude name=".*DuplicateBindingType"/>
                </methods>
            </class>
            <class name="org.jboss.cdi.tck.tests.event.resolve.binding.DuplicateBindingTypesWhenResolvingTest">
                <methods>
                    <exclude name=".*"/>
                </methods>
            </class>
            <class name="org.jboss.cdi.tck.tests.lookup.dynamic.DynamicLookupTest">
                <methods>
                    <exclude name="testDuplicateBindingsThrowsException"/>
                </methods>
            </class>
            <class name="org.jboss.cdi.tck.tests.extensions.bean.bytype.BeanByTypeTest">
                <methods>
                    <exclude name="testSameBindingTwice"/>
                </methods>
            </class>
            <class name="org.jboss.cdi.tck.tests.interceptors.definition.InterceptorDefinitionTest">
                <methods>
                    <exclude name="testSameBindingTypesToResolveInterceptorsFails"/>
                </methods>
            </class>


            <!-- CDI-517 -->
            <class name="org.jboss.cdi.tck.tests.lookup.typesafe.resolution.parameterized.raw.RawBeanTypeParameterizedRequiredTypeTest">
                <methods>
                    <exclude name="testNotAssignableTypeParams"/>
                </methods>
            </class>
        </classes>


    </test>

</suite>
