mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
621 lines
18 KiB
Text
621 lines
18 KiB
Text
# Copyright (c) 2024, Google LLC
|
|
# All rights reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style
|
|
# license that can be found in the LICENSE file or at
|
|
# https://developers.google.com/open-source/licenses/bsd
|
|
|
|
# Protobuf conformance tests.
|
|
|
|
load("@rules_cc//cc:cc_test.bzl", "cc_test")
|
|
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "objc_library")
|
|
load("@rules_java//java:defs.bzl", "java_binary")
|
|
load("@rules_python//python:py_binary.bzl", "py_binary")
|
|
load(
|
|
"//:protobuf.bzl",
|
|
"internal_csharp_proto_library",
|
|
"internal_objc_proto_library",
|
|
"internal_php_proto_library",
|
|
"internal_py_proto_library",
|
|
)
|
|
load("//bazel:cc_proto_library.bzl", "cc_proto_library")
|
|
load("//bazel:java_lite_proto_library.bzl", "java_lite_proto_library")
|
|
load("//bazel:java_proto_library.bzl", "java_proto_library")
|
|
load("//bazel:proto_library.bzl", "proto_library")
|
|
load("//build_defs:internal_shell.bzl", "inline_sh_binary")
|
|
|
|
exports_files([
|
|
"bazel_conformance_test_runner.sh",
|
|
"conformance.proto",
|
|
"failure_list_cpp.txt",
|
|
"failure_list_csharp.txt",
|
|
"failure_list_java.txt",
|
|
"failure_list_java_lite.txt",
|
|
"failure_list_objc.txt",
|
|
"failure_list_php.txt",
|
|
"failure_list_php_c.txt",
|
|
"failure_list_python.txt",
|
|
"failure_list_python_cpp.txt",
|
|
"failure_list_python_upb.txt",
|
|
"failure_list_ruby.txt",
|
|
"failure_list_jruby.txt",
|
|
"failure_list_jruby_ffi.txt",
|
|
"text_format_failure_list_cpp.txt",
|
|
"text_format_failure_list_java.txt",
|
|
"text_format_failure_list_java_lite.txt",
|
|
"text_format_failure_list_php.txt",
|
|
"text_format_failure_list_php_c.txt",
|
|
"text_format_failure_list_python.txt",
|
|
])
|
|
|
|
cc_library(
|
|
name = "conformance_test_lib",
|
|
testonly = 1,
|
|
srcs = [
|
|
"conformance_test.cc",
|
|
"conformance_test_runner.cc",
|
|
],
|
|
hdrs = [
|
|
"conformance_test.h",
|
|
],
|
|
deps = [
|
|
":conformance_cc_proto",
|
|
":failure_list_trie_node",
|
|
":fork_pipe_runner",
|
|
":test_runner",
|
|
"//src/google/protobuf",
|
|
"//src/google/protobuf:descriptor_legacy",
|
|
"//src/google/protobuf:endian",
|
|
"//src/google/protobuf/util:differencer",
|
|
"@abseil-cpp//absl/container:btree",
|
|
"@abseil-cpp//absl/container:flat_hash_set",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:str_format",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "conformance_test_main",
|
|
testonly = 1,
|
|
srcs = ["conformance_test_main.cc"],
|
|
deps = [
|
|
":binary_json_conformance_suite",
|
|
":conformance_test_lib",
|
|
":text_format_conformance_suite",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "failure_list_trie_node",
|
|
srcs = ["failure_list_trie_node.cc"],
|
|
hdrs = ["failure_list_trie_node.h"],
|
|
deps = [
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:str_format",
|
|
"@abseil-cpp//absl/types:optional",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "failure_list_trie_node_test",
|
|
srcs = ["failure_list_trie_node_test.cc"],
|
|
deps = [
|
|
":failure_list_trie_node",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/status:statusor",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/types:optional",
|
|
"@googletest//:gtest",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
# Add more meta-testing here. This is not to be confused with a conformance test itself.
|
|
test_suite(
|
|
name = "conformance_framework_tests",
|
|
tests = [
|
|
"binary_wireformat_test",
|
|
"failure_list_trie_node_test",
|
|
"naming_test",
|
|
"test_manager_test",
|
|
"testee_test",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "binary_json_conformance_suite",
|
|
testonly = 1,
|
|
srcs = ["binary_json_conformance_suite.cc"],
|
|
hdrs = ["binary_json_conformance_suite.h"],
|
|
deps = [
|
|
":binary_wireformat",
|
|
":conformance_cc_proto",
|
|
":conformance_test_lib",
|
|
"//:test_messages_proto2_cc_proto",
|
|
"//:test_messages_proto3_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_cc_proto",
|
|
"//editions:test_messages_proto2_editions_cc_proto",
|
|
"//editions:test_messages_proto3_editions_cc_proto",
|
|
"//src/google/protobuf",
|
|
"//src/google/protobuf:endian",
|
|
"//src/google/protobuf:protobuf_lite",
|
|
"//src/google/protobuf/json",
|
|
"//src/google/protobuf/util:type_resolver",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/log:die_if_null",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:str_format",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
"@jsoncpp",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "text_format_conformance_suite",
|
|
testonly = 1,
|
|
srcs = ["text_format_conformance_suite.cc"],
|
|
hdrs = ["text_format_conformance_suite.h"],
|
|
deps = [
|
|
":conformance_test_lib",
|
|
"//:test_messages_proto2_cc_proto",
|
|
"//:test_messages_proto3_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_cc_proto",
|
|
"//editions:test_messages_proto2_editions_cc_proto",
|
|
"//editions:test_messages_proto3_editions_cc_proto",
|
|
"//src/google/protobuf",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/log:die_if_null",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:str_format",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "test_runner",
|
|
hdrs = ["test_runner.h"],
|
|
deps = ["@abseil-cpp//absl/strings:string_view"],
|
|
)
|
|
|
|
cc_library(
|
|
name = "fork_pipe_runner",
|
|
srcs = ["fork_pipe_runner.cc"],
|
|
hdrs = ["fork_pipe_runner.h"],
|
|
deps = [
|
|
":conformance_cc_proto",
|
|
":test_runner",
|
|
"//src/google/protobuf:endian",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/strings:str_format",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
"@abseil-cpp//absl/types:span",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "binary_wireformat",
|
|
testonly = 1,
|
|
srcs = ["binary_wireformat.cc"],
|
|
hdrs = ["binary_wireformat.h"],
|
|
deps = [
|
|
"//src/google/protobuf:endian",
|
|
"//src/google/protobuf:protobuf_lite",
|
|
"@abseil-cpp//absl/strings",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "test_manager",
|
|
testonly = True,
|
|
srcs = ["test_manager.cc"],
|
|
hdrs = ["test_manager.h"],
|
|
deps = [
|
|
":conformance_cc_proto",
|
|
":failure_list_trie_node",
|
|
"//src/google/protobuf/stubs",
|
|
"@abseil-cpp//absl/container:btree",
|
|
"@abseil-cpp//absl/container:flat_hash_map",
|
|
"@abseil-cpp//absl/container:flat_hash_set",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "naming",
|
|
hdrs = ["naming.h"],
|
|
deps = [
|
|
":conformance_cc_proto",
|
|
"//src/google/protobuf",
|
|
"//src/google/protobuf:descriptor_legacy",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/strings",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "naming_test",
|
|
srcs = ["naming_test.cc"],
|
|
deps = [
|
|
":naming",
|
|
"//:test_messages_proto2_cc_proto",
|
|
"//:test_messages_proto3_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_cc_proto",
|
|
"//editions:test_messages_proto2_editions_cc_proto",
|
|
"//editions:test_messages_proto3_editions_cc_proto",
|
|
"@googletest//:gtest",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "testee",
|
|
testonly = True,
|
|
srcs = ["testee.cc"],
|
|
hdrs = ["testee.h"],
|
|
deps = [
|
|
":binary_wireformat",
|
|
":conformance_cc_proto",
|
|
":naming",
|
|
":test_runner",
|
|
"//src/google/protobuf",
|
|
"@abseil-cpp//absl/container:flat_hash_set",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "testee_test",
|
|
srcs = ["testee_test.cc"],
|
|
deps = [
|
|
":binary_wireformat",
|
|
":test_runner",
|
|
":testee",
|
|
"//:test_messages_proto2_cc_proto",
|
|
"//:test_messages_proto3_cc_proto",
|
|
"//src/google/protobuf",
|
|
"//src/google/protobuf:test_textproto",
|
|
"//src/google/protobuf/util:differencer",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
"@googletest//:gtest",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "test_manager_test",
|
|
srcs = ["test_manager_test.cc"],
|
|
deps = [
|
|
":test_manager",
|
|
"//src/google/protobuf/testing",
|
|
"//src/google/protobuf/testing:file",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/status:status_matchers",
|
|
"@abseil-cpp//absl/strings",
|
|
"@googletest//:gtest",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "binary_wireformat_test",
|
|
srcs = ["binary_wireformat_test.cc"],
|
|
deps = [
|
|
":binary_wireformat",
|
|
"@abseil-cpp//absl/strings",
|
|
"@abseil-cpp//absl/strings:string_view",
|
|
"@googletest//:gtest",
|
|
"@googletest//:gtest_main",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "conformance_test_runner",
|
|
testonly = 1,
|
|
visibility = ["//visibility:public"],
|
|
deps = [":conformance_test_main"],
|
|
)
|
|
|
|
proto_library(
|
|
name = "conformance_proto",
|
|
srcs = ["conformance.proto"],
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
cc_proto_library(
|
|
name = "conformance_cc_proto",
|
|
deps = [":conformance_proto"],
|
|
)
|
|
|
|
java_proto_library(
|
|
name = "conformance_java_proto",
|
|
deps = [":conformance_proto"],
|
|
)
|
|
|
|
java_lite_proto_library(
|
|
name = "conformance_java_proto_lite",
|
|
deps = [":conformance_proto"],
|
|
)
|
|
|
|
exports_files([
|
|
"bazel_conformance_test_runner.sh",
|
|
"failure_list_cpp.txt",
|
|
"failure_list_csharp.txt",
|
|
"failure_list_java.txt",
|
|
"failure_list_java_lite.txt",
|
|
"failure_list_objc.txt",
|
|
"failure_list_php.txt",
|
|
"failure_list_php_c.txt",
|
|
"failure_list_python.txt",
|
|
"failure_list_python_cpp.txt",
|
|
"failure_list_python_upb.txt",
|
|
"failure_list_ruby.txt",
|
|
"failure_list_jruby.txt",
|
|
"failure_list_jruby_ffi.txt",
|
|
"text_format_failure_list_cpp.txt",
|
|
"text_format_failure_list_java.txt",
|
|
"text_format_failure_list_java_lite.txt",
|
|
"text_format_failure_list_php.txt",
|
|
"text_format_failure_list_php_c.txt",
|
|
"text_format_failure_list_python.txt",
|
|
])
|
|
|
|
internal_csharp_proto_library(
|
|
name = "conformance_csharp_proto",
|
|
srcs = ["conformance.proto"],
|
|
visibility = [
|
|
"//csharp:__subpackages__",
|
|
],
|
|
)
|
|
|
|
internal_objc_proto_library(
|
|
name = "conformance_objc_proto",
|
|
srcs = ["conformance.proto"],
|
|
visibility = [
|
|
"//conformance:__pkg__",
|
|
"//objc:__pkg__",
|
|
],
|
|
)
|
|
|
|
internal_py_proto_library(
|
|
name = "conformance_py_proto",
|
|
srcs = ["conformance.proto"],
|
|
srcs_version = "PY2AND3",
|
|
visibility = [
|
|
"//python:__subpackages__",
|
|
],
|
|
)
|
|
|
|
internal_php_proto_library(
|
|
name = "conformance_php_proto",
|
|
srcs = ["conformance.proto"],
|
|
outs = [
|
|
"Conformance/ConformanceRequest.php",
|
|
"Conformance/ConformanceResponse.php",
|
|
"Conformance/FailureSet.php",
|
|
"Conformance/JspbEncodingConfig.php",
|
|
"Conformance/TestCategory.php",
|
|
"Conformance/WireFormat.php",
|
|
"GPBMetadata/Conformance.php",
|
|
],
|
|
visibility = [
|
|
"//conformance:__pkg__",
|
|
"//php:__pkg__",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "conformance_cpp",
|
|
testonly = 1,
|
|
srcs = ["conformance_cpp.cc"],
|
|
visibility = [
|
|
"//pkg:__pkg__",
|
|
"//src:__subpackages__",
|
|
],
|
|
deps = [
|
|
":conformance_cc_proto",
|
|
"//:any_cc_proto",
|
|
"//:api_cc_proto",
|
|
"//:duration_cc_proto",
|
|
"//:empty_cc_proto",
|
|
"//:field_mask_cc_proto",
|
|
"//:protobuf",
|
|
"//:struct_cc_proto",
|
|
"//:test_messages_proto2_cc_proto",
|
|
"//:test_messages_proto3_cc_proto",
|
|
"//:timestamp_cc_proto",
|
|
"//:type_cc_proto",
|
|
"//:wrappers_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_cc_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_cc_proto",
|
|
"//editions:test_messages_proto2_editions_cc_proto",
|
|
"//editions:test_messages_proto3_editions_cc_proto",
|
|
"//src/google/protobuf",
|
|
"//src/google/protobuf:port",
|
|
"//src/google/protobuf:protobuf_lite",
|
|
"//src/google/protobuf/json",
|
|
"//src/google/protobuf/stubs",
|
|
"//src/google/protobuf/util:json_util",
|
|
"//src/google/protobuf/util:type_resolver",
|
|
"@abseil-cpp//absl/log:absl_check",
|
|
"@abseil-cpp//absl/log:absl_log",
|
|
"@abseil-cpp//absl/status",
|
|
"@abseil-cpp//absl/status:statusor",
|
|
"@abseil-cpp//absl/strings",
|
|
],
|
|
)
|
|
|
|
java_binary(
|
|
name = "conformance_java",
|
|
testonly = 1,
|
|
srcs = ["ConformanceJava.java"],
|
|
main_class = "ConformanceJava",
|
|
visibility = [
|
|
"//java:__subpackages__",
|
|
],
|
|
deps = [
|
|
":conformance_java_proto",
|
|
"//:protobuf_java",
|
|
"//:protobuf_java_util",
|
|
"//:test_messages_proto2_java_proto",
|
|
"//:test_messages_proto3_java_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_java_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_java_proto",
|
|
"//editions:test_messages_proto2_editions_java_proto",
|
|
"//editions:test_messages_proto3_editions_java_proto",
|
|
],
|
|
)
|
|
|
|
java_binary(
|
|
name = "conformance_java_lite",
|
|
testonly = 1,
|
|
srcs = ["ConformanceJavaLite.java"],
|
|
main_class = "ConformanceJavaLite",
|
|
visibility = [
|
|
"//java:__subpackages__",
|
|
],
|
|
deps = [
|
|
":conformance_java_proto_lite",
|
|
"//:protobuf_java_util",
|
|
"//:protobuf_javalite",
|
|
"//:test_messages_proto2_java_proto_lite",
|
|
"//:test_messages_proto3_java_proto_lite",
|
|
"//conformance/test_protos:test_messages_edition2023_java_proto_lite",
|
|
"//conformance/test_protos:test_messages_edition_unstable_java_proto_lite",
|
|
"//editions:test_messages_proto2_editions_java_proto_lite",
|
|
"//editions:test_messages_proto3_editions_java_proto_lite",
|
|
],
|
|
)
|
|
|
|
py_binary(
|
|
name = "conformance_python",
|
|
testonly = 1,
|
|
srcs = ["conformance_python.py"],
|
|
imports = [
|
|
"..",
|
|
"../python",
|
|
],
|
|
srcs_version = "PY2AND3",
|
|
visibility = ["//python:__subpackages__"],
|
|
deps = [
|
|
":conformance_py_proto",
|
|
"//:protobuf_python",
|
|
"//conformance/test_protos:test_messages_edition2023_py_pb2",
|
|
"//conformance/test_protos:test_messages_edition_unstable_py_pb2",
|
|
"//editions:test_messages_proto2_editions_py_pb2",
|
|
"//editions:test_messages_proto3_editions_py_pb2",
|
|
"//python:_message", # Make upb visible if we need it.
|
|
"//python:conformance_test_py_proto",
|
|
],
|
|
)
|
|
|
|
py_binary(
|
|
name = "update_failure_list",
|
|
srcs = ["update_failure_list.py"],
|
|
)
|
|
|
|
inline_sh_binary(
|
|
name = "conformance_php",
|
|
testonly = 1,
|
|
srcs = [
|
|
"autoload.php",
|
|
"conformance_php.php",
|
|
],
|
|
cmd = """
|
|
php -d include_path=php/generated:conformance:src/google/protobuf:editions/golden \\
|
|
-d auto_prepend_file=$(rootpath autoload.php) \\
|
|
$(rootpath conformance_php.php)
|
|
""",
|
|
visibility = ["//php:__subpackages__"],
|
|
deps = [
|
|
":conformance_php_proto",
|
|
"//:test_messages_proto3_php_proto",
|
|
"//editions:test_messages_proto3_editions_php_proto",
|
|
"//php:source_files",
|
|
],
|
|
)
|
|
|
|
inline_sh_binary(
|
|
name = "conformance_php_c",
|
|
testonly = 1,
|
|
srcs = [
|
|
"conformance_php.php",
|
|
"//php:extension",
|
|
],
|
|
cmd = """
|
|
php -dextension=$(rootpath //php:extension) \\
|
|
-d include_path=conformance:src/google/protobuf:editions/golden \\
|
|
$(rootpath conformance_php.php)
|
|
""",
|
|
visibility = ["//php:__subpackages__"],
|
|
deps = [
|
|
":conformance_php_proto",
|
|
"//:test_messages_proto3_php_proto",
|
|
"//editions:test_messages_proto3_editions_php_proto",
|
|
],
|
|
)
|
|
|
|
inline_sh_binary(
|
|
name = "conformance_csharp",
|
|
testonly = 1,
|
|
srcs = ["//csharp/src/Google.Protobuf.Conformance:conformance_dll"],
|
|
cmd = "dotnet $(rootpath //csharp/src/Google.Protobuf.Conformance:conformance_dll)",
|
|
visibility = ["//csharp:__subpackages__"],
|
|
deps = [
|
|
"//conformance/test_protos:test_messages_edition2023_csharp_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_csharp_proto",
|
|
"//csharp/src/Google.Protobuf.Conformance:conformance_runfiles",
|
|
],
|
|
)
|
|
|
|
objc_library(
|
|
name = "conformance_objc_lib",
|
|
testonly = 1,
|
|
non_arc_srcs = ["conformance_objc.m"],
|
|
# See https://github.com/bazelbuild/bazel/issues/12897.
|
|
tags = ["manual"],
|
|
deps = [
|
|
":conformance_objc_proto",
|
|
"//:test_messages_proto2_objc_proto",
|
|
"//:test_messages_proto3_objc_proto",
|
|
"//conformance/test_protos:test_messages_edition2023_objc_proto",
|
|
"//conformance/test_protos:test_messages_edition_unstable_objc_proto",
|
|
"//editions:test_messages_proto2_editions_objc_proto",
|
|
"//editions:test_messages_proto3_editions_objc_proto",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "conformance_objc",
|
|
testonly = 1,
|
|
# See https://github.com/bazelbuild/bazel/issues/12897.
|
|
tags = ["manual"],
|
|
visibility = ["//objectivec:__subpackages__"],
|
|
deps = [":conformance_objc_lib"],
|
|
)
|
|
|
|
################################################################################
|
|
# Distribution files
|
|
################################################################################
|
|
|
|
filegroup(
|
|
name = "all_files",
|
|
srcs = glob(["**/*"]),
|
|
visibility = ["//src/google/protobuf/compiler/csharp:__pkg__"],
|
|
)
|