@@ -17,6 +17,7 @@ This module contains a test suite for testing jvm_import
1717"""
1818
1919load ("@bazel_skylib//lib:unittest.bzl" , "analysistest" , "asserts" )
20+ load ("@package_metadata//providers:package_metadata_info.bzl" , "PackageMetadataInfo" )
2021load ("@rules_license//rules:gather_metadata.bzl" , "gather_metadata_info" )
2122load ("@rules_license//rules:providers.bzl" , "PackageInfo" )
2223load ("@rules_license//rules_gathering:gathering_providers.bzl" , "TransitiveMetadataInfo" )
@@ -28,6 +29,13 @@ TagsInfo = provider(
2829 },
2930)
3031
32+ PackageMetadataInfoCollectionInfo = provider (
33+ doc = "Provider to propagate jvm_import's applicable_licenses for testing purposes" ,
34+ fields = {
35+ "info" : "A PackageMetadataInfo provider from jvm_import's applicable_licenses for testing purposes" ,
36+ },
37+ )
38+
3139def _tags_propagator_impl (target , ctx ):
3240 tags = getattr (ctx .rule .attr , "tags" )
3341 return TagsInfo (tags = tags )
@@ -38,6 +46,30 @@ tags_propagator = aspect(
3846 implementation = _tags_propagator_impl ,
3947)
4048
49+ def _package_metadata_info_propagator_impl (target , ctx ):
50+ direct = getattr (ctx .rule .attr , "package_metadata" , None )
51+ if not direct :
52+ direct = getattr (ctx .rule .attr , "applicable_licenses" )
53+
54+ infos = [t [PackageMetadataInfo ] for t in direct if PackageMetadataInfo in t ]
55+ for t in direct :
56+ if PackageMetadataInfo not in t :
57+ continue
58+
59+ return [
60+ PackageMetadataInfoCollectionInfo (
61+ info = t [PackageMetadataInfo ],
62+ ),
63+ ]
64+
65+ return []
66+
67+ package_metadata_info_propagator = aspect (
68+ doc = "Aspect that propagates applicable_licenses to help with testing jvm_import" ,
69+ attr_aspects = [],
70+ implementation = _package_metadata_info_propagator_impl ,
71+ )
72+
4173def _does_jvm_import_have_tags_impl (ctx ):
4274 env = analysistest .begin (ctx )
4375
@@ -62,6 +94,26 @@ does_jvm_import_have_tags_test = analysistest.make(
6294 },
6395)
6496
97+ def _does_jvm_import_have_applicable_licenses_impl (ctx ):
98+ env = analysistest .begin (ctx )
99+
100+ asserts .true (env , PackageMetadataInfoCollectionInfo in ctx .attr .src )
101+ info = ctx .attr .src [PackageMetadataInfoCollectionInfo ]
102+ asserts .true (env , info .info )
103+
104+ return analysistest .end (env )
105+
106+ does_jvm_import_have_applicable_licenses_test = analysistest .make (
107+ _does_jvm_import_have_applicable_licenses_impl ,
108+ attrs = {
109+ "src" : attr .label (
110+ doc = "Target to traverse for applicable_licenses" ,
111+ aspects = [package_metadata_info_propagator ],
112+ mandatory = True ,
113+ ),
114+ },
115+ )
116+
65117def _does_jvm_import_export_a_package_provider_impl (ctx ):
66118 env = analysistest .begin (ctx )
67119
@@ -116,6 +168,11 @@ def jvm_import_test_suite(name):
116168 target_under_test = "@jvm_import_test//:com_google_code_findbugs_jsr305_3_0_2" ,
117169 src = "@jvm_import_test//:com_google_code_findbugs_jsr305_3_0_2" ,
118170 )
171+ does_jvm_import_have_applicable_licenses_test (
172+ name = "does_jvm_import_have_applicable_licenses_test" ,
173+ target_under_test = "@jvm_import_test//:com_google_code_findbugs_jsr305_3_0_2" ,
174+ src = "@jvm_import_test//:com_google_code_findbugs_jsr305_3_0_2" ,
175+ )
119176 does_jvm_import_export_a_package_provider_test (
120177 name = "does_jvm_import_export_a_package_provider" ,
121178 target_under_test = "@jvm_import_test//:com_google_code_findbugs_jsr305" ,
0 commit comments