1*333d2b36SAndroid Build Coastguard Workerpackage android 2*333d2b36SAndroid Build Coastguard Worker 3*333d2b36SAndroid Build Coastguard Workerimport ( 4*333d2b36SAndroid Build Coastguard Worker "testing" 5*333d2b36SAndroid Build Coastguard Worker 6*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 7*333d2b36SAndroid Build Coastguard Worker) 8*333d2b36SAndroid Build Coastguard Worker 9*333d2b36SAndroid Build Coastguard Workervar genNoticeTests = []struct { 10*333d2b36SAndroid Build Coastguard Worker name string 11*333d2b36SAndroid Build Coastguard Worker fs MockFS 12*333d2b36SAndroid Build Coastguard Worker expectedErrors []string 13*333d2b36SAndroid Build Coastguard Worker}{ 14*333d2b36SAndroid Build Coastguard Worker { 15*333d2b36SAndroid Build Coastguard Worker name: "gen_notice must not accept licenses property", 16*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 17*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 18*333d2b36SAndroid Build Coastguard Worker gen_notice { 19*333d2b36SAndroid Build Coastguard Worker name: "top_license", 20*333d2b36SAndroid Build Coastguard Worker licenses: ["other_license"], 21*333d2b36SAndroid Build Coastguard Worker }`), 22*333d2b36SAndroid Build Coastguard Worker }, 23*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 24*333d2b36SAndroid Build Coastguard Worker `not supported on "gen_notice" modules`, 25*333d2b36SAndroid Build Coastguard Worker }, 26*333d2b36SAndroid Build Coastguard Worker }, 27*333d2b36SAndroid Build Coastguard Worker { 28*333d2b36SAndroid Build Coastguard Worker name: "bad gen_notice", 29*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 30*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 31*333d2b36SAndroid Build Coastguard Worker gen_notice { 32*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 33*333d2b36SAndroid Build Coastguard Worker for: ["top_rule"], 34*333d2b36SAndroid Build Coastguard Worker }`), 35*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 36*333d2b36SAndroid Build Coastguard Worker mock_genrule { 37*333d2b36SAndroid Build Coastguard Worker name: "other_rule", 38*333d2b36SAndroid Build Coastguard Worker dep: ["top_notice"], 39*333d2b36SAndroid Build Coastguard Worker }`), 40*333d2b36SAndroid Build Coastguard Worker }, 41*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 42*333d2b36SAndroid Build Coastguard Worker `module "top_notice": for: no "top_rule" module exists`, 43*333d2b36SAndroid Build Coastguard Worker }, 44*333d2b36SAndroid Build Coastguard Worker }, 45*333d2b36SAndroid Build Coastguard Worker { 46*333d2b36SAndroid Build Coastguard Worker name: "doubly bad gen_notice", 47*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 48*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 49*333d2b36SAndroid Build Coastguard Worker gen_notice { 50*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 51*333d2b36SAndroid Build Coastguard Worker for: ["top_rule", "other_rule"], 52*333d2b36SAndroid Build Coastguard Worker }`), 53*333d2b36SAndroid Build Coastguard Worker }, 54*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 55*333d2b36SAndroid Build Coastguard Worker `module "top_notice": for: modules "top_rule", "other_rule" do not exist`, 56*333d2b36SAndroid Build Coastguard Worker }, 57*333d2b36SAndroid Build Coastguard Worker }, 58*333d2b36SAndroid Build Coastguard Worker { 59*333d2b36SAndroid Build Coastguard Worker name: "good gen_notice", 60*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 61*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 62*333d2b36SAndroid Build Coastguard Worker gen_notice { 63*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 64*333d2b36SAndroid Build Coastguard Worker for: ["top_rule"], 65*333d2b36SAndroid Build Coastguard Worker } 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Worker mock_genrule { 68*333d2b36SAndroid Build Coastguard Worker name: "top_rule", 69*333d2b36SAndroid Build Coastguard Worker dep: ["top_notice"], 70*333d2b36SAndroid Build Coastguard Worker }`), 71*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 72*333d2b36SAndroid Build Coastguard Worker mock_genrule { 73*333d2b36SAndroid Build Coastguard Worker name: "other_rule", 74*333d2b36SAndroid Build Coastguard Worker dep: ["top_notice"], 75*333d2b36SAndroid Build Coastguard Worker }`), 76*333d2b36SAndroid Build Coastguard Worker }, 77*333d2b36SAndroid Build Coastguard Worker }, 78*333d2b36SAndroid Build Coastguard Worker { 79*333d2b36SAndroid Build Coastguard Worker name: "multiple license kinds", 80*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 81*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 82*333d2b36SAndroid Build Coastguard Worker gen_notice { 83*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 84*333d2b36SAndroid Build Coastguard Worker for: ["top_rule"], 85*333d2b36SAndroid Build Coastguard Worker } 86*333d2b36SAndroid Build Coastguard Worker 87*333d2b36SAndroid Build Coastguard Worker gen_notice { 88*333d2b36SAndroid Build Coastguard Worker name: "top_html_notice", 89*333d2b36SAndroid Build Coastguard Worker html: true, 90*333d2b36SAndroid Build Coastguard Worker for: ["top_rule"], 91*333d2b36SAndroid Build Coastguard Worker } 92*333d2b36SAndroid Build Coastguard Worker 93*333d2b36SAndroid Build Coastguard Worker gen_notice { 94*333d2b36SAndroid Build Coastguard Worker name: "top_xml_notice", 95*333d2b36SAndroid Build Coastguard Worker xml: true, 96*333d2b36SAndroid Build Coastguard Worker for: ["top_notice"], 97*333d2b36SAndroid Build Coastguard Worker } 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Worker mock_genrule { 100*333d2b36SAndroid Build Coastguard Worker name: "top_rule", 101*333d2b36SAndroid Build Coastguard Worker dep: [ 102*333d2b36SAndroid Build Coastguard Worker "top_notice", 103*333d2b36SAndroid Build Coastguard Worker "top_html_notice", 104*333d2b36SAndroid Build Coastguard Worker "top_xml_notice", 105*333d2b36SAndroid Build Coastguard Worker ], 106*333d2b36SAndroid Build Coastguard Worker }`), 107*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 108*333d2b36SAndroid Build Coastguard Worker mock_genrule { 109*333d2b36SAndroid Build Coastguard Worker name: "other_rule", 110*333d2b36SAndroid Build Coastguard Worker dep: ["top_xml_notice"], 111*333d2b36SAndroid Build Coastguard Worker }`), 112*333d2b36SAndroid Build Coastguard Worker }, 113*333d2b36SAndroid Build Coastguard Worker }, 114*333d2b36SAndroid Build Coastguard Worker} 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Workerfunc TestGenNotice(t *testing.T) { 117*333d2b36SAndroid Build Coastguard Worker for _, test := range genNoticeTests { 118*333d2b36SAndroid Build Coastguard Worker t.Run(test.name, func(t *testing.T) { 119*333d2b36SAndroid Build Coastguard Worker GroupFixturePreparers( 120*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithGenNotice, 121*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 122*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("mock_genrule", newMockGenruleModule) 123*333d2b36SAndroid Build Coastguard Worker }), 124*333d2b36SAndroid Build Coastguard Worker test.fs.AddToFixture(), 125*333d2b36SAndroid Build Coastguard Worker ). 126*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)). 127*333d2b36SAndroid Build Coastguard Worker RunTest(t) 128*333d2b36SAndroid Build Coastguard Worker }) 129*333d2b36SAndroid Build Coastguard Worker } 130*333d2b36SAndroid Build Coastguard Worker} 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Workertype mockGenruleProperties struct { 133*333d2b36SAndroid Build Coastguard Worker Dep []string 134*333d2b36SAndroid Build Coastguard Worker} 135*333d2b36SAndroid Build Coastguard Worker 136*333d2b36SAndroid Build Coastguard Workertype mockGenruleModule struct { 137*333d2b36SAndroid Build Coastguard Worker ModuleBase 138*333d2b36SAndroid Build Coastguard Worker DefaultableModuleBase 139*333d2b36SAndroid Build Coastguard Worker 140*333d2b36SAndroid Build Coastguard Worker properties mockGenruleProperties 141*333d2b36SAndroid Build Coastguard Worker} 142*333d2b36SAndroid Build Coastguard Worker 143*333d2b36SAndroid Build Coastguard Workerfunc newMockGenruleModule() Module { 144*333d2b36SAndroid Build Coastguard Worker m := &mockGenruleModule{} 145*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 146*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon) 147*333d2b36SAndroid Build Coastguard Worker InitDefaultableModule(m) 148*333d2b36SAndroid Build Coastguard Worker return m 149*333d2b36SAndroid Build Coastguard Worker} 150*333d2b36SAndroid Build Coastguard Worker 151*333d2b36SAndroid Build Coastguard Workertype genruleDepTag struct { 152*333d2b36SAndroid Build Coastguard Worker blueprint.BaseDependencyTag 153*333d2b36SAndroid Build Coastguard Worker} 154*333d2b36SAndroid Build Coastguard Worker 155*333d2b36SAndroid Build Coastguard Workerfunc (j *mockGenruleModule) DepsMutator(ctx BottomUpMutatorContext) { 156*333d2b36SAndroid Build Coastguard Worker m, ok := ctx.Module().(Module) 157*333d2b36SAndroid Build Coastguard Worker if !ok { 158*333d2b36SAndroid Build Coastguard Worker return 159*333d2b36SAndroid Build Coastguard Worker } 160*333d2b36SAndroid Build Coastguard Worker ctx.AddDependency(m, genruleDepTag{}, j.properties.Dep...) 161*333d2b36SAndroid Build Coastguard Worker} 162*333d2b36SAndroid Build Coastguard Worker 163*333d2b36SAndroid Build Coastguard Workerfunc (p *mockGenruleModule) GenerateAndroidBuildActions(ModuleContext) { 164*333d2b36SAndroid Build Coastguard Worker} 165