# 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 transaction 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.transactions.AfterCompletionMethodCalledWhenCommitted \
org.apache.jdo.tck.transactions.AfterCompletionMethodCalledWhenRolledback \
org.apache.jdo.tck.transactions.AfterSetRollbackOnlyCommitFails \
org.apache.jdo.tck.transactions.BeforeCompletionMethodCalled \
org.apache.jdo.tck.transactions.BeforeCompletionMethodNotCalledBeforeRollback \
org.apache.jdo.tck.transactions.Commit \
org.apache.jdo.tck.transactions.GetPersistenceManager \
org.apache.jdo.tck.transactions.GetRetainValues \
org.apache.jdo.tck.transactions.GetRollbackOnlyReturnsFalseUntilSet \
org.apache.jdo.tck.transactions.GetSynchronization \
org.apache.jdo.tck.transactions.IsActive \
org.apache.jdo.tck.transactions.IsActiveUntilAfterCompletionMethodCalled \
org.apache.jdo.tck.transactions.Rollback \
org.apache.jdo.tck.transactions.SetIsolationLevel \
org.apache.jdo.tck.transactions.SetNontransactionalRead \
org.apache.jdo.tck.transactions.WhenNontransactionalReadIsFalse \
org.apache.jdo.tck.transactions.SetNontransactionalReadCalledDuringTxCompletion \
org.apache.jdo.tck.transactions.SetNontransactionalWriteCalledDuringTxCompletion \
org.apache.jdo.tck.transactions.SetNontransactionalReadTrueWhenNotSupported \
org.apache.jdo.tck.transactions.SetOptimistic \
org.apache.jdo.tck.transactions.SetOptimisticCalledDuringTxCompletion \
org.apache.jdo.tck.transactions.SetOptimisticDuringTransaction \
org.apache.jdo.tck.transactions.SetOptimisticTrueWhenNotSupported \
org.apache.jdo.tck.transactions.SetRetainValues \
org.apache.jdo.tck.transactions.SetRetainValuesCalledDuringTxCompletion \
org.apache.jdo.tck.transactions.SetRetainValuesTrueWhenNotSupported \
org.apache.jdo.tck.transactions.SetSynchronization \
org.apache.jdo.tck.transactions.SetSynchronizationToNull
