4660a9824c
Most exempt module types have no output. Support exempt module types with output by requiring they must be 0p and have no license metadata. Disallow `licenses: []` property on gen_notice. Test: m cts dist Change-Id: Ic992bd6420fa6898495866eac43495002ef4b6c8 Merged-in: Ic992bd6420fa6898495866eac43495002ef4b6c8
164 lines
3.2 KiB
Go
164 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{
|
|
`not supported on "gen_notice" modules`,
|
|
},
|
|
},
|
|
{
|
|
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) {
|
|
}
|