xref: /aosp_15_r20/build/soong/android/license_kind_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
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