"""Starlark definitions for Protobuf conformance tests.

PLEASE DO NOT DEPEND ON THE CONTENTS OF THIS FILE, IT IS UNSTABLE.
"""

load("@rules_shell//shell:sh_test.bzl", "sh_test")

def conformance_test(
        name,
        testee,
        failure_list = None,
        text_format_failure_list = None,
        maximum_edition = None,
        **kwargs):
    """Conformance test runner.

    Args:
      name: the name for the test.
      testee: a conformance test client binary.
      failure_list: a text file with known failures, one per line.
      text_format_failure_list: a text file with known failures (one per line)
          for the text format conformance suite.
      **kwargs: common arguments to pass to sh_test.
    """
    args = ["--testee $(location %s)" % testee]
    failure_lists = []
    if failure_list:
        args = args + ["--failure_list $(location %s)" % failure_list]
        failure_lists = failure_lists + [failure_list]
    if text_format_failure_list:
        args = args + ["--text_format_failure_list $(location %s)" % text_format_failure_list]
        failure_lists = failure_lists + [text_format_failure_list]
    if maximum_edition:
        args = args + ["--maximum_edition %s" % maximum_edition]

    sh_test(
        name = name,
        srcs = ["//conformance:bazel_conformance_test_runner.sh"],
        data = [testee] + failure_lists + [
            "//conformance:conformance_test_runner",
        ],
        args = args,
        deps = [
            "@bazel_tools//tools/bash/runfiles",
        ],
        tags = ["conformance"],
        **kwargs
    )
