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