| # Copyright 2020 Google LLC |
| # |
| # 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. |
| |
| """Compare rule output to a golden version.""" |
| |
| def golden_test( |
| name, |
| golden, |
| subject): |
| """Check that output from a rule matches the expected output. |
| |
| Args: |
| name: test name |
| golden: expected content of subect |
| subject: build target |
| """ |
| native.sh_test( |
| name = name, |
| size = "medium", |
| srcs = ["@rules_license//tools:diff_test.sh"], |
| args = [ |
| "$(location %s)" % golden, |
| "$(location %s)" % subject, |
| ], |
| data = [ |
| subject, |
| golden, |
| ], |
| ) |
| |
| def golden_cmd_test( |
| name, |
| cmd, |
| golden, # Required |
| toolchains = [], |
| tools = None, |
| exec_tools = None, |
| srcs = [], # Optional |
| **kwargs): # Rest |
| """Compares cmd output to golden output, passes if they are identical. |
| |
| Args: |
| name: Name of the build rule. |
| cmd: The command to run to generate output. |
| golden: The golden file to be compared. |
| toolchains: List of toolchains needed to run the command, passed to genrule. |
| tools: List of tools needed to run the command, passed to genrule. |
| exec_tools: List of tools needed to run the command, passed to genrule. |
| srcs: List of sources needed as input to the command, passed to genrule. |
| **kwargs: Any additional parameters for the generated golden_test. |
| """ |
| actual = name + ".output" |
| |
| # There are some cases where tools are provided and exec_tools are provided. |
| # Specifying both in the same genrule, confuses the host vs exec rules, |
| # which prevents python3 from execution. |
| if tools and exec_tools: |
| fail("Only set one: tools or exec_tools. " + |
| "Setting both confuses python execution mode (host vs exec).") |
| native.genrule( |
| name = name + "_output", |
| srcs = srcs, |
| outs = [actual], |
| cmd = cmd + " > '$@'", # Redirect to collect output |
| toolchains = toolchains, |
| tools = tools, |
| exec_tools = exec_tools, |
| testonly = True, |
| ) |
| |
| golden_test( |
| name = name, |
| subject = actual, |
| golden = golden, |
| **kwargs |
| ) |