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

# RFC3082 - Implementations MUST support these tests
address=org.apache.jsieve.tests.Address
allof=org.apache.jsieve.tests.AllOf
anyof=org.apache.jsieve.tests.AnyOf
exists=org.apache.jsieve.tests.Exists
false=org.apache.jsieve.tests.False
header=org.apache.jsieve.tests.Header
not=org.apache.jsieve.tests.Not
size=org.apache.jsieve.tests.Size
true=org.apache.jsieve.tests.True
# RFC3082 - Implementations SHOULD support these
envelope=org.apache.jsieve.tests.optional.Envelope
# Limited implementation
body=org.apache.jsieve.tests.optional.Body
