• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package android
2
3import (
4	"testing"
5
6	"github.com/google/blueprint"
7)
8
9var genNoticeTests = []struct {
10	name           string
11	fs             MockFS
12	expectedErrors []string
13}{
14	{
15		name: "gen_notice must not accept licenses property",
16		fs: map[string][]byte{
17			"top/Android.bp": []byte(`
18				gen_notice {
19					name: "top_license",
20					licenses: ["other_license"],
21				}`),
22		},
23		expectedErrors: []string{
24			`not supported on "gen_notice" modules`,
25		},
26	},
27	{
28		name: "bad gen_notice",
29		fs: map[string][]byte{
30			"top/Android.bp": []byte(`
31				gen_notice {
32					name: "top_notice",
33					for: ["top_rule"],
34				}`),
35			"other/Android.bp": []byte(`
36				mock_genrule {
37					name: "other_rule",
38					dep: ["top_notice"],
39				}`),
40		},
41		expectedErrors: []string{
42			`module "top_notice": for: no "top_rule" module exists`,
43		},
44	},
45	{
46		name: "doubly bad gen_notice",
47		fs: map[string][]byte{
48			"top/Android.bp": []byte(`
49				gen_notice {
50					name: "top_notice",
51					for: ["top_rule", "other_rule"],
52				}`),
53		},
54		expectedErrors: []string{
55			`module "top_notice": for: modules "top_rule", "other_rule" do not exist`,
56		},
57	},
58	{
59		name: "good gen_notice",
60		fs: map[string][]byte{
61			"top/Android.bp": []byte(`
62				gen_notice {
63					name: "top_notice",
64					for: ["top_rule"],
65				}
66
67				mock_genrule {
68					name: "top_rule",
69					dep: ["top_notice"],
70				}`),
71			"other/Android.bp": []byte(`
72				mock_genrule {
73					name: "other_rule",
74					dep: ["top_notice"],
75				}`),
76		},
77	},
78	{
79		name: "multiple license kinds",
80		fs: map[string][]byte{
81			"top/Android.bp": []byte(`
82				gen_notice {
83					name: "top_notice",
84					for: ["top_rule"],
85				}
86
87				gen_notice {
88					name: "top_html_notice",
89					html: true,
90					for: ["top_rule"],
91				}
92
93				gen_notice {
94					name: "top_xml_notice",
95					xml: true,
96					for: ["top_notice"],
97				}
98
99				mock_genrule {
100					name: "top_rule",
101					dep: [
102						"top_notice",
103						"top_html_notice",
104						"top_xml_notice",
105					],
106				}`),
107			"other/Android.bp": []byte(`
108				mock_genrule {
109					name: "other_rule",
110					dep: ["top_xml_notice"],
111				}`),
112		},
113	},
114}
115
116func TestGenNotice(t *testing.T) {
117	for _, test := range genNoticeTests {
118		t.Run(test.name, func(t *testing.T) {
119			GroupFixturePreparers(
120				PrepareForTestWithGenNotice,
121				FixtureRegisterWithContext(func(ctx RegistrationContext) {
122					ctx.RegisterModuleType("mock_genrule", newMockGenruleModule)
123				}),
124				test.fs.AddToFixture(),
125			).
126				ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
127				RunTest(t)
128		})
129	}
130}
131
132type mockGenruleProperties struct {
133	Dep []string
134}
135
136type mockGenruleModule struct {
137	ModuleBase
138	DefaultableModuleBase
139
140	properties mockGenruleProperties
141}
142
143func newMockGenruleModule() Module {
144	m := &mockGenruleModule{}
145	m.AddProperties(&m.properties)
146	InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon)
147	InitDefaultableModule(m)
148	return m
149}
150
151type genruleDepTag struct {
152	blueprint.BaseDependencyTag
153}
154
155func (j *mockGenruleModule) DepsMutator(ctx BottomUpMutatorContext) {
156	m, ok := ctx.Module().(Module)
157	if !ok {
158		return
159	}
160	ctx.AddDependency(m, genruleDepTag{}, j.properties.Dep...)
161}
162
163func (p *mockGenruleModule) GenerateAndroidBuildActions(ModuleContext) {
164}
165