diff options
Diffstat (limited to 'tests/rule_based_toolchain/action_type_config/action_type_config_test.bzl')
-rw-r--r-- | tests/rule_based_toolchain/action_type_config/action_type_config_test.bzl | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/rule_based_toolchain/action_type_config/action_type_config_test.bzl b/tests/rule_based_toolchain/action_type_config/action_type_config_test.bzl new file mode 100644 index 0000000..7ee85e6 --- /dev/null +++ b/tests/rule_based_toolchain/action_type_config/action_type_config_test.bzl @@ -0,0 +1,108 @@ +# Copyright 2024 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Tests for the action_type_config rule.""" + +load( + "//cc/toolchains:cc_toolchain_info.bzl", + "ActionTypeConfigSetInfo", + "ActionTypeInfo", +) +load("//cc/toolchains/impl:collect.bzl", _collect_action_type_configs = "collect_action_type_config_sets") +load("//tests/rule_based_toolchain:subjects.bzl", "result_fn_wrapper", "subjects") + +visibility("private") + +_TOOL_FILES = [ + "tests/rule_based_toolchain/testdata/bin", + "tests/rule_based_toolchain/testdata/bin_wrapper", + "tests/rule_based_toolchain/testdata/bin_wrapper.sh", +] +_ADDITIONAL_FILES = [ + "tests/rule_based_toolchain/testdata/multiple2", +] +_C_COMPILE_FILES = [ + "tests/rule_based_toolchain/testdata/file1", + "tests/rule_based_toolchain/testdata/multiple1", +] +_CPP_COMPILE_FILES = [ + "tests/rule_based_toolchain/testdata/file2", + "tests/rule_based_toolchain/testdata/multiple1", +] + +collect_action_type_configs = result_fn_wrapper(_collect_action_type_configs) + +def _files_taken_test(env, targets): + configs = env.expect.that_target(targets.file_map).provider(ActionTypeConfigSetInfo).configs() + c_compile = configs.get(targets.c_compile[ActionTypeInfo]) + c_compile.files().contains_exactly( + _C_COMPILE_FILES + _TOOL_FILES + _ADDITIONAL_FILES, + ) + c_compile.args().contains_exactly([ + targets.c_compile_args.label, + targets.all_compile_args.label, + ]) + + cpp_compile = configs.get(targets.cpp_compile[ActionTypeInfo]) + cpp_compile.files().contains_exactly( + _CPP_COMPILE_FILES + _TOOL_FILES + _ADDITIONAL_FILES, + ) + cpp_compile.args().contains_exactly([ + targets.cpp_compile_args.label, + targets.all_compile_args.label, + ]) + +def _merge_distinct_configs_succeeds_test(env, targets): + configs = env.expect.that_value( + collect_action_type_configs( + targets = [targets.c_compile_config, targets.cpp_compile_config], + label = env.ctx.label, + ), + factory = subjects.result(subjects.ActionTypeConfigSetInfo), + ).ok().configs() + configs.get(targets.c_compile[ActionTypeInfo]).label().equals( + targets.c_compile_config.label, + ) + configs.get(targets.cpp_compile[ActionTypeInfo]).label().equals( + targets.cpp_compile_config.label, + ) + +def _merge_overlapping_configs_fails_test(env, targets): + err = env.expect.that_value( + collect_action_type_configs( + targets = [targets.file_map, targets.c_compile_config], + label = env.ctx.label, + ), + factory = subjects.result(subjects.ActionTypeConfigSetInfo), + ).err() + err.contains("//tests/rule_based_toolchain/actions:c_compile is configured by both") + err.contains("//tests/rule_based_toolchain/action_type_config:c_compile_config") + err.contains("//tests/rule_based_toolchain/action_type_config:file_map") + +TARGETS = [ + ":file_map", + ":c_compile_config", + ":cpp_compile_config", + "//tests/rule_based_toolchain/actions:c_compile", + "//tests/rule_based_toolchain/actions:cpp_compile", + "//tests/rule_based_toolchain/args_list:c_compile_args", + "//tests/rule_based_toolchain/args_list:cpp_compile_args", + "//tests/rule_based_toolchain/args_list:all_compile_args", + "//tests/rule_based_toolchain/args_list:args_list", +] + +TESTS = { + "files_taken_test": _files_taken_test, + "merge_distinct_configs_succeeds_test": _merge_distinct_configs_succeeds_test, + "merge_overlapping_configs_fails_test": _merge_overlapping_configs_fails_test, +} |