| # 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 current_py_cc_libs.""" |
| |
| load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") |
| load("@rules_testing//lib:truth.bzl", "matching") |
| load("//tests:cc_info_subject.bzl", "cc_info_subject") |
| |
| _tests = [] |
| |
| def _test_current_toolchain_libs(name): |
| analysis_test( |
| name = name, |
| impl = _test_current_toolchain_libs_impl, |
| target = "//python/cc:current_py_cc_libs", |
| config_settings = { |
| "//command_line_option:extra_toolchains": [str(Label("//tests/cc:all"))], |
| }, |
| attrs = { |
| "lib": attr.label( |
| default = "//tests/cc:libpython", |
| allow_single_file = True, |
| ), |
| }, |
| ) |
| |
| def _test_current_toolchain_libs_impl(env, target): |
| # Check that the forwarded CcInfo looks vaguely correct. |
| cc_info = env.expect.that_target(target).provider( |
| CcInfo, |
| factory = cc_info_subject, |
| ) |
| cc_info.linking_context().linker_inputs().has_size(2) |
| |
| # Check that the forward DefaultInfo looks correct |
| env.expect.that_target(target).runfiles().contains_predicate( |
| matching.str_matches("*/libdata.txt"), |
| ) |
| |
| # The shared library should also end up in runfiles |
| # The `_solib` directory is a special directory CC rules put |
| # libraries into. |
| env.expect.that_target(target).runfiles().contains_predicate( |
| matching.str_matches("*_solib*/libpython3.so"), |
| ) |
| |
| _tests.append(_test_current_toolchain_libs) |
| |
| def _test_toolchain_is_registered_by_default(name): |
| analysis_test( |
| name = name, |
| impl = _test_toolchain_is_registered_by_default_impl, |
| target = "//python/cc:current_py_cc_libs", |
| ) |
| |
| def _test_toolchain_is_registered_by_default_impl(env, target): |
| env.expect.that_target(target).has_provider(CcInfo) |
| |
| _tests.append(_test_toolchain_is_registered_by_default) |
| |
| def current_py_cc_libs_test_suite(name): |
| test_suite( |
| name = name, |
| tests = _tests, |
| ) |