"""Unittests for rust rules."""

load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load(
    "//rust:defs.bzl",
    "rust_binary",
    "rust_library",
    "rust_shared_library",
    "rust_static_library",
)

def _check_runfiles_test_impl(ctx):
    env = analysistest.begin(ctx)
    tut = analysistest.target_under_test(env)
    runfiles = tut[DefaultInfo].default_runfiles.files.to_list()

    asserts.true(env, _is_in_runfiles("libbar.so", runfiles))

    return analysistest.end(env)

def _is_in_runfiles(name, runfiles):
    for file in runfiles:
        if file.basename == name:
            return True
    return False

check_runfiles_test = analysistest.make(_check_runfiles_test_impl)

def _check_runfiles_test():
    rust_library(
        name = "foo_lib",
        srcs = ["foo.rs"],
        deps = [":libbar.so"],
    )

    rust_binary(
        name = "foo_bin",
        srcs = ["foo_main.rs"],
        deps = [":libbar.so"],
    )

    rust_shared_library(
        name = "foo_dylib",
        srcs = ["foo.rs"],
        deps = [":libbar.so"],
    )

    rust_static_library(
        name = "foo_static",
        srcs = ["foo.rs"],
        deps = [":libbar.so"],
    )

    # buildifier: disable=native-cc
    native.cc_binary(
        name = "libbar.so",
        srcs = ["bar.cc"],
        linkshared = True,
    )

    check_runfiles_test(
        name = "check_runfiles_lib_test",
        target_under_test = ":foo_lib",
    )

    check_runfiles_test(
        name = "check_runfiles_bin_test",
        target_under_test = ":foo_bin",
    )

    check_runfiles_test(
        name = "check_runfiles_dylib_test",
        target_under_test = ":foo_dylib",
    )

    check_runfiles_test(
        name = "check_runfiles_static_test",
        target_under_test = ":foo_static",
    )

def check_runfiles_test_suite(name):
    """Entry-point macro called from the BUILD file.

    Args:
        name: Name of the macro.
    """
    _check_runfiles_test()

    native.test_suite(
        name = name,
        tests = [
            ":check_runfiles_lib_test",
            ":check_runfiles_bin_test",
            ":check_runfiles_dylib_test",
            ":check_runfiles_static_test",
        ],
    )
