# 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
#
#     https://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
