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) { }