# 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 jdohelper 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.api.jdohelper.GetObjectId \
org.apache.jdo.tck.api.jdohelper.GetObjectIdForNull \
org.apache.jdo.tck.api.jdohelper.GetObjectIdForTransient \
org.apache.jdo.tck.api.jdohelper.GetObjectIdNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.GetObjectIds \
org.apache.jdo.tck.api.jdohelper.GetPersistenceManager \
org.apache.jdo.tck.api.jdohelper.GetPersistenceManagerForNull \
org.apache.jdo.tck.api.jdohelper.GetPersistenceManagerForTransient \
org.apache.jdo.tck.api.jdohelper.GetPersistenceManagerNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.GetTransactionalObjectId \
org.apache.jdo.tck.api.jdohelper.GetTransactionalObjectIdForNull \
org.apache.jdo.tck.api.jdohelper.GetTransactionalObjectIdForTransient \
org.apache.jdo.tck.api.jdohelper.GetTransactionalObjectIdNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.IsDeleted \
org.apache.jdo.tck.api.jdohelper.IsDeletedFalse \
org.apache.jdo.tck.api.jdohelper.IsDeletedForNull \
org.apache.jdo.tck.api.jdohelper.IsDeletedForTransient \
org.apache.jdo.tck.api.jdohelper.IsDeletedNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.IsDirty \
org.apache.jdo.tck.api.jdohelper.IsDirtyFalse \
org.apache.jdo.tck.api.jdohelper.IsDirtyForNull \
org.apache.jdo.tck.api.jdohelper.IsDirtyForTransient \
org.apache.jdo.tck.api.jdohelper.IsDirtyNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.IsNew \
org.apache.jdo.tck.api.jdohelper.IsNewFalse \
org.apache.jdo.tck.api.jdohelper.IsNewForNull \
org.apache.jdo.tck.api.jdohelper.IsNewForTransient \
org.apache.jdo.tck.api.jdohelper.IsNewNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.IsPersistent \
org.apache.jdo.tck.api.jdohelper.IsPersistentFalse \
org.apache.jdo.tck.api.jdohelper.IsPersistentForNull \
org.apache.jdo.tck.api.jdohelper.IsPersistentForTransient \
org.apache.jdo.tck.api.jdohelper.IsPersistentNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.IsTransactional \
org.apache.jdo.tck.api.jdohelper.IsTransactionalFalse \
org.apache.jdo.tck.api.jdohelper.IsTransactionalForNull \
org.apache.jdo.tck.api.jdohelper.IsTransactionalForTransient \
org.apache.jdo.tck.api.jdohelper.IsTransactionalNotPersistenceCapable \
org.apache.jdo.tck.api.jdohelper.MakeDirty \
org.apache.jdo.tck.api.jdohelper.MakeDirtyForNull \
org.apache.jdo.tck.api.jdohelper.MakeDirtyForTransient \
org.apache.jdo.tck.api.jdohelper.MakeDirtyNotPersistenceCapable
