blob: 8285107fd85d8459e7f082b0ad9b301cf8f17789 [file]
"""Tests for objc_library local_defines attribute."""
load("@bazel_features//:features.bzl", "bazel_features")
load("@rules_testing//lib:analysis_test.bzl", "test_suite")
load("@rules_testing//lib:util.bzl", "util")
load("//cc:action_names.bzl", "ACTION_NAMES")
load("//cc:objc_library.bzl", "objc_library")
load("//cc/common:cc_info.bzl", "CcInfo")
load("//tests/cc/testutil:cc_analysis_test.bzl", "cc_analysis_test")
load("//tests/cc/testutil/toolchains:features.bzl", "FEATURE_NAMES")
_OBJC_ACTION_CONFIGS = [
ACTION_NAMES.objc_compile,
ACTION_NAMES.cpp_link_static_library,
]
def _test_local_defines_in_compile_action(name, **kwargs):
util.helper_target(
objc_library,
name = name + "_lib",
srcs = ["foo.m"],
local_defines = ["LOCAL_DEF=1"],
)
cc_analysis_test(
name = name,
impl = _test_local_defines_in_compile_action_impl,
target = name + "_lib",
with_action_configs = _OBJC_ACTION_CONFIGS,
test_features = [FEATURE_NAMES.preprocessor_defines],
**kwargs
)
def _test_local_defines_in_compile_action_impl(env, target):
compile_actions = [a for a in target.actions if a.mnemonic == "ObjcCompile"]
env.expect.that_collection(compile_actions).has_size(1)
env.expect.that_collection(compile_actions[0].argv).contains("-DLOCAL_DEF=1")
def _test_local_defines_not_in_cc_info(name, **kwargs):
"""local_defines should not be in CcInfo.compilation_context.defines."""
util.helper_target(
objc_library,
name = name + "_lib",
srcs = ["foo.m"],
local_defines = ["LOCAL_DEF=1"],
defines = ["PUBLIC_DEF=1"],
)
cc_analysis_test(
name = name,
impl = _test_local_defines_not_in_cc_info_impl,
target = name + "_lib",
with_action_configs = _OBJC_ACTION_CONFIGS,
**kwargs
)
def _test_local_defines_not_in_cc_info_impl(env, target):
cc_info = target[CcInfo]
defines = cc_info.compilation_context.defines.to_list()
env.expect.that_collection(defines).contains("PUBLIC_DEF=1")
env.expect.that_collection(defines).not_contains("LOCAL_DEF=1")
def _test_local_defines_not_propagated_to_dependent(name, **kwargs):
util.helper_target(
objc_library,
name = name + "_dep",
srcs = ["foo.m"],
local_defines = ["LOCAL_DEP_DEF=1"],
defines = ["PROPAGATED_DEF=1"],
)
util.helper_target(
objc_library,
name = name + "_lib",
srcs = ["foo.m"],
deps = [name + "_dep"],
)
cc_analysis_test(
name = name,
impl = _test_local_defines_not_propagated_to_dependent_impl,
target = name + "_lib",
with_action_configs = _OBJC_ACTION_CONFIGS,
**kwargs
)
def _test_local_defines_not_propagated_to_dependent_impl(env, target):
cc_info = target[CcInfo]
defines = cc_info.compilation_context.defines.to_list()
env.expect.that_collection(defines).contains("PROPAGATED_DEF=1")
env.expect.that_collection(defines).not_contains("LOCAL_DEP_DEF=1")
def objc_library_local_defines_tests(name):
tests = []
if bazel_features.cc.cc_common_is_in_rules_cc:
tests.extend([
_test_local_defines_in_compile_action,
_test_local_defines_not_in_cc_info,
_test_local_defines_not_propagated_to_dependent,
])
test_suite(
name = name,
tests = tests,
)