Files
build_soong/android/gen_notice_test.go
Bob Badour 919855091c Add gen_notice module.
Refactor notices to support notices for multiple modules.

Enforce visibility and handle missing dependencies.

Test: m cts dist reportmissinglicenses

Test: m droid dist

Bug: 213388645
Bug: 240342946

Change-Id: Id6a81987f087419ad37d0cce57a71e8a7c4cd6e0
Merged-in: Id6a81987f087419ad37d0cce57a71e8a7c4cd6e0
Merged-in: I07963c83eaddfe363a04871e813b56fe7f1465ad
Merged-in: Ib2f8d0ad46ffe795d392166a74a7c6309b1246e2
Merged-in: I1d630c3d14d27b7605ab13d204d34b6851a24d33
2022-08-03 14:02:33 -07:00

165 lines
3.2 KiB
Go

package android
import (
"testing"
"github.com/google/blueprint"
)
var genNoticeTests = []struct {
name string
fs MockFS
expectedErrors []string
}{
{
name: "gen_notice must not accept licenses property",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_license",
licenses: ["other_license"],
}`),
},
expectedErrors: []string{
`unrecognized property "licenses"`,
},
},
{
name: "bad gen_notice",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_notice",
for: ["top_rule"],
}`),
"other/Android.bp": []byte(`
mock_genrule {
name: "other_rule",
dep: ["top_notice"],
}`),
},
expectedErrors: []string{
`module "top_notice": for: no "top_rule" module exists`,
},
},
{
name: "doubly bad gen_notice",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_notice",
for: ["top_rule", "other_rule"],
}`),
},
expectedErrors: []string{
`module "top_notice": for: modules "top_rule", "other_rule" do not exist`,
},
},
{
name: "good gen_notice",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_notice",
for: ["top_rule"],
}
mock_genrule {
name: "top_rule",
dep: ["top_notice"],
}`),
"other/Android.bp": []byte(`
mock_genrule {
name: "other_rule",
dep: ["top_notice"],
}`),
},
},
{
name: "multiple license kinds",
fs: map[string][]byte{
"top/Android.bp": []byte(`
gen_notice {
name: "top_notice",
for: ["top_rule"],
}
gen_notice {
name: "top_html_notice",
html: true,
for: ["top_rule"],
}
gen_notice {
name: "top_xml_notice",
xml: true,
for: ["top_notice"],
}
mock_genrule {
name: "top_rule",
dep: [
"top_notice",
"top_html_notice",
"top_xml_notice",
],
}`),
"other/Android.bp": []byte(`
mock_genrule {
name: "other_rule",
dep: ["top_xml_notice"],
}`),
},
},
}
func TestGenNotice(t *testing.T) {
for _, test := range genNoticeTests {
t.Run(test.name, func(t *testing.T) {
GroupFixturePreparers(
PrepareForTestWithGenNotice,
FixtureRegisterWithContext(func(ctx RegistrationContext) {
ctx.RegisterModuleType("mock_genrule", newMockGenruleModule)
}),
test.fs.AddToFixture(),
).
ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
RunTest(t)
})
}
}
type mockGenruleProperties struct {
Dep []string
}
type mockGenruleModule struct {
ModuleBase
DefaultableModuleBase
properties mockGenruleProperties
}
func newMockGenruleModule() Module {
m := &mockGenruleModule{}
m.AddProperties(&m.properties)
InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon)
InitDefaultableModule(m)
return m
}
type genruleDepTag struct {
blueprint.BaseDependencyTag
}
func (j *mockGenruleModule) DepsMutator(ctx BottomUpMutatorContext) {
m, ok := ctx.Module().(Module)
if !ok {
return
}
ctx.AddDependency(m, genruleDepTag{}, j.properties.Dep...)
}
func (p *mockGenruleModule) GenerateAndroidBuildActions(ModuleContext) {
}