# Copyright (c) 2009-2021, Google LLC
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#     * Neither the name of Google LLC nor the
#       names of its contributors may be used to endorse or promote products
#       derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

py_test(
    name = "descriptor_database_test",
    main = "descriptor_database_test_wrapper.py",
    srcs = ["descriptor_database_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "descriptor_pool_test",
    main = "descriptor_pool_test_wrapper.py",
    srcs = ["descriptor_pool_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "descriptor_test",
    main = "descriptor_test_wrapper.py",
    srcs = ["descriptor_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "generator_test",
    main = "generator_test_wrapper.py",
    srcs = ["generator_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "json_format_test",
    main = "json_format_test_wrapper.py",
    srcs = ["json_format_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "keywords_test",
    main = "keywords_test_wrapper.py",
    srcs = ["keywords_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "message_factory_test",
    main = "message_factory_test_wrapper.py",
    srcs = ["message_factory_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "message_test",
    main = "message_test_wrapper.py",
    srcs = ["message_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "proto_builder_test",
    main = "proto_builder_test_wrapper.py",
    srcs = ["proto_builder_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "reflection_test",
    main = "reflection_test_wrapper.py",
    srcs = ["reflection_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "service_reflection_test",
    main = "service_reflection_test_wrapper.py",
    srcs = ["service_reflection_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "symbol_database_test",
    main = "symbol_database_test_wrapper.py",
    srcs = ["symbol_database_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "text_encoding_test",
    main = "text_encoding_test_wrapper.py",
    srcs = ["text_encoding_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "text_format_test",
    main = "text_format_test_wrapper.py",
    srcs = ["text_format_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "unknown_fields_test",
    main = "unknown_fields_test_wrapper.py",
    srcs = ["unknown_fields_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "well_known_types_test",
    main = "well_known_types_test_wrapper.py",
    srcs = ["well_known_types_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)

py_test(
    name = "wire_format_test",
    main = "wire_format_test_wrapper.py",
    srcs = ["wire_format_test_wrapper.py"],
    deps = [
        "//python:message_ext",
        "@com_google_protobuf//:python_srcs",
        "@com_google_protobuf//:python_common_test_protos",
        "@com_google_protobuf//:python_specific_test_protos",
    ],
    legacy_create_init = False,
)
