Implement bp2build for the `license` module
Also, add ExpectedRuleTarget type to simplify bp2build testing
Bug: 190817312
Test: treehugger
Change-Id: Id3a642680d3518d36360ba957919a6fc96222672
diff --git a/bp2build/Android.bp b/bp2build/Android.bp
index 3d9fc5a..8aef66f 100644
--- a/bp2build/Android.bp
+++ b/bp2build/Android.bp
@@ -63,6 +63,7 @@
"java_library_host_conversion_test.go",
"java_plugin_conversion_test.go",
"java_proto_conversion_test.go",
+ "license_conversion_test.go",
"linker_config_conversion_test.go",
"ndk_headers_conversion_test.go",
"performance_test.go",
diff --git a/bp2build/license_conversion_test.go b/bp2build/license_conversion_test.go
new file mode 100644
index 0000000..ea6b27a
--- /dev/null
+++ b/bp2build/license_conversion_test.go
@@ -0,0 +1,81 @@
+// Copyright 2022 Google Inc. 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.
+
+package bp2build
+
+import (
+ "android/soong/android"
+ "testing"
+)
+
+func registerLicenseModuleTypes(_ android.RegistrationContext) {}
+
+func TestLicenseBp2Build(t *testing.T) {
+ tests := []struct {
+ description string
+ module string
+ expected ExpectedRuleTarget
+ }{
+ {
+ description: "license kind and text notice",
+ module: `
+license {
+ name: "my_license",
+ license_kinds: [ "SPDX-license-identifier-Apache-2.0"],
+ license_text: [ "NOTICE"],
+}`,
+ expected: ExpectedRuleTarget{
+ "android_license",
+ "my_license",
+ AttrNameToString{
+ "license_kinds": `["SPDX-license-identifier-Apache-2.0"]`,
+ "license_text": `"NOTICE"`,
+ },
+ android.HostAndDeviceDefault,
+ },
+ },
+ {
+ description: "visibility, package_name, copyright_notice",
+ module: `
+license {
+ name: "my_license",
+ package_name: "my_package",
+ visibility: [":__subpackages__"],
+ copyright_notice: "Copyright © 2022",
+}`,
+ expected: ExpectedRuleTarget{
+ "android_license",
+ "my_license",
+ AttrNameToString{
+ "copyright_notice": `"Copyright © 2022"`,
+ "package_name": `"my_package"`,
+ "visibility": `[":__subpackages__"]`,
+ },
+ android.HostAndDeviceDefault,
+ },
+ },
+ }
+
+ for _, test := range tests {
+ RunBp2BuildTestCase(t,
+ registerLicenseModuleTypes,
+ Bp2buildTestCase{
+ Description: test.description,
+ ModuleTypeUnderTest: "license",
+ ModuleTypeUnderTestFactory: android.LicenseFactory,
+ Blueprint: test.module,
+ ExpectedBazelTargets: []string{test.expected.String()},
+ })
+ }
+}
diff --git a/bp2build/testing.go b/bp2build/testing.go
index ee9200a..edc5c4a 100644
--- a/bp2build/testing.go
+++ b/bp2build/testing.go
@@ -141,7 +141,7 @@
android.FailIfErrored(t, errs)
}
if actualCount, expectedCount := len(bazelTargets), len(tc.ExpectedBazelTargets); actualCount != expectedCount {
- t.Errorf("%s: Expected %d bazel target (%s), got `%d`` (%s)",
+ t.Errorf("%s: Expected %d bazel target (%s), got %d (%s)",
tc.Description, expectedCount, tc.ExpectedBazelTargets, actualCount, bazelTargets)
} else {
for i, target := range bazelTargets {
@@ -452,3 +452,14 @@
func MakeBazelTarget(typ, name string, attrs AttrNameToString) string {
return makeBazelTargetHostOrDevice(typ, name, attrs, android.DeviceSupported)
}
+
+type ExpectedRuleTarget struct {
+ Rule string
+ Name string
+ Attrs AttrNameToString
+ Hod android.HostOrDeviceSupported
+}
+
+func (ebr ExpectedRuleTarget) String() string {
+ return makeBazelTargetHostOrDevice(ebr.Rule, ebr.Name, ebr.Attrs, ebr.Hod)
+}