# 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.

# internal to mxunit
server.mxunit.includes=\
proxyService/httpservice/amfchannel/hs_extraparams.mxml,\
proxyService/httpservice/httpchannel/hs_extraparams.mxml,\
proxyService/webService/mxOperation/mxOperationResultFormatE4X.mxml,\
proxyService/webService/mxRequest/mxRequestFormatObject.mxml,\
messagingService/simpleJMSMessagingTest.mxml,\
messagingService/selectors/SelectorStringTestPositive.mxml,\
messagingService/jmsselectors/JMSSelectorInTestPositive.mxml,\
remotingService/dataTypes/BooleanTypesTest.mxml,\
remotingService/result/ResultBindableTest.mxml 

####################################################
# FlexUnit                                         #
####################################################

qa.src.nocompile.set=true
noclean.set=true