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