# 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 query 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.query.api.AutoCloseable \
org.apache.jdo.tck.query.api.ChangeQuery \
org.apache.jdo.tck.query.api.Close \
org.apache.jdo.tck.query.api.CloseAll \
org.apache.jdo.tck.query.api.CompileQuery \
org.apache.jdo.tck.query.api.DeclareImports \
org.apache.jdo.tck.query.api.DeclareParameters \
org.apache.jdo.tck.query.api.DeclareVariables \
org.apache.jdo.tck.query.api.ExecuteQuery \
org.apache.jdo.tck.query.api.ExecuteQueryWithArray \
org.apache.jdo.tck.query.api.ExecuteQueryWithMap \
org.apache.jdo.tck.query.api.GetFetchPlan \
org.apache.jdo.tck.query.api.GetIgnoreCache \
org.apache.jdo.tck.query.api.GetPersistenceManager \
org.apache.jdo.tck.query.api.GetPersistenceManagerFromRestoredSerializedQuery \
org.apache.jdo.tck.query.api.InvalidNamedQuery \
org.apache.jdo.tck.query.api.MetadataSearchOrder \
org.apache.jdo.tck.query.api.NamedQueryNotFound \
org.apache.jdo.tck.query.api.NamedQueryRepeatableAnnotations \
org.apache.jdo.tck.query.api.NewNamedQuery \
org.apache.jdo.tck.query.api.NewQueryFromExistingQueryBoundToPMFromSameVendor \
org.apache.jdo.tck.query.api.NewQueryFromRestoredSerializedQuery \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClass \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndCollection \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndExtent \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassAndFilter \
org.apache.jdo.tck.query.api.NewQueryWithCandidateClassCollectionFilter \
org.apache.jdo.tck.query.api.NewQueryWithExtent \
org.apache.jdo.tck.query.api.NewQueryWithExtentAndFilter \
org.apache.jdo.tck.query.api.NewQueryWithSpecifiedLanguageAndQuery \
org.apache.jdo.tck.query.api.NewQuerySingleString \
org.apache.jdo.tck.query.api.QueryExtentions \
org.apache.jdo.tck.query.api.SampleQueries \
org.apache.jdo.tck.query.api.SaveAsNamedQuery \
org.apache.jdo.tck.query.api.SetCandidateCollection \
org.apache.jdo.tck.query.api.SetCandidateExtent \
org.apache.jdo.tck.query.api.SetFilter \
org.apache.jdo.tck.query.api.SetGrouping \
org.apache.jdo.tck.query.api.SetIgnoreCache \
org.apache.jdo.tck.query.api.SetOrdering \
org.apache.jdo.tck.query.api.SetRange \
org.apache.jdo.tck.query.api.SetResult \
org.apache.jdo.tck.query.api.SetResultClass \
org.apache.jdo.tck.query.api.SetUnique \
org.apache.jdo.tck.query.api.SetterReplacePreviousValues \
org.apache.jdo.tck.query.api.SingleStringQuery \
org.apache.jdo.tck.query.api.UnmodifiableQuery \
org.apache.jdo.tck.query.delete.DeleteCallback \
org.apache.jdo.tck.query.delete.DeletePersistentAll \
org.apache.jdo.tck.query.delete.DeleteQueryElements \
org.apache.jdo.tck.query.result.AggregateResult \
org.apache.jdo.tck.query.result.DefaultResult \
org.apache.jdo.tck.query.result.DefaultUnique \
org.apache.jdo.tck.query.result.DistinctCandidateInstances \
org.apache.jdo.tck.query.result.DistinctQuery \
org.apache.jdo.tck.query.result.Grouping \
org.apache.jdo.tck.query.result.IfElseResult \
org.apache.jdo.tck.query.result.ImmutableQueryResult \
org.apache.jdo.tck.query.result.MethodsInResult \
org.apache.jdo.tck.query.result.NPEInResultExpr \
org.apache.jdo.tck.query.result.NullResults \
org.apache.jdo.tck.query.result.ProjectedSCODoesNotTrackChanges \
org.apache.jdo.tck.query.result.ResultClassRequirements \
org.apache.jdo.tck.query.result.ResultExpressions \
org.apache.jdo.tck.query.result.ShapeOfResult \
org.apache.jdo.tck.query.result.Unique \
org.apache.jdo.tck.query.result.VariableInResult \
org.apache.jdo.tck.query.result.VariableInResultNavigation \
org.apache.jdo.tck.query.result.VariableInResultMultipleNavigation \
org.apache.jdo.tck.query.sql.ShapeOfResult \
org.apache.jdo.tck.query.sql.NoCandidateClass \
org.apache.jdo.tck.query.sql.AllowedAPIMethods \
org.apache.jdo.tck.query.sql.NewQuery \
org.apache.jdo.tck.query.sql.ExecuteWithMap
