1"""Unittests for rust rules."""
2
3load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
4load("//rust:defs.bzl", "rust_common", "rust_library")
5
6def _transitive_crate_outputs_test_impl(ctx):
7    env = analysistest.begin(ctx)
8    tut = analysistest.target_under_test(env)
9    transitive_crate_outputs = tut[rust_common.dep_info].transitive_crate_outputs.to_list()
10
11    # Check that the non-crate output baz.a didn't find its way into transitive_crate_outputs
12    # while the bar.rlib did.
13    asserts.equals(env, len(transitive_crate_outputs), 1)
14    asserts.equals(env, transitive_crate_outputs[0].extension, "rlib")
15
16    return analysistest.end(env)
17
18transitive_crate_outputs_test = analysistest.make(_transitive_crate_outputs_test_impl)
19
20def _transitive_crate_outputs_test():
21    rust_library(
22        name = "foo",
23        srcs = ["foo.rs"],
24        edition = "2018",
25        deps = [":bar", ":baz"],
26    )
27
28    rust_library(
29        name = "bar",
30        srcs = ["bar.rs"],
31        edition = "2018",
32    )
33
34    # buildifier: disable=native-cc
35    native.cc_library(
36        name = "baz",
37        srcs = ["baz.cc"],
38    )
39
40    transitive_crate_outputs_test(
41        name = "transitive_crate_outputs_test",
42        target_under_test = ":foo",
43    )
44
45def transitive_crate_outputs_test_suite(name):
46    """Entry-point macro called from the BUILD file.
47
48    Args:
49        name: Name of the macro.
50    """
51    _transitive_crate_outputs_test()
52
53    native.test_suite(
54        name = name,
55        tests = [
56            ":transitive_crate_outputs_test",
57        ],
58    )
59