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 licenseKindTests = []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: "license_kind 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 license_kind { 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 `top/Android.bp:4:14: unrecognized property "licenses"`, 25*333d2b36SAndroid Build Coastguard Worker }, 26*333d2b36SAndroid Build Coastguard Worker }, 27*333d2b36SAndroid Build Coastguard Worker { 28*333d2b36SAndroid Build Coastguard Worker name: "bad license_kind", 29*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 30*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 31*333d2b36SAndroid Build Coastguard Worker license_kind { 32*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 33*333d2b36SAndroid Build Coastguard Worker conditions: ["notice"], 34*333d2b36SAndroid Build Coastguard Worker }`), 35*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 36*333d2b36SAndroid Build Coastguard Worker mock_license { 37*333d2b36SAndroid Build Coastguard Worker name: "other_notice", 38*333d2b36SAndroid Build Coastguard Worker license_kinds: ["notice"], 39*333d2b36SAndroid Build Coastguard Worker }`), 40*333d2b36SAndroid Build Coastguard Worker }, 41*333d2b36SAndroid Build Coastguard Worker expectedErrors: []string{ 42*333d2b36SAndroid Build Coastguard Worker `other/Android.bp:2:5: "other_notice" depends on undefined module "notice"`, 43*333d2b36SAndroid Build Coastguard Worker }, 44*333d2b36SAndroid Build Coastguard Worker }, 45*333d2b36SAndroid Build Coastguard Worker { 46*333d2b36SAndroid Build Coastguard Worker name: "good license kind", 47*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 48*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 49*333d2b36SAndroid Build Coastguard Worker license_kind { 50*333d2b36SAndroid Build Coastguard Worker name: "top_by_exception_only", 51*333d2b36SAndroid Build Coastguard Worker conditions: ["by_exception_only"], 52*333d2b36SAndroid Build Coastguard Worker } 53*333d2b36SAndroid Build Coastguard Worker 54*333d2b36SAndroid Build Coastguard Worker mock_license { 55*333d2b36SAndroid Build Coastguard Worker name: "top_proprietary", 56*333d2b36SAndroid Build Coastguard Worker license_kinds: ["top_by_exception_only"], 57*333d2b36SAndroid Build Coastguard Worker }`), 58*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 59*333d2b36SAndroid Build Coastguard Worker mock_license { 60*333d2b36SAndroid Build Coastguard Worker name: "other_proprietary", 61*333d2b36SAndroid Build Coastguard Worker license_kinds: ["top_proprietary"], 62*333d2b36SAndroid Build Coastguard Worker }`), 63*333d2b36SAndroid Build Coastguard Worker }, 64*333d2b36SAndroid Build Coastguard Worker }, 65*333d2b36SAndroid Build Coastguard Worker { 66*333d2b36SAndroid Build Coastguard Worker name: "multiple license kinds", 67*333d2b36SAndroid Build Coastguard Worker fs: map[string][]byte{ 68*333d2b36SAndroid Build Coastguard Worker "top/Android.bp": []byte(` 69*333d2b36SAndroid Build Coastguard Worker license_kind { 70*333d2b36SAndroid Build Coastguard Worker name: "top_notice", 71*333d2b36SAndroid Build Coastguard Worker conditions: ["notice"], 72*333d2b36SAndroid Build Coastguard Worker } 73*333d2b36SAndroid Build Coastguard Worker 74*333d2b36SAndroid Build Coastguard Worker license_kind { 75*333d2b36SAndroid Build Coastguard Worker name: "top_by_exception_only", 76*333d2b36SAndroid Build Coastguard Worker conditions: ["by_exception_only"], 77*333d2b36SAndroid Build Coastguard Worker } 78*333d2b36SAndroid Build Coastguard Worker 79*333d2b36SAndroid Build Coastguard Worker mock_license { 80*333d2b36SAndroid Build Coastguard Worker name: "top_allowed_as_notice", 81*333d2b36SAndroid Build Coastguard Worker license_kinds: ["top_notice"], 82*333d2b36SAndroid Build Coastguard Worker } 83*333d2b36SAndroid Build Coastguard Worker 84*333d2b36SAndroid Build Coastguard Worker mock_license { 85*333d2b36SAndroid Build Coastguard Worker name: "top_proprietary", 86*333d2b36SAndroid Build Coastguard Worker license_kinds: ["top_by_exception_only"], 87*333d2b36SAndroid Build Coastguard Worker }`), 88*333d2b36SAndroid Build Coastguard Worker "other/Android.bp": []byte(` 89*333d2b36SAndroid Build Coastguard Worker mock_license { 90*333d2b36SAndroid Build Coastguard Worker name: "other_rule", 91*333d2b36SAndroid Build Coastguard Worker license_kinds: ["top_by_exception_only"], 92*333d2b36SAndroid Build Coastguard Worker }`), 93*333d2b36SAndroid Build Coastguard Worker }, 94*333d2b36SAndroid Build Coastguard Worker }, 95*333d2b36SAndroid Build Coastguard Worker} 96*333d2b36SAndroid Build Coastguard Worker 97*333d2b36SAndroid Build Coastguard Workerfunc TestLicenseKind(t *testing.T) { 98*333d2b36SAndroid Build Coastguard Worker for _, test := range licenseKindTests { 99*333d2b36SAndroid Build Coastguard Worker t.Run(test.name, func(t *testing.T) { 100*333d2b36SAndroid Build Coastguard Worker GroupFixturePreparers( 101*333d2b36SAndroid Build Coastguard Worker prepareForLicenseTest, 102*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 103*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("mock_license", newMockLicenseModule) 104*333d2b36SAndroid Build Coastguard Worker }), 105*333d2b36SAndroid Build Coastguard Worker test.fs.AddToFixture(), 106*333d2b36SAndroid Build Coastguard Worker ). 107*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)). 108*333d2b36SAndroid Build Coastguard Worker RunTest(t) 109*333d2b36SAndroid Build Coastguard Worker }) 110*333d2b36SAndroid Build Coastguard Worker } 111*333d2b36SAndroid Build Coastguard Worker} 112*333d2b36SAndroid Build Coastguard Worker 113*333d2b36SAndroid Build Coastguard Workertype mockLicenseProperties struct { 114*333d2b36SAndroid Build Coastguard Worker License_kinds []string 115*333d2b36SAndroid Build Coastguard Worker} 116*333d2b36SAndroid Build Coastguard Worker 117*333d2b36SAndroid Build Coastguard Workertype mockLicenseModule struct { 118*333d2b36SAndroid Build Coastguard Worker ModuleBase 119*333d2b36SAndroid Build Coastguard Worker DefaultableModuleBase 120*333d2b36SAndroid Build Coastguard Worker 121*333d2b36SAndroid Build Coastguard Worker properties mockLicenseProperties 122*333d2b36SAndroid Build Coastguard Worker} 123*333d2b36SAndroid Build Coastguard Worker 124*333d2b36SAndroid Build Coastguard Workerfunc newMockLicenseModule() Module { 125*333d2b36SAndroid Build Coastguard Worker m := &mockLicenseModule{} 126*333d2b36SAndroid Build Coastguard Worker m.AddProperties(&m.properties) 127*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon) 128*333d2b36SAndroid Build Coastguard Worker InitDefaultableModule(m) 129*333d2b36SAndroid Build Coastguard Worker return m 130*333d2b36SAndroid Build Coastguard Worker} 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Workertype licensekindTag struct { 133*333d2b36SAndroid Build Coastguard Worker blueprint.BaseDependencyTag 134*333d2b36SAndroid Build Coastguard Worker} 135*333d2b36SAndroid Build Coastguard Worker 136*333d2b36SAndroid Build Coastguard Workerfunc (j *mockLicenseModule) DepsMutator(ctx BottomUpMutatorContext) { 137*333d2b36SAndroid Build Coastguard Worker m, ok := ctx.Module().(Module) 138*333d2b36SAndroid Build Coastguard Worker if !ok { 139*333d2b36SAndroid Build Coastguard Worker return 140*333d2b36SAndroid Build Coastguard Worker } 141*333d2b36SAndroid Build Coastguard Worker ctx.AddDependency(m, licensekindTag{}, j.properties.License_kinds...) 142*333d2b36SAndroid Build Coastguard Worker} 143*333d2b36SAndroid Build Coastguard Worker 144*333d2b36SAndroid Build Coastguard Workerfunc (p *mockLicenseModule) GenerateAndroidBuildActions(ModuleContext) { 145*333d2b36SAndroid Build Coastguard Worker} 146