1"""Unittests for rust rules."""
2
3load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
4load("@rules_cc//cc:defs.bzl", "cc_library")
5load("//rust:defs.bzl", "rust_library")
6
7def _interleaving_cc_link_order_test_impl(ctx):
8    env = analysistest.begin(ctx)
9    tut = analysistest.target_under_test(env)
10    cc_info = tut[CcInfo]
11    linker_inputs = cc_info.linking_context.linker_inputs.to_list()
12    a = linker_inputs[0]
13    b = linker_inputs[1]
14    c = linker_inputs[2]
15    d = linker_inputs[3]
16    e = linker_inputs[4]
17
18    asserts.equals(env, "a", a.owner.name)
19    asserts.equals(env, "b", b.owner.name)
20    asserts.equals(env, "c", c.owner.name)
21    asserts.equals(env, "d", d.owner.name)
22    asserts.equals(env, "e", e.owner.name)
23
24    return analysistest.end(env)
25
26interleaving_cc_link_order_test = analysistest.make(_interleaving_cc_link_order_test_impl)
27
28def _interleaving_link_order_test():
29    rust_library(
30        name = "a",
31        srcs = ["a.rs"],
32        edition = "2018",
33        deps = [":b"],
34    )
35    cc_library(
36        name = "b",
37        srcs = ["b.cc"],
38        deps = [":c"],
39    )
40    rust_library(
41        name = "c",
42        srcs = ["c.rs"],
43        edition = "2018",
44        deps = [":d"],
45    )
46    cc_library(
47        name = "d",
48        srcs = ["d.cc"],
49        deps = [":e"],
50    )
51    rust_library(
52        name = "e",
53        srcs = ["e.rs"],
54        edition = "2018",
55    )
56
57    interleaving_cc_link_order_test(
58        name = "interleaving_cc_link_order_test",
59        target_under_test = ":a",
60    )
61
62def interleaved_cc_info_test_suite(name):
63    """Entry-point macro called from the BUILD file.
64
65    Args:
66        name: Name of the macro.
67    """
68    _interleaving_link_order_test()
69
70    native.test_suite(
71        name = name,
72        tests = [
73            ":interleaving_cc_link_order_test",
74        ],
75    )
76