| # Copyright 2023 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. |
| """CcInfo testing subject.""" |
| |
| load("@rules_testing//lib:truth.bzl", "subjects") |
| |
| def cc_info_subject(info, *, meta): |
| """Creates a new `CcInfoSubject` for a CcInfo provider instance. |
| |
| Args: |
| info: The CcInfo object. |
| meta: ExpectMeta object. |
| |
| Returns: |
| A `CcInfoSubject` struct. |
| """ |
| |
| # buildifier: disable=uninitialized |
| public = struct( |
| # go/keep-sorted start |
| compilation_context = lambda *a, **k: _cc_info_subject_compilation_context(self, *a, **k), |
| # go/keep-sorted end |
| ) |
| self = struct( |
| actual = info, |
| meta = meta, |
| ) |
| return public |
| |
| def _cc_info_subject_compilation_context(self): |
| """Returns the CcInfo.compilation_context as a subject. |
| |
| Args: |
| self: implicitly added. |
| |
| Returns: |
| [`CompilationContext`] instance. |
| """ |
| return _compilation_context_subject_new( |
| self.actual.compilation_context, |
| meta = self.meta.derive("compilation_context()"), |
| ) |
| |
| def _compilation_context_subject_new(info, *, meta): |
| """Creates a CompilationContextSubject. |
| |
| Args: |
| info: ([`CompilationContext`]) object instance. |
| meta: rules_testing `ExpectMeta` instance. |
| |
| Returns: |
| [`CompilationContextSubject`] object. |
| """ |
| |
| # buildifier: disable=uninitialized |
| public = struct( |
| # go/keep-sorted start |
| direct_headers = lambda *a, **k: _compilation_context_subject_direct_headers(self, *a, **k), |
| direct_public_headers = lambda *a, **k: _compilation_context_subject_direct_public_headers(self, *a, **k), |
| system_includes = lambda *a, **k: _compilation_context_subject_system_includes(self, *a, **k), |
| # go/keep-sorted end |
| ) |
| self = struct( |
| actual = info, |
| meta = meta, |
| ) |
| return public |
| |
| def _compilation_context_subject_direct_headers(self): |
| """Returns the direct headers as a subjecct. |
| |
| Args: |
| self: implicitly added |
| |
| Returns: |
| [`CollectionSubject`] of `File` objects of the direct headers. |
| """ |
| return subjects.collection( |
| self.actual.direct_headers, |
| meta = self.meta.derive("direct_headers()"), |
| container_name = "direct_headers", |
| element_plural_name = "header files", |
| ) |
| |
| def _compilation_context_subject_direct_public_headers(self): |
| """Returns the direct public headers as a subjecct. |
| |
| Args: |
| self: implicitly added |
| |
| Returns: |
| [`CollectionSubject`] of `File` objects of the direct headers. |
| """ |
| return subjects.collection( |
| self.actual.direct_public_headers, |
| meta = self.meta.derive("direct_public_headers()"), |
| container_name = "direct_public_headers", |
| element_plural_name = "public header files", |
| ) |
| |
| def _compilation_context_subject_system_includes(self): |
| """Returns the system include directories as a subject. |
| |
| NOTE: The system includes are the `cc_library.includes` attribute. |
| |
| Args: |
| self: implicitly added |
| |
| Returns: |
| [`CollectionSubject`] of [`str`] |
| """ |
| return subjects.collection( |
| self.actual.system_includes.to_list(), |
| meta = self.meta.derive("includes()"), |
| container_name = "includes", |
| element_plural_name = "include paths", |
| ) |