| package android | 
 |  | 
 | import ( | 
 | 	"testing" | 
 | ) | 
 |  | 
 | // Common test set up for license tests. | 
 | var prepareForLicenseTest = GroupFixturePreparers( | 
 | 	// General preparers in alphabetical order. | 
 | 	PrepareForTestWithDefaults, | 
 | 	PrepareForTestWithLicenses, | 
 | 	PrepareForTestWithOverrides, | 
 | 	PrepareForTestWithPackageModule, | 
 | 	PrepareForTestWithPrebuilts, | 
 | 	PrepareForTestWithVisibility, | 
 |  | 
 | 	// Additional test specific stuff | 
 | 	prepareForTestWithFakePrebuiltModules, | 
 | 	FixtureMergeEnv(map[string]string{"ANDROID_REQUIRE_LICENSES": "1"}), | 
 | ) | 
 |  | 
 | var licenseTests = []struct { | 
 | 	name           string | 
 | 	fs             MockFS | 
 | 	expectedErrors []string | 
 | }{ | 
 | 	{ | 
 | 		name: "license must not accept licenses property", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				license { | 
 | 					name: "top_license", | 
 | 					visibility: ["//visibility:private"], | 
 | 					licenses: ["other_license"], | 
 | 				}`), | 
 | 		}, | 
 | 		expectedErrors: []string{ | 
 | 			`top/Android.bp:5:14: unrecognized property "licenses"`, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "private license", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				license_kind { | 
 | 					name: "top_notice", | 
 | 					conditions: ["notice"], | 
 | 					visibility: ["//visibility:private"], | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_allowed_as_notice", | 
 | 					license_kinds: ["top_notice"], | 
 | 					visibility: ["//visibility:private"], | 
 | 				}`), | 
 | 			"other/Android.bp": []byte(` | 
 | 				rule { | 
 | 					name: "arule", | 
 | 					licenses: ["top_allowed_as_notice"], | 
 | 				}`), | 
 | 			"yetmore/Android.bp": []byte(` | 
 | 				package { | 
 | 					default_applicable_licenses: ["top_allowed_as_notice"], | 
 | 				}`), | 
 | 		}, | 
 | 		expectedErrors: []string{ | 
 | 			`other/Android.bp:2:5: module "arule": depends on //top:top_allowed_as_notice ` + | 
 | 				`which is not visible to this module`, | 
 | 			`yetmore/Android.bp:2:5: module "//yetmore": depends on //top:top_allowed_as_notice ` + | 
 | 				`which is not visible to this module`, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "must reference license_kind module", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				rule { | 
 | 					name: "top_by_exception_only", | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_proprietary", | 
 | 					license_kinds: ["top_by_exception_only"], | 
 | 					visibility: ["//visibility:public"], | 
 | 				}`), | 
 | 		}, | 
 | 		expectedErrors: []string{ | 
 | 			`top/Android.bp:6:5: module "top_proprietary": license_kinds property ` + | 
 | 				`"top_by_exception_only" is not a license_kind module`, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "must not duplicate license_kind", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				license_kind { | 
 | 					name: "top_by_exception_only", | 
 | 					conditions: ["by_exception_only"], | 
 | 					visibility: ["//visibility:private"], | 
 | 				} | 
 |  | 
 | 				license_kind { | 
 | 					name: "top_by_exception_only_2", | 
 | 					conditions: ["by_exception_only"], | 
 | 					visibility: ["//visibility:private"], | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_proprietary", | 
 | 					license_kinds: [ | 
 | 						"top_by_exception_only", | 
 | 						"top_by_exception_only_2", | 
 | 						"top_by_exception_only" | 
 | 					], | 
 | 					visibility: ["//visibility:public"], | 
 | 				}`), | 
 | 		}, | 
 | 		expectedErrors: []string{ | 
 | 			`top/Android.bp:14:5: module "top_proprietary": Duplicated license kind: "top_by_exception_only"`, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "license_kind module must exist", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				license { | 
 | 					name: "top_notice_allowed", | 
 | 					license_kinds: ["top_notice"], | 
 | 					visibility: ["//visibility:public"], | 
 | 				}`), | 
 | 		}, | 
 | 		expectedErrors: []string{ | 
 | 			`top/Android.bp:2:5: "top_notice_allowed" depends on undefined module "top_notice"`, | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "public license", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				license_kind { | 
 | 					name: "top_by_exception_only", | 
 | 					conditions: ["by_exception_only"], | 
 | 					visibility: ["//visibility:private"], | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_proprietary", | 
 | 					license_kinds: ["top_by_exception_only"], | 
 | 					visibility: ["//visibility:public"], | 
 | 				}`), | 
 | 			"other/Android.bp": []byte(` | 
 | 				rule { | 
 | 					name: "arule", | 
 | 					licenses: ["top_proprietary"], | 
 | 				}`), | 
 | 			"yetmore/Android.bp": []byte(` | 
 | 				package { | 
 | 					default_applicable_licenses: ["top_proprietary"], | 
 | 				}`), | 
 | 		}, | 
 | 	}, | 
 | 	{ | 
 | 		name: "multiple licenses", | 
 | 		fs: map[string][]byte{ | 
 | 			"top/Android.bp": []byte(` | 
 | 				package { | 
 | 					default_applicable_licenses: ["top_proprietary"], | 
 | 				} | 
 |  | 
 | 				license_kind { | 
 | 					name: "top_notice", | 
 | 					conditions: ["notice"], | 
 | 				} | 
 |  | 
 | 				license_kind { | 
 | 					name: "top_by_exception_only", | 
 | 					conditions: ["by_exception_only"], | 
 | 					visibility: ["//visibility:public"], | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_allowed_as_notice", | 
 | 					license_kinds: ["top_notice"], | 
 | 				} | 
 |  | 
 | 				license { | 
 | 					name: "top_proprietary", | 
 | 					license_kinds: ["top_by_exception_only"], | 
 | 					visibility: ["//visibility:public"], | 
 | 				} | 
 | 				rule { | 
 | 					name: "myrule", | 
 | 					licenses: ["top_allowed_as_notice", "top_proprietary"] | 
 | 				}`), | 
 | 			"other/Android.bp": []byte(` | 
 | 				rule { | 
 | 					name: "arule", | 
 | 					licenses: ["top_proprietary"], | 
 | 				}`), | 
 | 			"yetmore/Android.bp": []byte(` | 
 | 				package { | 
 | 					default_applicable_licenses: ["top_proprietary"], | 
 | 				}`), | 
 | 		}, | 
 | 	}, | 
 | } | 
 |  | 
 | func TestLicense(t *testing.T) { | 
 | 	for _, test := range licenseTests { | 
 | 		t.Run(test.name, func(t *testing.T) { | 
 | 			// Customize the common license text fixture factory. | 
 | 			GroupFixturePreparers( | 
 | 				prepareForLicenseTest, | 
 | 				FixtureRegisterWithContext(func(ctx RegistrationContext) { | 
 | 					ctx.RegisterModuleType("rule", newMockRuleModule) | 
 | 				}), | 
 | 				test.fs.AddToFixture(), | 
 | 			). | 
 | 				ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)). | 
 | 				RunTest(t) | 
 | 		}) | 
 | 	} | 
 | } | 
 |  | 
 | func testLicense(t *testing.T, fs MockFS, expectedErrors []string) { | 
 | } | 
 |  | 
 | type mockRuleModule struct { | 
 | 	ModuleBase | 
 | 	DefaultableModuleBase | 
 | } | 
 |  | 
 | func newMockRuleModule() Module { | 
 | 	m := &mockRuleModule{} | 
 | 	InitAndroidModule(m) | 
 | 	InitDefaultableModule(m) | 
 | 	return m | 
 | } | 
 |  | 
 | func (p *mockRuleModule) GenerateAndroidBuildActions(ModuleContext) { | 
 | } |