blob: f25599cf83c05c0e07f8e5c143b3ef43028ebcbc [file] [log] [blame]
Paul Duffine2453c72019-05-31 14:00:04 +01001package android
2
3import (
Paul Duffine2453c72019-05-31 14:00:04 +01004 "testing"
5)
6
7var packageTests = []struct {
8 name string
9 fs map[string][]byte
10 expectedErrors []string
11}{
12 // Package default_visibility handling is tested in visibility_test.go
13 {
14 name: "package must not accept visibility and name properties",
15 fs: map[string][]byte{
16 "top/Blueprints": []byte(`
17 package {
18 name: "package",
19 visibility: ["//visibility:private"],
20 }`),
21 },
22 expectedErrors: []string{
Paul Duffina43e13e2020-05-01 11:57:12 +010023 `top/Blueprints:3:10: unrecognized property "name"`,
Paul Duffine2453c72019-05-31 14:00:04 +010024 `top/Blueprints:4:16: unrecognized property "visibility"`,
25 },
26 },
27 {
28 name: "multiple packages in separate directories",
29 fs: map[string][]byte{
30 "top/Blueprints": []byte(`
31 package {
32 }`),
33 "other/Blueprints": []byte(`
34 package {
35 }`),
36 "other/nested/Blueprints": []byte(`
37 package {
38 }`),
39 },
40 },
41 {
42 name: "package must not be specified more than once per package",
43 fs: map[string][]byte{
44 "top/Blueprints": []byte(`
45 package {
46 default_visibility: ["//visibility:private"],
Bob Badourdc5be902021-03-15 20:00:01 -070047 default_applicable_licenses: ["license"],
Paul Duffine2453c72019-05-31 14:00:04 +010048 }
49
50 package {
51 }`),
52 },
53 expectedErrors: []string{
Paul Duffina43e13e2020-05-01 11:57:12 +010054 `module "//top" already defined`,
Paul Duffine2453c72019-05-31 14:00:04 +010055 },
56 },
57}
58
59func TestPackage(t *testing.T) {
Paul Duffine2453c72019-05-31 14:00:04 +010060 for _, test := range packageTests {
61 t.Run(test.name, func(t *testing.T) {
Colin Crossfa078212019-07-02 11:31:37 -070062 _, errs := testPackage(test.fs)
Paul Duffine2453c72019-05-31 14:00:04 +010063
64 expectedErrors := test.expectedErrors
65 if expectedErrors == nil {
66 FailIfErrored(t, errs)
67 } else {
68 for _, expectedError := range expectedErrors {
69 FailIfNoMatchingErrors(t, expectedError, errs)
70 }
71 if len(errs) > len(expectedErrors) {
72 t.Errorf("additional errors found, expected %d, found %d", len(expectedErrors), len(errs))
73 for i, expectedError := range expectedErrors {
74 t.Errorf("expectedErrors[%d] = %s", i, expectedError)
75 }
76 for i, err := range errs {
77 t.Errorf("errs[%d] = %s", i, err)
78 }
79 }
80 }
81 })
82 }
83}
84
Colin Crossfa078212019-07-02 11:31:37 -070085func testPackage(fs map[string][]byte) (*TestContext, []error) {
Paul Duffine2453c72019-05-31 14:00:04 +010086
87 // Create a new config per test as visibility information is stored in the config.
Colin Cross98be1bb2019-12-13 20:41:13 -080088 config := TestArchConfig(buildDir, nil, "", fs)
Paul Duffine2453c72019-05-31 14:00:04 +010089
90 ctx := NewTestArchContext()
Paul Duffinc1327422020-01-14 12:15:29 +000091 RegisterPackageBuildComponents(ctx)
Colin Cross98be1bb2019-12-13 20:41:13 -080092 ctx.Register(config)
Paul Duffine2453c72019-05-31 14:00:04 +010093
94 _, errs := ctx.ParseBlueprintsFiles(".")
95 if len(errs) > 0 {
96 return ctx, errs
97 }
98
99 _, errs = ctx.PrepareBuildActions(config)
100 return ctx, errs
101}