"""Provides a rule to generate a conformance test for a given version of the gencode.""" load("@bazel_skylib//rules:build_test.bzl", "build_test") def java_runtime_conformance(name, gencode_version, tags = []): """Generates a conformance test for the given version of the runtime. For example, runtime_conformance("3.19.4") will generate a build test named "conformance_v3.19.4" that will fail if the runtime at that version fails to compile the unittest proto. Args: name: The name of the test. gencode_version: The version of the runtime to test. tags: Any tags to apply to the generated test. """ if gencode_version == "main": protoc = "//:protoc" else: minor = gencode_version[gencode_version.find(".") + 1:] protoc = Label("@com_google_protobuf_v%s//:protoc" % minor) gencode = [ "v%s/protobuf_unittest/UnittestProto.java" % gencode_version, "v%s/com/google/protobuf/test/UnittestImport.java" % gencode_version, "v%s/com/google/protobuf/test/UnittestImportPublic.java" % gencode_version, ] native.genrule( name = "unittest_proto_gencode_v" + gencode_version, srcs = [ "//src/google/protobuf:unittest_proto_srcs", ], outs = gencode, cmd = "$(location %s) " % protoc + "$(locations //src/google/protobuf:unittest_proto_srcs) " + " -Isrc/ --java_out=$(@D)/v%s" % gencode_version, tools = [protoc], ) conformance_name = "conformance_v" + gencode_version conformance_lib_name = conformance_name + "_lib" native.java_library( name = conformance_lib_name, srcs = gencode, deps = ["//java/core"], tags = tags, ) build_test( name = name, targets = [":" + conformance_lib_name], tags = tags, )