blob: 99be13ffa2bc602ebce76e8cf4f9a032f75fff53 [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"],
Bob Badour37af0462021-01-07 03:34:31 +000020 licenses: ["license"],
Paul Duffine2453c72019-05-31 14:00:04 +010021 }`),
22 },
23 expectedErrors: []string{
Bob Badour37af0462021-01-07 03:34:31 +000024 `top/Blueprints:5:14: unrecognized property "licenses"`,
Paul Duffincdfcec92020-05-01 11:57:12 +010025 `top/Blueprints:3:10: unrecognized property "name"`,
Paul Duffine2453c72019-05-31 14:00:04 +010026 `top/Blueprints:4:16: unrecognized property "visibility"`,
27 },
28 },
29 {
30 name: "multiple packages in separate directories",
31 fs: map[string][]byte{
32 "top/Blueprints": []byte(`
33 package {
34 }`),
35 "other/Blueprints": []byte(`
36 package {
37 }`),
38 "other/nested/Blueprints": []byte(`
39 package {
40 }`),
41 },
42 },
43 {
44 name: "package must not be specified more than once per package",
45 fs: map[string][]byte{
46 "top/Blueprints": []byte(`
47 package {
48 default_visibility: ["//visibility:private"],
Bob Badour37af0462021-01-07 03:34:31 +000049 default_applicable_licenses: ["license"],
Paul Duffine2453c72019-05-31 14:00:04 +010050 }
51
Bob Badour37af0462021-01-07 03:34:31 +000052 package {
Paul Duffine2453c72019-05-31 14:00:04 +010053 }`),
54 },
55 expectedErrors: []string{
Paul Duffincdfcec92020-05-01 11:57:12 +010056 `module "//top" already defined`,
Paul Duffine2453c72019-05-31 14:00:04 +010057 },
58 },
59}
60
61func TestPackage(t *testing.T) {
Paul Duffine2453c72019-05-31 14:00:04 +010062 for _, test := range packageTests {
63 t.Run(test.name, func(t *testing.T) {
Colin Crossfa078212019-07-02 11:31:37 -070064 _, errs := testPackage(test.fs)
Paul Duffine2453c72019-05-31 14:00:04 +010065
66 expectedErrors := test.expectedErrors
67 if expectedErrors == nil {
68 FailIfErrored(t, errs)
69 } else {
70 for _, expectedError := range expectedErrors {
71 FailIfNoMatchingErrors(t, expectedError, errs)
72 }
73 if len(errs) > len(expectedErrors) {
74 t.Errorf("additional errors found, expected %d, found %d", len(expectedErrors), len(errs))
75 for i, expectedError := range expectedErrors {
76 t.Errorf("expectedErrors[%d] = %s", i, expectedError)
77 }
78 for i, err := range errs {
79 t.Errorf("errs[%d] = %s", i, err)
80 }
81 }
82 }
83 })
84 }
85}
86
Colin Crossfa078212019-07-02 11:31:37 -070087func testPackage(fs map[string][]byte) (*TestContext, []error) {
Paul Duffine2453c72019-05-31 14:00:04 +010088
89 // Create a new config per test as visibility information is stored in the config.
Colin Cross98be1bb2019-12-13 20:41:13 -080090 config := TestArchConfig(buildDir, nil, "", fs)
Paul Duffine2453c72019-05-31 14:00:04 +010091
Colin Crossae8600b2020-10-29 17:09:13 -070092 ctx := NewTestArchContext(config)
Paul Duffinc1327422020-01-14 12:15:29 +000093 RegisterPackageBuildComponents(ctx)
Colin Crossae8600b2020-10-29 17:09:13 -070094 ctx.Register()
Paul Duffine2453c72019-05-31 14:00:04 +010095
96 _, errs := ctx.ParseBlueprintsFiles(".")
97 if len(errs) > 0 {
98 return ctx, errs
99 }
100
101 _, errs = ctx.PrepareBuildActions(config)
102 return ctx, errs
103}