# -------------------------------------------------------------------
# Copyright 2001-2004 The Apache Software Foundation.
#
# Licensed 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.
# -------------------------------------------------------------------

maven.multiproject.type=jar

maven.itest.src=${basedir}/itest
maven.itest.src.excludes=test/interop/mtom/**/*.java,\
                     test/interop/whitemesa/round2/**/*.java
                     test/interop/whitemesa/round1/**/*.java,\
                     test/interop/whitemesa/round3/**/*.java,\
                     test/interop/whitemesa/round4/**/*.java
maven.itest.includes=test/interop/sun/**/*.java

#This doesn't seem to exclude the unwanted tests
#Therefore we have to add the required tests to includes one by one
#we have to fix this!!!
#maven.itest.exclude=org/apache/axis2/interop/whitemesa/round2/**/*.java

maven.junit.fork=true
maven.junit.jvmargs=-Djava.endorsed.dirs=target/test-resources/endorsed

maven.test.search.classdir=true

maven.itest.resources=itestConfig

itestConfig.dir=${basedir}/itest-resources
itestConfig.includes=**/*.xml
itestConfig.excludes=


