blob: b45ce4f947b4e4ae39f5d0f11a229cd8f8539275 [file] [log] [blame]
Bob Badourafd99fd2022-05-23 12:37:02 -07001package 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 {
Bob Badourafd99fd2022-05-23 12:37:02 -070015 name: "bad gen_notice",
16 fs: map[string][]byte{
17 "top/Android.bp": []byte(`
18 gen_notice {
19 name: "top_notice",
20 for: ["top_rule"],
21 }`),
22 "other/Android.bp": []byte(`
23 mock_genrule {
24 name: "other_rule",
25 dep: ["top_notice"],
26 }`),
27 },
28 expectedErrors: []string{
29 `module "top_notice": for: no "top_rule" module exists`,
30 },
31 },
32 {
33 name: "doubly bad gen_notice",
34 fs: map[string][]byte{
35 "top/Android.bp": []byte(`
36 gen_notice {
37 name: "top_notice",
38 for: ["top_rule", "other_rule"],
39 }`),
40 },
41 expectedErrors: []string{
42 `module "top_notice": for: modules "top_rule", "other_rule" do not exist`,
43 },
44 },
45 {
46 name: "good gen_notice",
47 fs: map[string][]byte{
48 "top/Android.bp": []byte(`
49 gen_notice {
50 name: "top_notice",
51 for: ["top_rule"],
52 }
53
54 mock_genrule {
55 name: "top_rule",
56 dep: ["top_notice"],
57 }`),
58 "other/Android.bp": []byte(`
59 mock_genrule {
60 name: "other_rule",
61 dep: ["top_notice"],
62 }`),
63 },
64 },
65 {
66 name: "multiple license kinds",
67 fs: map[string][]byte{
68 "top/Android.bp": []byte(`
69 gen_notice {
70 name: "top_notice",
71 for: ["top_rule"],
72 }
73
74 gen_notice {
75 name: "top_html_notice",
76 html: true,
77 for: ["top_rule"],
78 }
79
80 gen_notice {
81 name: "top_xml_notice",
82 xml: true,
83 for: ["top_notice"],
84 }
85
86 mock_genrule {
87 name: "top_rule",
88 dep: [
89 "top_notice",
90 "top_html_notice",
91 "top_xml_notice",
92 ],
93 }`),
94 "other/Android.bp": []byte(`
95 mock_genrule {
96 name: "other_rule",
97 dep: ["top_xml_notice"],
98 }`),
99 },
100 },
101}
102
103func TestGenNotice(t *testing.T) {
104 for _, test := range genNoticeTests {
105 t.Run(test.name, func(t *testing.T) {
106 GroupFixturePreparers(
107 PrepareForTestWithGenNotice,
108 FixtureRegisterWithContext(func(ctx RegistrationContext) {
109 ctx.RegisterModuleType("mock_genrule", newMockGenruleModule)
110 }),
111 test.fs.AddToFixture(),
112 ).
113 ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
114 RunTest(t)
115 })
116 }
117}
118
119type mockGenruleProperties struct {
120 Dep []string
121}
122
123type mockGenruleModule struct {
124 ModuleBase
125 DefaultableModuleBase
126
127 properties mockGenruleProperties
128}
129
130func newMockGenruleModule() Module {
131 m := &mockGenruleModule{}
132 m.AddProperties(&m.properties)
133 InitAndroidArchModule(m, HostAndDeviceSupported, MultilibCommon)
134 InitDefaultableModule(m)
135 return m
136}
137
138type genruleDepTag struct {
139 blueprint.BaseDependencyTag
140}
141
142func (j *mockGenruleModule) DepsMutator(ctx BottomUpMutatorContext) {
143 m, ok := ctx.Module().(Module)
144 if !ok {
145 return
146 }
147 ctx.AddDependency(m, genruleDepTag{}, j.properties.Dep...)
148}
149
150func (p *mockGenruleModule) GenerateAndroidBuildActions(ModuleContext) {
151}