• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package android
2
3import (
4	"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{
23			`top/Blueprints:3:10: unrecognized property "name"`,
24			`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"],
47					default_applicable_licenses: ["license"],
48				}
49
50        package {
51				}`),
52		},
53		expectedErrors: []string{
54			`module "//top" already defined`,
55		},
56	},
57}
58
59func TestPackage(t *testing.T) {
60	for _, test := range packageTests {
61		t.Run(test.name, func(t *testing.T) {
62			_, errs := testPackage(test.fs)
63
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
85func testPackage(fs map[string][]byte) (*TestContext, []error) {
86
87	// Create a new config per test as visibility information is stored in the config.
88	config := TestArchConfig(buildDir, nil, "", fs)
89
90	ctx := NewTestArchContext()
91	RegisterPackageBuildComponents(ctx)
92	ctx.Register(config)
93
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}
102