#
# Copyright 2005 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.
#########################################################################

# The Implementation Under Test may change properties listed in this file
# You may add items to the classpath by placing jars in iut_jars
#    or by setting properties iut.runtck.classpath and iut.enhancer.classpath
#
# ${path.separator} is the platform independent path separator character

# Identity types to be tested. Modify if only one identity type is supported.
#   If uncommented, this value overrides the value in project.properties.
#jdo.tck.identitytypes = applicationidentity datastoreidentity

##
# Properties for the execution of the TCK
#
iut.runtck.sysproperties = -Xmx512m
iut.runtck.classpath = ${jpox.jdori.jarfile}${path.separator}${jpox.jdori.jarfile}${path.separator}${log4j.jarfile}${path.separator}${bcel.jarfile}${path.separator}${jpox.dbcp.jarfile}${path.separator}${jpox.c3p0.jarfile}

##
# Properties for the execution of the IUT enhancer
#
# "${enhanced.dir}" is the output directory for the enhanced classes
#
# ${jdo.tck.jdometadata.files} contains the list of jdo metadata files
#
iut.enhancer.main = org.jpox.enhancer.JPOXEnhancer
iut.enhancer.options = -v -d "${enhanced.dir}"
iut.enhancer.args = ${jdo.tck.jdometadata.files}
iut.enhancer.sysproperties =
iut.enhancer.cp = ${jpox.enhancer.jarfile}${path.separator}${jpox.jdori.jarfile}${path.separator}${log4j.jarfile}${path.separator}${bcel.jarfile}

##
# Properties for the datastore
#
# jdo.tck.dblist may list multiple databases, separated by spaces
#   You must install the schema yourself for databases other than derby
#   If uncommented, this value overrides the value in project.properties.
#jdo.tck.dblist = 
## fix maven.xml to handle this
# Add system properties for each database in jdo.tck.dblist if needed
#   If uncommented, this value overrides the value in project.properties.
#database.runtck.sysproperties = 
