# 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.

############################################################
# flexunit
############################################################
flexunit.server.all.excludes=**/*Credentials*.as,**/HeadersTest.as

#flexunit excludes due to bugs
flexunit.bugs.excludes=

#appserver specific excludes for flexunit
flexunit.websphere.excludes=
flexunit.websphere7.excludes=
flexunit.weblogic.excludes=
flexunit.jboss.excludes=
flexunit.jboss5.excludes=
flexunit.tomcat.excludes=


############################################################
# mxunit
############################################################
mxunit.server.all.excludes=proxyService/webService/mxWebService/mxWebServiceUseProxyFalse.mxml,proxyService/webService/bugs/jira/sdk-11294/sdk11294.mxml,proxyService/184631/*,proxyServiceOnly/webService/bugs/184631/WSTest.mxml,proxyServiceOnly/webService/bugs/184631/bug184631useProxyTrue.mxml,proxyService/webService/bugs/jira/sdk-11333/main.mxml,proxyService/webService/bugs/jira/sdk-11887/sdk11887.mxml,proxyService/webService/bugs/jira/sdk-11259/WSTest.mxml,proxyService/webService/mxWebService/mxWebServiceServiceOnlyTwoPorts.mxml,proxyService/webService/noproxy/testnullable/EchoDateNilTest00.mxml,proxyService/webService/noproxy/testnullable/EchoDateNilRpcEncTest.mxml,proxyService/webService/noproxy/testnullable/EchoDateNilTest.mxml,proxyService/webService/noproxy/testnullable/EchoStructNilTest.mxml,proxyService/webService/bugs/201811/00/bug201811_02.mxml,MBean/runtime/AdminConsoleDisplayRegistrar.mxml,remotingService/dataTypes/ReadOnlyTest.mxml

#mxunit excludes due to bugs
##Exclude JMS ChannelSet authentication tests due to bug BLZ-355
#exclude blz-408 remotingService/dataTypes/MethodOverLoadingTests.mxml
#exclude BLZ-642 proxyService/202863/**/* and proxyServiceOnly/202863/**/*

mxunit.bugs.excludes=messagingService/security/ChannelSetAuthenticationJMSMessagingTest.mxml,remotingService/dataTypes/MethodOverLoadingTests.mxmlproxyServiceOnly/202863/**/*,proxyService/202863/**/*,


#appserver specific excludes for mxunit
mxunit.websphere.excludes=MBean/messagingservice/*.mxml,messagingService/simpleJMSMessagingConnectionCredentialsTest.mxml,messagingService/simpleJMSMessagingDurableTest.mxml,messagingService/simpleJMSMessagingPreserveHeadersTest.mxml,messagingService/simpleJMSMessagingAsyncTest.mxml
mxunit.websphere7.excludes=MBean/messagingservice/*.mxml,messagingService/simpleJMSMessagingConnectionCredentialsTest.mxml,messagingService/simpleJMSMessagingDurableTest.mxml,messagingService/simpleJMSMessagingPreserveHeadersTest.mxml,messagingService/simpleJMSMessagingAsyncTest.mxml
mxunit.weblogic.excludes=
mxunit.jboss.excludes=messagingService/simpleJMSMessagingConnectionCredentialsTest.mxml,messagingService/simpleJMSMessagingDurableTest.mxml,messagingService/simpleJMSMessagingPreserveHeadersTest.mxml
mxunit.jboss5.excludes=messagingService/simpleJMSMessagingConnectionCredentialsTest.mxml,messagingService/simpleJMSMessagingDurableTest.mxml,messagingService/simpleJMSMessagingPreserveHeadersTest.mxml
mxunit.tomcat.excludes=
