blob: 2e9d4805d63dd6a2286fb0f29142ebf73408db50 [file] [log] [blame]
load("//cc/toolchains:nested_args.bzl", "cc_nested_args")
load("//cc/toolchains/impl:variables.bzl", "cc_builtin_variables", "cc_variable", "types")
load("//tests/rule_based_toolchain:analysis_test_suite.bzl", "analysis_test_suite")
load(":variables_test.bzl", "TARGETS", "TESTS")
cc_variable(
name = "str",
type = types.string,
)
cc_variable(
name = "optional_list",
type = types.option(types.list(types.string)),
)
cc_variable(
name = "str_list",
type = types.list(types.string),
)
cc_variable(
name = "str_option",
type = types.option(types.string),
)
cc_variable(
name = "struct",
actions = ["//tests/rule_based_toolchain/actions:c_compile"],
type = types.struct(
nested_str = types.string,
nested_str_list = types.list(types.string),
),
)
cc_variable(
name = "struct_list",
actions = ["//tests/rule_based_toolchain/actions:c_compile"],
type = types.list(types.struct(
nested_str = types.string,
nested_str_list = types.list(types.string),
)),
)
cc_variable(
name = "struct_list.nested_str_list",
type = types.unknown,
)
# Dots in the name confuse the test rules.
# It would end up generating targets.struct_list.nested_str_list.
alias(
name = "nested_str_list",
actual = ":struct_list.nested_str_list",
)
cc_nested_args(
name = "simple_str",
args = ["{str}"],
format = {"str": ":str"},
)
cc_nested_args(
name = "list_not_allowed",
args = ["{s}"],
format = {"s": ":str_list"},
)
cc_nested_args(
name = "iterate_over_list",
args = ["{}"],
iterate_over = ":str_list",
)
cc_nested_args(
name = "iterate_over_non_list",
args = ["--foo"],
iterate_over = ":str",
)
cc_nested_args(
name = "str_not_a_bool",
args = ["--foo"],
requires_true = ":str",
)
cc_nested_args(
name = "str_equal",
args = ["--foo"],
requires_equal = ":str",
requires_equal_value = "bar",
)
cc_nested_args(
name = "inner_iter",
args = ["{}"],
iterate_over = ":struct_list.nested_str_list",
)
cc_nested_args(
name = "outer_iter",
iterate_over = ":struct_list",
nested = [":inner_iter"],
)
cc_nested_args(
name = "bad_inner_iter",
args = ["{s}"],
format = {"s": ":struct_list.nested_str_list"},
)
cc_nested_args(
name = "bad_outer_iter",
iterate_over = ":struct_list",
nested = [":bad_inner_iter"],
)
cc_nested_args(
name = "bad_nested_optional",
args = ["{s}"],
format = {"s": ":str_option"},
)
cc_nested_args(
name = "good_nested_optional",
args = ["{s}"],
format = {"s": ":str_option"},
requires_not_none = ":str_option",
)
cc_nested_args(
name = "optional_list_iter",
args = ["--foo"],
iterate_over = ":optional_list",
)
cc_builtin_variables(
name = "variables",
srcs = [
":optional_list",
":str",
":str_list",
":str_option",
":struct",
":struct_list",
],
)
cc_builtin_variables(
name = "nested_variables",
srcs = [
":struct_list.nested_str_list",
],
)
analysis_test_suite(
name = "test_suite",
targets = TARGETS,
tests = TESTS,
)