| # Protocol Buffers - Google's data interchange format |
| # Copyright 2025 Google Inc. 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 |
| # |
| """Tests for `proto_common.declare_generated_files` function.""" |
| |
| load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") |
| load("@rules_testing//lib:util.bzl", "util") |
| load("//bazel:proto_library.bzl", "proto_library") |
| load("//bazel/common:proto_common.bzl", "proto_common") |
| load("//bazel/common:proto_info.bzl", "ProtoInfo") |
| |
| def proto_common_declare_generated_files_test_suite(name): |
| test_suite( |
| name = name, |
| tests = [ |
| _test_declare_generated_files_basic, |
| _test_declare_generated_files_python, |
| ], |
| ) |
| |
| def _impl(ctx): |
| files = proto_common.declare_generated_files( |
| ctx.actions, |
| ctx.attr.proto_dep[ProtoInfo], |
| ctx.attr.extension, |
| (lambda s: s.replace("-", "_").replace(".", "/")) if ctx.attr.python_names else None, |
| ) |
| for f in files: |
| ctx.actions.write(f, "") |
| return [DefaultInfo(files = depset(files))] |
| |
| _declare_generated_files = rule( |
| _impl, |
| attrs = { |
| "proto_dep": attr.label(), |
| "extension": attr.string(), |
| "python_names": attr.bool(default = False), |
| }, |
| ) |
| |
| # Verifies `proto_common.declare_generated_files` call. |
| def _test_declare_generated_files_basic(name): |
| util.helper_target( |
| proto_library, |
| name = name + "_proto", |
| srcs = ["A.proto", "b/B.proto"], |
| ) |
| util.helper_target( |
| _declare_generated_files, |
| name = name + "_declare_generated_files", |
| proto_dep = name + "_proto", |
| extension = ".cc", |
| ) |
| |
| analysis_test( |
| name = name, |
| target = name + "_declare_generated_files", |
| impl = _test_declare_generated_files_basic_impl, |
| ) |
| |
| def _test_declare_generated_files_basic_impl(env, target): |
| env.expect.that_target(target).default_outputs().contains_exactly([ |
| "{package}/A.cc", |
| "{package}/b/B.cc", |
| ]) |
| |
| # Verifies `proto_common.declare_generated_files` for Python. |
| def _test_declare_generated_files_python(name): |
| util.helper_target( |
| proto_library, |
| name = name + "_proto", |
| srcs = ["my-proto.gen.proto"], |
| ) |
| util.helper_target( |
| _declare_generated_files, |
| name = name + "_declare_generated_files_python", |
| proto_dep = name + "_proto", |
| extension = "_pb2.py", |
| python_names = True, |
| ) |
| |
| analysis_test( |
| name = name, |
| target = name + "_declare_generated_files_python", |
| impl = _test_declare_generated_files_python_impl, |
| ) |
| |
| def _test_declare_generated_files_python_impl(env, target): |
| env.expect.that_target(target).default_outputs().contains_exactly([ |
| "{package}/my_proto/gen_pb2.py", |
| ]) |