xref: /aosp_15_r20/build/soong/android/package_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
7*333d2b36SAndroid Build Coastguard Workervar packageTests = []struct {
8*333d2b36SAndroid Build Coastguard Worker	name           string
9*333d2b36SAndroid Build Coastguard Worker	fs             MockFS
10*333d2b36SAndroid Build Coastguard Worker	expectedErrors []string
11*333d2b36SAndroid Build Coastguard Worker}{
12*333d2b36SAndroid Build Coastguard Worker	// Package default_visibility handling is tested in visibility_test.go
13*333d2b36SAndroid Build Coastguard Worker	{
14*333d2b36SAndroid Build Coastguard Worker		name: "package must not accept visibility, name or licenses properties",
15*333d2b36SAndroid Build Coastguard Worker		fs: map[string][]byte{
16*333d2b36SAndroid Build Coastguard Worker			"top/Android.bp": []byte(`
17*333d2b36SAndroid Build Coastguard Worker				package {
18*333d2b36SAndroid Build Coastguard Worker					name: "package",
19*333d2b36SAndroid Build Coastguard Worker					visibility: ["//visibility:private"],
20*333d2b36SAndroid Build Coastguard Worker					licenses: ["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:5:14: unrecognized property "licenses"`,
25*333d2b36SAndroid Build Coastguard Worker			`top/Android.bp:3:10: unrecognized property "name"`,
26*333d2b36SAndroid Build Coastguard Worker			`top/Android.bp:4:16: unrecognized property "visibility"`,
27*333d2b36SAndroid Build Coastguard Worker		},
28*333d2b36SAndroid Build Coastguard Worker	},
29*333d2b36SAndroid Build Coastguard Worker	{
30*333d2b36SAndroid Build Coastguard Worker		name: "multiple packages in separate directories",
31*333d2b36SAndroid Build Coastguard Worker		fs: map[string][]byte{
32*333d2b36SAndroid Build Coastguard Worker			"top/Android.bp": []byte(`
33*333d2b36SAndroid Build Coastguard Worker				package {
34*333d2b36SAndroid Build Coastguard Worker				}`),
35*333d2b36SAndroid Build Coastguard Worker			"other/Android.bp": []byte(`
36*333d2b36SAndroid Build Coastguard Worker				package {
37*333d2b36SAndroid Build Coastguard Worker				}`),
38*333d2b36SAndroid Build Coastguard Worker			"other/nested/Android.bp": []byte(`
39*333d2b36SAndroid Build Coastguard Worker				package {
40*333d2b36SAndroid Build Coastguard Worker				}`),
41*333d2b36SAndroid Build Coastguard Worker		},
42*333d2b36SAndroid Build Coastguard Worker	},
43*333d2b36SAndroid Build Coastguard Worker	{
44*333d2b36SAndroid Build Coastguard Worker		name: "package must not be specified more than once per package",
45*333d2b36SAndroid Build Coastguard Worker		fs: map[string][]byte{
46*333d2b36SAndroid Build Coastguard Worker			"top/Android.bp": []byte(`
47*333d2b36SAndroid Build Coastguard Worker				package {
48*333d2b36SAndroid Build Coastguard Worker					default_visibility: ["//visibility:private"],
49*333d2b36SAndroid Build Coastguard Worker					default_applicable_licenses: ["license"],
50*333d2b36SAndroid Build Coastguard Worker				}
51*333d2b36SAndroid Build Coastguard Worker				package {
52*333d2b36SAndroid Build Coastguard Worker				}`),
53*333d2b36SAndroid Build Coastguard Worker		},
54*333d2b36SAndroid Build Coastguard Worker		expectedErrors: []string{
55*333d2b36SAndroid Build Coastguard Worker			`module "//top" already defined`,
56*333d2b36SAndroid Build Coastguard Worker		},
57*333d2b36SAndroid Build Coastguard Worker	},
58*333d2b36SAndroid Build Coastguard Worker}
59*333d2b36SAndroid Build Coastguard Worker
60*333d2b36SAndroid Build Coastguard Workerfunc TestPackage(t *testing.T) {
61*333d2b36SAndroid Build Coastguard Worker	for _, test := range packageTests {
62*333d2b36SAndroid Build Coastguard Worker		t.Run(test.name, func(t *testing.T) {
63*333d2b36SAndroid Build Coastguard Worker			GroupFixturePreparers(
64*333d2b36SAndroid Build Coastguard Worker				PrepareForTestWithArchMutator,
65*333d2b36SAndroid Build Coastguard Worker				PrepareForTestWithPackageModule,
66*333d2b36SAndroid Build Coastguard Worker				test.fs.AddToFixture(),
67*333d2b36SAndroid Build Coastguard Worker			).
68*333d2b36SAndroid Build Coastguard Worker				ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
69*333d2b36SAndroid Build Coastguard Worker				RunTest(t)
70*333d2b36SAndroid Build Coastguard Worker		})
71*333d2b36SAndroid Build Coastguard Worker	}
72*333d2b36SAndroid Build Coastguard Worker}
73