aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Aiuto <aiuto@google.com>2023-02-07 00:50:29 -0500
committerTony Aiuto <aiuto@google.com>2023-02-07 00:50:29 -0500
commitd87630d1e51e91f2df3b4f95fdef6cd97f12e3de (patch)
treee9202e4235f7da04b001845a6ac4515f0e7caa37
parentd08c88cc9e127f2bef4bcd052de4de25b69183ff (diff)
downloadbazelbuild-rules_license-d87630d1e51e91f2df3b4f95fdef6cd97f12e3de.tar.gz
Replace golden file tests with ones based on the structure of the tests
Change the test helper library to use path suffixes rather than complete paths so it is immune to relocating the code if you vendor it in.
-rw-r--r--examples/src/server_report.golden3
-rw-r--r--examples/vendor/constant_gen/BUILD23
-rw-r--r--examples/vendor/constant_gen/generated_code_licenses.golden41
-rw-r--r--examples/vendor/constant_gen/generator_licenses.golden34
-rw-r--r--examples/vendor/constant_gen/verify_licenses_test.py42
-rw-r--r--tests/BUILD22
-rwxr-xr-xtests/hello_cc_copyrights.golden3
-rwxr-xr-xtests/hello_java_copyrights.golden2
-rw-r--r--tests/hello_licenses_test.py13
-rw-r--r--tests/license_test_utils.py34
10 files changed, 93 insertions, 124 deletions
diff --git a/examples/src/server_report.golden b/examples/src/server_report.golden
deleted file mode 100644
index 8be07a0..0000000
--- a/examples/src/server_report.golden
+++ /dev/null
@@ -1,3 +0,0 @@
-= //examples/vendor/constant_gen:license_for_emitted_code
- kind: @//examples/my_org/licenses:unencumbered
- conditions: []
diff --git a/examples/vendor/constant_gen/BUILD b/examples/vendor/constant_gen/BUILD
index e70f489..26e86b6 100644
--- a/examples/vendor/constant_gen/BUILD
+++ b/examples/vendor/constant_gen/BUILD
@@ -14,7 +14,6 @@
# An example of a code generator with a distinct license for the generated code.
load("@rules_license//rules:compliance.bzl", "licenses_used")
-load("@rules_license//tools:test_helpers.bzl", "golden_test")
load("@rules_license//rules:license.bzl", "license")
load(":defs.bzl", "constant_gen")
@@ -63,21 +62,21 @@ licenses_used(
deps = [":constant_generator"],
)
-golden_test(
- name = "verify_generator_licenses",
- golden = "generator_licenses.golden",
- subject = ":generator_licenses.json",
-)
-
licenses_used(
name = "generated_code_licenses",
# Note: using default output file name
deps = [":libhello"],
)
-golden_test(
- name = "verify_generated_code_licenses",
- golden = "generated_code_licenses.golden",
- subject = ":generated_code_licenses.json",
+py_test(
+ name = "verify_licenses_test",
+ srcs = ["verify_licenses_test.py"],
+ data = [
+ ":generator_licenses.json",
+ ":generated_code_licenses.json",
+ ],
+ python_version = "PY3",
+ deps = [
+ "//tests:license_test_utils",
+ ],
)
-
diff --git a/examples/vendor/constant_gen/generated_code_licenses.golden b/examples/vendor/constant_gen/generated_code_licenses.golden
deleted file mode 100644
index c4c8ef1..0000000
--- a/examples/vendor/constant_gen/generated_code_licenses.golden
+++ /dev/null
@@ -1,41 +0,0 @@
-[
- {
- "top_level_target": "//examples/vendor/constant_gen:libhello",
- "dependencies": [
- {
- "target_under_license": "//examples/vendor/constant_gen:libhello",
- "licenses": [
- "//examples/vendor/constant_gen:license_for_emitted_code"
- ]
- },
- {
- "target_under_license": "//examples/vendor/constant_gen:libhello_src_",
- "licenses": [
- "//examples/vendor/constant_gen:license_for_emitted_code"
- ]
- }
- ],
- "licenses": [
- {
- "label": "//examples/vendor/constant_gen:license_for_emitted_code",
- "rule": "//examples/vendor/constant_gen:license_for_emitted_code",
- "license_kinds": [
- {
- "target": "@//examples/my_org/licenses:unencumbered",
- "name": "unencumbered",
- "conditions": []
- }
- ],
- "copyright_notice": "",
- "package_name": "Trivial Code Generator Output",
- "package_url": "",
- "package_version": "",
- "license_text": "examples/vendor/constant_gen/LICENSE.on_output",
- "used_by": [
- "//examples/vendor/constant_gen:libhello",
- "//examples/vendor/constant_gen:libhello_src_"
- ]
- }
- ]
- }
-]
diff --git a/examples/vendor/constant_gen/generator_licenses.golden b/examples/vendor/constant_gen/generator_licenses.golden
deleted file mode 100644
index 4b2f175..0000000
--- a/examples/vendor/constant_gen/generator_licenses.golden
+++ /dev/null
@@ -1,34 +0,0 @@
-[
- {
- "top_level_target": "//examples/vendor/constant_gen:constant_generator",
- "dependencies": [
- {
- "target_under_license": "//examples/vendor/constant_gen:constant_generator",
- "licenses": [
- "//examples/vendor/constant_gen:license"
- ]
- }
- ],
- "licenses": [
- {
- "label": "//examples/vendor/constant_gen:license",
- "rule": "//examples/vendor/constant_gen:license",
- "license_kinds": [
- {
- "target": "@//examples/my_org/licenses:generic_restricted",
- "name": "generic_restricted",
- "conditions": ["restricted"]
- }
- ],
- "copyright_notice": "",
- "package_name": "Trivial Code Generator",
- "package_url": "",
- "package_version": "",
- "license_text": "examples/vendor/constant_gen/LICENSE",
- "used_by": [
- "//examples/vendor/constant_gen:constant_generator"
- ]
- }
- ]
- }
-]
diff --git a/examples/vendor/constant_gen/verify_licenses_test.py b/examples/vendor/constant_gen/verify_licenses_test.py
new file mode 100644
index 0000000..a3eb847
--- /dev/null
+++ b/examples/vendor/constant_gen/verify_licenses_test.py
@@ -0,0 +1,42 @@
+"""Test that we see the expected licenses for some generated code."""
+
+import codecs
+import os
+
+import unittest
+from tests import license_test_utils
+
+class VerifyLicensesTest(unittest.TestCase):
+
+ def test_generater_license(self):
+ package_base = license_test_utils.LICENSE_PACKAGE_BASE
+ licenses_info = license_test_utils.load_licenses_info(
+ os.path.join(os.path.dirname(__file__), "generator_licenses.json"))
+
+ expected = {
+ "examples/vendor/constant_gen:constant_generator": [
+ "examples/vendor/constant_gen:license"
+ ],
+ }
+ license_test_utils.check_licenses_of_dependencies(
+ self, licenses_info, expected)
+
+ def test_generated_code_license(self):
+ package_base = license_test_utils.LICENSE_PACKAGE_BASE
+ licenses_info = license_test_utils.load_licenses_info(
+ os.path.join(os.path.dirname(__file__), "generated_code_licenses.json"))
+
+ expected = {
+ "examples/vendor/constant_gen:libhello": [
+ "/constant_gen:license_for_emitted_code",
+ ],
+ "examples/vendor/constant_gen:libhello_src_": [
+ "/constant_gen:license_for_emitted_code",
+ ],
+ }
+ license_test_utils.check_licenses_of_dependencies(
+ self, licenses_info, expected)
+
+if __name__ == "__main__":
+ unittest.main()
+
diff --git a/tests/BUILD b/tests/BUILD
index 10b8560..1d7961f 100644
--- a/tests/BUILD
+++ b/tests/BUILD
@@ -1,6 +1,5 @@
# Test cases for license rules.
-load("@rules_license//tools:test_helpers.bzl", "golden_test")
load("@rules_license//rules:compliance.bzl", "check_license", "licenses_used")
load("@rules_license//rules:license.bzl", "license")
load("@rules_license//rules:license_kind.bzl", "license_kind")
@@ -119,7 +118,10 @@ licenses_used(
py_test(
name = "hello_licenses_test",
srcs = ["hello_licenses_test.py"],
- data = [":hello_licenses.json"],
+ data = [
+ ":hello_licenses.json",
+ ":hello_cc_copyrights.txt",
+ ],
python_version = "PY3",
deps = [
":license_test_utils",
@@ -142,19 +144,3 @@ check_license(
":hello_java",
],
)
-
-golden_test(
- name = "verify_cc_app_test",
- golden = "hello_cc_copyrights.golden",
- subject = ":hello_cc_copyrights.txt",
-)
-
-golden_test(
- name = "verify_java_app_test",
- golden = "hello_java_copyrights.golden",
- subject = ":hello_java_copyrights.txt",
-)
-
-exports_files([
- "hello_licenses.golden",
-])
diff --git a/tests/hello_cc_copyrights.golden b/tests/hello_cc_copyrights.golden
deleted file mode 100755
index 38f67ad..0000000
--- a/tests/hello_cc_copyrights.golden
+++ /dev/null
@@ -1,3 +0,0 @@
-package(A test case package/0.0.4), copyright(Copyright © 2019 Uncle Toasty)
-package(A test case package), copyright()
-
diff --git a/tests/hello_java_copyrights.golden b/tests/hello_java_copyrights.golden
deleted file mode 100755
index 0ba7362..0000000
--- a/tests/hello_java_copyrights.golden
+++ /dev/null
@@ -1,2 +0,0 @@
-package(A test case package/0.0.4), copyright(Copyright © 2019 Uncle Toasty)
-package(A test case package), copyright()
diff --git a/tests/hello_licenses_test.py b/tests/hello_licenses_test.py
index 465688f..adfe92b 100644
--- a/tests/hello_licenses_test.py
+++ b/tests/hello_licenses_test.py
@@ -1,5 +1,6 @@
"""Tests for google3.tools.build_defs.license.tests.hello_licenses."""
+import codecs
import os
import unittest
@@ -29,6 +30,18 @@ class HelloLicensesTest(unittest.TestCase):
license_test_utils.check_licenses_of_dependencies(
self, licenses_info, expected)
+ def test_has_expected_copyrights(self):
+ copyrights_file = os.path.join(os.path.dirname(__file__),
+ "hello_cc_copyrights.txt")
+ with codecs.open(copyrights_file, encoding="utf-8") as inp:
+ copyrights = inp.read().split('\n')
+ self.assertIn(
+ "package(A test case package/0.0.4), copyright(Copyright © 2019 Uncle Toasty)",
+ copyrights)
+ self.assertIn(
+ "package(A test case package), copyright()",
+ copyrights)
+
if __name__ == "__main__":
unittest.main()
diff --git a/tests/license_test_utils.py b/tests/license_test_utils.py
index 2c5a18a..cc29e59 100644
--- a/tests/license_test_utils.py
+++ b/tests/license_test_utils.py
@@ -3,7 +3,6 @@
import codecs
import json
-
# This is extracted out to make it easier to keep test equivalence between
# the OSS version and Google.
LICENSE_PACKAGE_BASE = "/"
@@ -52,21 +51,34 @@ def check_licenses_of_dependencies(test_case, licenses_info, expected,
Args:
test_case: (TestCase) the test.
licenses_info: (dict) licenses info.
- expected: (dict) map of target names to the licenses they are under. Names
- must be relative to the licenses package, not absolute.
+ expected: (dict) map of target name suffixes to the licenses they are under.
path_prefix: (str) prefix to prepend to targets and licenses in expected.
This turns the relative target names to absolute ones.
"""
# Turn the list of deps into a dict by target for easier comparison.
- print(licenses_info)
deps_to_licenses = {
- x["target_under_license"].lstrip('@'): set(l.strip('@') for l in x["licenses"])
+ x["target_under_license"].lstrip("@"): set(l.strip("@") for l in x["licenses"])
for x in licenses_info[0]["dependencies"]}
- print(deps_to_licenses)
- for target, licenses in expected.items():
- got_licenses = set(deps_to_licenses[path_prefix + target])
- for lic in licenses:
- test_case.assertIn(path_prefix + lic, got_licenses)
- # future: Maybe check that deps is not larger than expected.
+ target_names = ",".join(deps_to_licenses.keys())
+ # This is n**2, but N is typically < 3 or we are doing this wrong.
+ for want_target, want_licenses in expected.items():
+ found_target = False
+ for got_target, got_licenses in deps_to_licenses.items():
+ if got_target.endswith(want_target):
+ found_target = True
+ test_case.assertEqual(len(want_licenses), len(got_licenses))
+ found_license = False
+ for want_l in want_licenses:
+ for got_l in got_licenses:
+ if got_l.endswith(want_l):
+ found_license = True
+ break
+ test_case.assertTrue(
+ found_license,
+ msg="license (%s) not a suffix in %s" % (want_l, got_licenses))
+ break
+ test_case.assertTrue(
+ found_target,
+ msg="target (%s) not a suffix in [%s]" % (want_target, target_names))