xref: /aosp_15_r20/build/soong/aconfig/aconfig_value_set_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2018 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage aconfig
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"testing"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Workerfunc TestAconfigValueSet(t *testing.T) {
26*333d2b36SAndroid Build Coastguard Worker	bp := `
27*333d2b36SAndroid Build Coastguard Worker				aconfig_values {
28*333d2b36SAndroid Build Coastguard Worker					name: "one",
29*333d2b36SAndroid Build Coastguard Worker					srcs: [ "blah.aconfig_values" ],
30*333d2b36SAndroid Build Coastguard Worker					package: "foo.package"
31*333d2b36SAndroid Build Coastguard Worker				}
32*333d2b36SAndroid Build Coastguard Worker
33*333d2b36SAndroid Build Coastguard Worker				aconfig_value_set {
34*333d2b36SAndroid Build Coastguard Worker					name: "module_name",
35*333d2b36SAndroid Build Coastguard Worker          values: [ "one" ],
36*333d2b36SAndroid Build Coastguard Worker				}
37*333d2b36SAndroid Build Coastguard Worker			`
38*333d2b36SAndroid Build Coastguard Worker	result := runTest(t, android.FixtureExpectsNoErrors, bp)
39*333d2b36SAndroid Build Coastguard Worker
40*333d2b36SAndroid Build Coastguard Worker	module := result.ModuleForTests("module_name", "").Module().(*ValueSetModule)
41*333d2b36SAndroid Build Coastguard Worker
42*333d2b36SAndroid Build Coastguard Worker	// Check that the provider has the right contents
43*333d2b36SAndroid Build Coastguard Worker	depData, _ := android.OtherModuleProvider(result, module, valueSetProviderKey)
44*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "AvailablePackages", "blah.aconfig_values", depData.AvailablePackages["foo.package"][0].String())
45*333d2b36SAndroid Build Coastguard Worker}
46*333d2b36SAndroid Build Coastguard Worker
47*333d2b36SAndroid Build Coastguard Workerfunc TestAconfigValueSetBpGlob(t *testing.T) {
48*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
49*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithAconfigBuildComponents,
50*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeMockFs(
51*333d2b36SAndroid Build Coastguard Worker			map[string][]byte{
52*333d2b36SAndroid Build Coastguard Worker				// .../some_release/android.foo/
53*333d2b36SAndroid Build Coastguard Worker				"some_release/android.foo/Android.bp": []byte(`
54*333d2b36SAndroid Build Coastguard Worker				aconfig_values {
55*333d2b36SAndroid Build Coastguard Worker					name: "aconfig-values-platform_build_release-some_release-android.foo-all",
56*333d2b36SAndroid Build Coastguard Worker					package: "android.foo",
57*333d2b36SAndroid Build Coastguard Worker					srcs: [
58*333d2b36SAndroid Build Coastguard Worker						"*.textproto",
59*333d2b36SAndroid Build Coastguard Worker					],
60*333d2b36SAndroid Build Coastguard Worker				}
61*333d2b36SAndroid Build Coastguard Worker				`),
62*333d2b36SAndroid Build Coastguard Worker				"some_release/android.foo/flag.textproto": nil,
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker				// .../some_release/android.bar/
65*333d2b36SAndroid Build Coastguard Worker				"some_release/android.bar/Android.bp": []byte(`
66*333d2b36SAndroid Build Coastguard Worker				aconfig_values {
67*333d2b36SAndroid Build Coastguard Worker					name: "aconfig-values-platform_build_release-some_release-android.bar-all",
68*333d2b36SAndroid Build Coastguard Worker					package: "android.bar",
69*333d2b36SAndroid Build Coastguard Worker					srcs: [
70*333d2b36SAndroid Build Coastguard Worker						"*.textproto",
71*333d2b36SAndroid Build Coastguard Worker					],
72*333d2b36SAndroid Build Coastguard Worker				}
73*333d2b36SAndroid Build Coastguard Worker				`),
74*333d2b36SAndroid Build Coastguard Worker				"some_release/android.bar/flag.textproto": nil,
75*333d2b36SAndroid Build Coastguard Worker
76*333d2b36SAndroid Build Coastguard Worker				// .../some_release/
77*333d2b36SAndroid Build Coastguard Worker				"some_release/Android.bp": []byte(`
78*333d2b36SAndroid Build Coastguard Worker				aconfig_value_set {
79*333d2b36SAndroid Build Coastguard Worker					name: "aconfig_value_set-platform_build_release-some_release",
80*333d2b36SAndroid Build Coastguard Worker					srcs: [
81*333d2b36SAndroid Build Coastguard Worker						"*/Android.bp",
82*333d2b36SAndroid Build Coastguard Worker					],
83*333d2b36SAndroid Build Coastguard Worker				}
84*333d2b36SAndroid Build Coastguard Worker				`),
85*333d2b36SAndroid Build Coastguard Worker			},
86*333d2b36SAndroid Build Coastguard Worker		),
87*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
88*333d2b36SAndroid Build Coastguard Worker
89*333d2b36SAndroid Build Coastguard Worker	checkModuleHasDependency := func(name, variant, dep string) bool {
90*333d2b36SAndroid Build Coastguard Worker		t.Helper()
91*333d2b36SAndroid Build Coastguard Worker		module := result.ModuleForTests(name, variant).Module()
92*333d2b36SAndroid Build Coastguard Worker		depFound := false
93*333d2b36SAndroid Build Coastguard Worker		result.VisitDirectDeps(module, func(m blueprint.Module) {
94*333d2b36SAndroid Build Coastguard Worker			if m.Name() == dep {
95*333d2b36SAndroid Build Coastguard Worker				depFound = true
96*333d2b36SAndroid Build Coastguard Worker			}
97*333d2b36SAndroid Build Coastguard Worker		})
98*333d2b36SAndroid Build Coastguard Worker		return depFound
99*333d2b36SAndroid Build Coastguard Worker	}
100*333d2b36SAndroid Build Coastguard Worker	android.AssertBoolEquals(t,
101*333d2b36SAndroid Build Coastguard Worker		"aconfig_value_set expected to depend on aconfig_value via srcs",
102*333d2b36SAndroid Build Coastguard Worker		true,
103*333d2b36SAndroid Build Coastguard Worker		checkModuleHasDependency(
104*333d2b36SAndroid Build Coastguard Worker			"aconfig_value_set-platform_build_release-some_release",
105*333d2b36SAndroid Build Coastguard Worker			"",
106*333d2b36SAndroid Build Coastguard Worker			"aconfig-values-platform_build_release-some_release-android.foo-all",
107*333d2b36SAndroid Build Coastguard Worker		),
108*333d2b36SAndroid Build Coastguard Worker	)
109*333d2b36SAndroid Build Coastguard Worker	android.AssertBoolEquals(t,
110*333d2b36SAndroid Build Coastguard Worker		"aconfig_value_set expected to depend on aconfig_value via srcs",
111*333d2b36SAndroid Build Coastguard Worker		true,
112*333d2b36SAndroid Build Coastguard Worker		checkModuleHasDependency(
113*333d2b36SAndroid Build Coastguard Worker			"aconfig_value_set-platform_build_release-some_release",
114*333d2b36SAndroid Build Coastguard Worker			"",
115*333d2b36SAndroid Build Coastguard Worker			"aconfig-values-platform_build_release-some_release-android.bar-all",
116*333d2b36SAndroid Build Coastguard Worker		),
117*333d2b36SAndroid Build Coastguard Worker	)
118*333d2b36SAndroid Build Coastguard Worker}
119*333d2b36SAndroid Build Coastguard Worker
120*333d2b36SAndroid Build Coastguard Workerfunc TestAconfigValueSetBpGlobError(t *testing.T) {
121*333d2b36SAndroid Build Coastguard Worker	android.GroupFixturePreparers(
122*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithAconfigBuildComponents,
123*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeMockFs(
124*333d2b36SAndroid Build Coastguard Worker			map[string][]byte{
125*333d2b36SAndroid Build Coastguard Worker				// .../some_release/android.bar/
126*333d2b36SAndroid Build Coastguard Worker				"some_release/android.bar/Android.bp": []byte(`
127*333d2b36SAndroid Build Coastguard Worker				aconfig_values {
128*333d2b36SAndroid Build Coastguard Worker					name: "aconfig-values-platform_build_release-some_release-android_bar-all",
129*333d2b36SAndroid Build Coastguard Worker					package: "android.bar",
130*333d2b36SAndroid Build Coastguard Worker					srcs: [
131*333d2b36SAndroid Build Coastguard Worker						"*.textproto",
132*333d2b36SAndroid Build Coastguard Worker					],
133*333d2b36SAndroid Build Coastguard Worker				}
134*333d2b36SAndroid Build Coastguard Worker				`),
135*333d2b36SAndroid Build Coastguard Worker				"some_release/android.bar/flag.textproto": nil,
136*333d2b36SAndroid Build Coastguard Worker
137*333d2b36SAndroid Build Coastguard Worker				// .../some_release/
138*333d2b36SAndroid Build Coastguard Worker				"some_release/Android.bp": []byte(`
139*333d2b36SAndroid Build Coastguard Worker				aconfig_value_set {
140*333d2b36SAndroid Build Coastguard Worker					name: "aconfig_value_set-platform_build_release-some_release",
141*333d2b36SAndroid Build Coastguard Worker					srcs: [
142*333d2b36SAndroid Build Coastguard Worker						"*/Android.bp",
143*333d2b36SAndroid Build Coastguard Worker					],
144*333d2b36SAndroid Build Coastguard Worker				}
145*333d2b36SAndroid Build Coastguard Worker				`),
146*333d2b36SAndroid Build Coastguard Worker			},
147*333d2b36SAndroid Build Coastguard Worker		),
148*333d2b36SAndroid Build Coastguard Worker	).ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(
149*333d2b36SAndroid Build Coastguard Worker		`module "aconfig_value_set-platform_build_release-some_release": module ` +
150*333d2b36SAndroid Build Coastguard Worker			`"aconfig-values-platform_build_release-some_release-android.bar-all" not found. ` +
151*333d2b36SAndroid Build Coastguard Worker			`Rename the aconfig_values module defined in "some_release/android.bar/Android.bp" ` +
152*333d2b36SAndroid Build Coastguard Worker			`to "aconfig-values-platform_build_release-some_release-android.bar-all"`),
153*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
154*333d2b36SAndroid Build Coastguard Worker}
155