# 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.

jdo.tck.description = All model tests with standard mapping, no testdata. 
jdo.tck.mapping.companyfactory =
jdo.tck.testdata = 
jdo.tck.standarddata = 
jdo.tck.mapping = 0
jdo.tck.requiredOptions =
jdo.tck.classes = \
org.apache.jdo.tck.models.embedded.SecondClassObjectsTrackTheirChanges  \
org.apache.jdo.tck.models.fieldtypes.TestArrayCollections \
org.apache.jdo.tck.models.fieldtypes.TestArrayListCollections \
org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfBigDecimal \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfBigInteger \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfBoolean \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfByte \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfCharacter \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfDate \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfDouble \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfFloat \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfInteger \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfLocale \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfLong \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfObject \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitiveboolean \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitivebyte \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitivechar \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitivedouble \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitivefloat \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitiveint \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitivelong \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfPrimitiveshort \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfShort \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfSimpleClass \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfSimpleEnum \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfSimpleInterface \
org.apache.jdo.tck.models.fieldtypes.TestFieldsOfString \
org.apache.jdo.tck.models.fieldtypes.TestHashMapStringKeyCollections \
org.apache.jdo.tck.models.fieldtypes.TestHashMapStringValueCollections \
org.apache.jdo.tck.models.fieldtypes.TestHashSetCollections \
org.apache.jdo.tck.models.fieldtypes.TestHashtableStringKeyCollections \
org.apache.jdo.tck.models.fieldtypes.TestHashtableStringValueCollections \
org.apache.jdo.tck.models.fieldtypes.TestLinkedListCollections \
org.apache.jdo.tck.models.fieldtypes.TestListCollections \
org.apache.jdo.tck.models.fieldtypes.TestMapStringKeyCollections \
org.apache.jdo.tck.models.fieldtypes.TestMapStringValueCollections \
org.apache.jdo.tck.models.fieldtypes.TestSetCollections \
org.apache.jdo.tck.models.fieldtypes.TestTreeMapStringKeyCollections \
org.apache.jdo.tck.models.fieldtypes.TestTreeMapStringValueCollections \
org.apache.jdo.tck.models.fieldtypes.TestTreeSetCollections \
org.apache.jdo.tck.models.fieldtypes.TestVectorCollections \
org.apache.jdo.tck.models.inheritance.FieldWithSameNameInSuperclass \
org.apache.jdo.tck.models.inheritance.NonPersistentFieldsAreNonPersistentInSubclasses \
org.apache.jdo.tck.models.inheritance.NonpersistentSuperClass \
org.apache.jdo.tck.models.inheritance.PersistenceCapableFlexibilityInInheritanceHierarchy \
org.apache.jdo.tck.models.inheritance.PersistentFieldsArePersistentInSubClasses \
org.apache.jdo.tck.models.inheritance.TransactionalFieldsAreTransactionalInSubclasses
