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