# 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 )