| # Copyright 2023 The Pigweed Authors |
| # |
| # 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 |
| # |
| # https://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. |
| |
| # Generate metadata for tests. |
| # |
| # Various types of tests may use this template to create metadata used to |
| # describe those tests. All entries will have the following form: |
| # |
| # { |
| # "build_label": <GN source-absolute label>, |
| # "test_name": <Name of test>, |
| # "test_type": <Type of test>, |
| # ... |
| # } |
| # |
| # where "..." may represent additional, type-specific details. |
| # |
| # Args: |
| # - test_type (required): String describing the type of test. One of: |
| # "test_group" |
| # "unit_test" |
| # "action_test" |
| # "perf_test" |
| # "fuzz_test" |
| # - test_name (optional): Name of the test as a string. Defaults to the |
| # target name. |
| # - build_label (optional): GN label for the test being described. Defaults to |
| # the source-absolute label corresponding to `test_name`. |
| # - extra_metadata (optional): Scope that defines additional metadata to |
| # include for this test. Variables defined in the scope will be included |
| # directly in the metadata, and thus should not be named "build_label", |
| # "test_name", or "test_type". |
| template("pw_test_info") { |
| assert(defined(invoker.test_type), |
| "`pw_test_info($target_name)` is missing `test_type`") |
| _type = invoker.test_type |
| |
| if (defined(invoker.test_name)) { |
| _name = invoker.test_name |
| } else { |
| _name = get_label_info(target_name, "name") |
| } |
| |
| if (defined(invoker.build_label)) { |
| _label = invoker.build_label |
| } else { |
| _label = _name |
| } |
| |
| _metadata = { |
| # Include the extra metadata first, so any name collisions trigger errors. |
| forward_variables_from(invoker.extra_metadata, "*") |
| build_label = get_label_info(":$_label", "label_no_toolchain") |
| test_name = _name |
| test_type = _type |
| if (defined(invoker.tags) && invoker.tags != []) { |
| tags = invoker.tags |
| } |
| } |
| |
| group(target_name) { |
| forward_variables_from(invoker, [ "testonly" ]) |
| if (_type == "test_group") { |
| metadata = { |
| test_groups = [ _metadata ] |
| } |
| forward_variables_from(invoker, [ "deps" ]) |
| } else if (_type == "unit_test") { |
| metadata = { |
| unit_tests = [ _metadata ] |
| } |
| } else if (_type == "action_test") { |
| metadata = { |
| action_tests = [ _metadata ] |
| } |
| } else if (_type == "perf_test") { |
| metadata = { |
| perf_tests = [ _metadata ] |
| } |
| } else if (_type == "fuzz_test") { |
| metadata = { |
| fuzz_tests = [ _metadata ] |
| } |
| } else { |
| assert( |
| false, |
| "pw_test_info($target_name) does not have a valid `test_type`: $_type") |
| } |
| } |
| } |