"""Tests for merge_attrs function"""

load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest")
load(
    "//java/common/rules:rule_util.bzl",
    "merge_attrs",
)

_attr_string = attr.string()
_attr_string_different_ref = attr.string()
_attr_string_different = attr.string(default = "Some default")

def _merge_attrs_merges_impl(ctx):
    env = unittest.begin(ctx)

    attrs = merge_attrs(
        {"A": _attr_string},
        {"B": _attr_string_different_ref, "C": _attr_string_different},
        override_attrs = {"B": _attr_string_different},
        remove_attrs = ["C"],
    )

    asserts.equals(env, attrs, {"A": _attr_string, "B": _attr_string_different})

    return unittest.end(env)

merge_attrs_merges_test = unittest.make(_merge_attrs_merges_impl)

def merge_attrs_test_suite(name):
    """Sets up util test suite

    Args:
        name: the name of the test suite target
    """
    unittest.suite(
        name,
        merge_attrs_merges_test,
    )
