| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 1 | // 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 Onorato | 981c926 | 2023-06-21 15:16:23 -0700 | [diff] [blame] | 15 | package aconfig | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 16 |  | 
 | 17 | import ( | 
 | 18 | 	"testing" | 
 | 19 |  | 
 | 20 | 	"android/soong/android" | 
| Jihoon Kang | 4fbee9a | 2024-09-12 22:28:32 +0000 | [diff] [blame] | 21 |  | 
 | 22 | 	"github.com/google/blueprint" | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 23 | ) | 
 | 24 |  | 
| Joe Onorato | 981c926 | 2023-06-21 15:16:23 -0700 | [diff] [blame] | 25 | func TestAconfigValueSet(t *testing.T) { | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 26 | 	bp := ` | 
| Joe Onorato | 981c926 | 2023-06-21 15:16:23 -0700 | [diff] [blame] | 27 | 				aconfig_values { | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 28 | 					name: "one", | 
 | 29 | 					srcs: [ "blah.aconfig_values" ], | 
| Joe Onorato | 81b25ed | 2023-06-21 13:49:37 -0700 | [diff] [blame] | 30 | 					package: "foo.package" | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 31 | 				} | 
 | 32 |  | 
| Joe Onorato | 981c926 | 2023-06-21 15:16:23 -0700 | [diff] [blame] | 33 | 				aconfig_value_set { | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 34 | 					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 Liu | 663e450 | 2024-08-12 18:23:59 +0000 | [diff] [blame] | 43 | 	depData, _ := android.OtherModuleProvider(result, module, valueSetProviderKey) | 
| Joe Onorato | 81b25ed | 2023-06-21 13:49:37 -0700 | [diff] [blame] | 44 | 	android.AssertStringEquals(t, "AvailablePackages", "blah.aconfig_values", depData.AvailablePackages["foo.package"][0].String()) | 
| Joe Onorato | 175073c | 2023-06-01 14:42:59 -0700 | [diff] [blame] | 45 | } | 
| Jihoon Kang | 4fbee9a | 2024-09-12 22:28:32 +0000 | [diff] [blame] | 46 |  | 
 | 47 | func 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 |  | 
 | 120 | func 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 | } |