| # Copyright 2018 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. |
| """Helpers to create golden tests, to minimize code duplication.""" |
| |
| def _compile_time_jars(ctx): |
| jars = depset([], transitive = [dep[JavaInfo].transitive_compile_time_jars for dep in ctx.attr.deps]) |
| return [DefaultInfo( |
| files = jars, |
| runfiles = ctx.runfiles(transitive_files = jars), |
| )] |
| |
| compile_time_jars = rule( |
| attrs = { |
| "deps": attr.label_list(providers = [JavaInfo]), |
| }, |
| implementation = _compile_time_jars, |
| ) |
| |
| def create_golden_test( |
| name, |
| golden_output_file, |
| golden_stderr_file, |
| expect_errors, |
| checking_mode, |
| has_bootclasspath, |
| testdata_pkg, |
| import_deps_checker, |
| rt_jar, |
| missing_jar = None, |
| replacing_jar = None, |
| direct_jars = [], |
| check_missing = False): |
| """Create a golden test for the dependency checker.""" |
| all_dep_jars = [ |
| "testdata_client", |
| "testdata_lib_Library", |
| "testdata_lib_LibraryAnnotations", |
| "testdata_lib_LibraryException", |
| "testdata_lib_LibraryInterface", |
| ] |
| client_jar = testdata_pkg + ":testdata_client" |
| data = [ |
| golden_output_file, |
| golden_stderr_file, |
| import_deps_checker, |
| rt_jar, |
| ":DumpProto", |
| ] + [testdata_pkg + ":" + x for x in all_dep_jars] |
| if (replacing_jar): |
| data.append(testdata_pkg + ":" + replacing_jar) |
| |
| args = [ |
| "$(location %s)" % golden_output_file, |
| "$(location %s)" % golden_stderr_file, |
| # The exit code 199 means the checker emits errors on dependency issues. |
| "199" if expect_errors else "0", |
| "$(location :DumpProto)", |
| "$(location %s)" % import_deps_checker, |
| "--checking_mode=%s" % checking_mode, |
| "--check_missing_members=%s" % ("true" if check_missing else "false"), |
| ] |
| args.append("--bootclasspath_entry") |
| if has_bootclasspath: |
| args.append("$(location %s)" % rt_jar) |
| else: |
| args.append("$(location %s)" % client_jar) # Fake bootclasspath. |
| |
| for dep in all_dep_jars: |
| if dep == missing_jar: |
| if replacing_jar: |
| args.append("--classpath_entry") |
| args.append("$(location %s:%s)" % (testdata_pkg, replacing_jar)) |
| continue |
| args.append("--classpath_entry") |
| args.append("$(location %s:%s)" % (testdata_pkg, dep)) |
| |
| for dep in direct_jars: |
| args.append("--directdep") |
| args.append("$(location %s:%s)" % (testdata_pkg, dep)) |
| |
| args = args + [ |
| "--input", |
| "$(location %s:testdata_client)" % testdata_pkg, |
| ] |
| |
| args.append("--rule_label=:%s" % name) |
| |
| native.sh_test( |
| name = name, |
| srcs = ["golden_test.sh"], |
| args = args, |
| data = data, |
| ) |