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