#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.
#---------------------------------------------------------------
# The TCK configuration for OpenWebBeans
#
#---------------------------------------------------------------


################################################################################################
###################################### TCK CONFIGURATION SECTION ###############################
################################################################################################

# this is the tck configuration, thus it has a very high ordinal of 150
configuration.ordinal=150

org.apache.webbeans.application.supportsProducerInterception = false

# enable verification of programmatic qualifiers
org.apache.webbeans.strictDynamicValidation = true

org.apache.webbeans.spi.ConversationService = org.apache.openwebbeans.tck.conversation.TckConversationService
org.apache.webbeans.application.supportsConversation=true


# we have to switch back to the un-cached version of the normal scoping handler
org.apache.webbeans.proxy.mapping.javax.enterprise.context.ApplicationScoped=org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler


org.apache.webbeans.container.InjectionResolver.fastMatching = false

# only org.jboss.cdi.tck.tests.extensions.beanManager.beanAttributes.CreateBeanAttributesTest currently
# we can write an arquillian extension to avoid to set it globally
org.apache.webbeans.application.supportsImplicitQualifierInjection=false
