| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 1 | // Copyright 2019 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 |  | 
|  | 15 | package java | 
|  | 16 |  | 
|  | 17 | import ( | 
|  | 18 | "fmt" | 
| Paul Duffin | cee7e66 | 2020-07-09 17:32:57 +0100 | [diff] [blame] | 19 | "reflect" | 
|  | 20 | "sort" | 
|  | 21 | "testing" | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 22 |  | 
|  | 23 | "android/soong/android" | 
| Colin Cross | f28329d | 2020-02-15 11:00:10 -0800 | [diff] [blame] | 24 | "android/soong/cc" | 
| Liz Kammer | dd849a8 | 2020-06-12 16:38:45 -0700 | [diff] [blame] | 25 | "android/soong/python" | 
|  | 26 |  | 
| Paul Duffin | cee7e66 | 2020-07-09 17:32:57 +0100 | [diff] [blame] | 27 | "github.com/google/blueprint" | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 28 | ) | 
|  | 29 |  | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 30 | func TestConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) android.Config { | 
|  | 31 | bp += GatherRequiredDepsForTest() | 
|  | 32 |  | 
|  | 33 | mockFS := map[string][]byte{ | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 34 | "api/current.txt":        nil, | 
|  | 35 | "api/removed.txt":        nil, | 
|  | 36 | "api/system-current.txt": nil, | 
|  | 37 | "api/system-removed.txt": nil, | 
|  | 38 | "api/test-current.txt":   nil, | 
|  | 39 | "api/test-removed.txt":   nil, | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 40 |  | 
| Colin Cross | 17dec17 | 2020-05-14 18:05:32 -0700 | [diff] [blame] | 41 | "prebuilts/sdk/14/public/android.jar":                      nil, | 
|  | 42 | "prebuilts/sdk/14/public/framework.aidl":                   nil, | 
|  | 43 | "prebuilts/sdk/14/system/android.jar":                      nil, | 
|  | 44 | "prebuilts/sdk/17/public/android.jar":                      nil, | 
|  | 45 | "prebuilts/sdk/17/public/framework.aidl":                   nil, | 
|  | 46 | "prebuilts/sdk/17/system/android.jar":                      nil, | 
|  | 47 | "prebuilts/sdk/29/public/android.jar":                      nil, | 
|  | 48 | "prebuilts/sdk/29/public/framework.aidl":                   nil, | 
|  | 49 | "prebuilts/sdk/29/system/android.jar":                      nil, | 
|  | 50 | "prebuilts/sdk/29/system/foo.jar":                          nil, | 
|  | 51 | "prebuilts/sdk/30/public/android.jar":                      nil, | 
|  | 52 | "prebuilts/sdk/30/public/framework.aidl":                   nil, | 
|  | 53 | "prebuilts/sdk/30/system/android.jar":                      nil, | 
|  | 54 | "prebuilts/sdk/30/system/foo.jar":                          nil, | 
|  | 55 | "prebuilts/sdk/30/public/core-for-system-modules.jar":      nil, | 
|  | 56 | "prebuilts/sdk/current/core/android.jar":                   nil, | 
|  | 57 | "prebuilts/sdk/current/public/android.jar":                 nil, | 
|  | 58 | "prebuilts/sdk/current/public/framework.aidl":              nil, | 
|  | 59 | "prebuilts/sdk/current/public/core.jar":                    nil, | 
|  | 60 | "prebuilts/sdk/current/public/core-for-system-modules.jar": nil, | 
|  | 61 | "prebuilts/sdk/current/system/android.jar":                 nil, | 
|  | 62 | "prebuilts/sdk/current/test/android.jar":                   nil, | 
|  | 63 | "prebuilts/sdk/28/public/api/foo.txt":                      nil, | 
|  | 64 | "prebuilts/sdk/28/system/api/foo.txt":                      nil, | 
|  | 65 | "prebuilts/sdk/28/test/api/foo.txt":                        nil, | 
|  | 66 | "prebuilts/sdk/28/public/api/foo-removed.txt":              nil, | 
|  | 67 | "prebuilts/sdk/28/system/api/foo-removed.txt":              nil, | 
|  | 68 | "prebuilts/sdk/28/test/api/foo-removed.txt":                nil, | 
|  | 69 | "prebuilts/sdk/28/public/api/bar.txt":                      nil, | 
|  | 70 | "prebuilts/sdk/28/system/api/bar.txt":                      nil, | 
|  | 71 | "prebuilts/sdk/28/test/api/bar.txt":                        nil, | 
|  | 72 | "prebuilts/sdk/28/public/api/bar-removed.txt":              nil, | 
|  | 73 | "prebuilts/sdk/28/system/api/bar-removed.txt":              nil, | 
|  | 74 | "prebuilts/sdk/28/test/api/bar-removed.txt":                nil, | 
|  | 75 | "prebuilts/sdk/30/public/api/foo.txt":                      nil, | 
|  | 76 | "prebuilts/sdk/30/system/api/foo.txt":                      nil, | 
|  | 77 | "prebuilts/sdk/30/test/api/foo.txt":                        nil, | 
|  | 78 | "prebuilts/sdk/30/public/api/foo-removed.txt":              nil, | 
|  | 79 | "prebuilts/sdk/30/system/api/foo-removed.txt":              nil, | 
|  | 80 | "prebuilts/sdk/30/test/api/foo-removed.txt":                nil, | 
|  | 81 | "prebuilts/sdk/30/public/api/bar.txt":                      nil, | 
|  | 82 | "prebuilts/sdk/30/system/api/bar.txt":                      nil, | 
|  | 83 | "prebuilts/sdk/30/test/api/bar.txt":                        nil, | 
|  | 84 | "prebuilts/sdk/30/public/api/bar-removed.txt":              nil, | 
|  | 85 | "prebuilts/sdk/30/system/api/bar-removed.txt":              nil, | 
|  | 86 | "prebuilts/sdk/30/test/api/bar-removed.txt":                nil, | 
|  | 87 | "prebuilts/sdk/tools/core-lambda-stubs.jar":                nil, | 
|  | 88 | "prebuilts/sdk/Android.bp":                                 []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "30", "current"],}`), | 
| Paul Duffin | 0c5bae5 | 2020-06-02 13:00:08 +0100 | [diff] [blame] | 89 |  | 
| Liz Kammer | dd849a8 | 2020-06-12 16:38:45 -0700 | [diff] [blame] | 90 | "bin.py": nil, | 
|  | 91 | python.StubTemplateHost: []byte(`PYTHON_BINARY = '%interpreter%' | 
|  | 92 | MAIN_FILE = '%main%'`), | 
|  | 93 |  | 
| Paul Duffin | 0c5bae5 | 2020-06-02 13:00:08 +0100 | [diff] [blame] | 94 | // For java_sdk_library | 
|  | 95 | "api/module-lib-current.txt":                        nil, | 
|  | 96 | "api/module-lib-removed.txt":                        nil, | 
|  | 97 | "api/system-server-current.txt":                     nil, | 
|  | 98 | "api/system-server-removed.txt":                     nil, | 
|  | 99 | "build/soong/scripts/gen-java-current-api-files.sh": nil, | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 100 | } | 
|  | 101 |  | 
| Colin Cross | f28329d | 2020-02-15 11:00:10 -0800 | [diff] [blame] | 102 | cc.GatherRequiredFilesForTest(mockFS) | 
|  | 103 |  | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 104 | for k, v := range fs { | 
|  | 105 | mockFS[k] = v | 
|  | 106 | } | 
|  | 107 |  | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 108 | if env == nil { | 
|  | 109 | env = make(map[string]string) | 
|  | 110 | } | 
|  | 111 | if env["ANDROID_JAVA8_HOME"] == "" { | 
|  | 112 | env["ANDROID_JAVA8_HOME"] = "jdk8" | 
|  | 113 | } | 
| Colin Cross | 98be1bb | 2019-12-13 20:41:13 -0800 | [diff] [blame] | 114 | config := android.TestArchConfig(buildDir, env, bp, mockFS) | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 115 |  | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 116 | return config | 
|  | 117 | } | 
|  | 118 |  | 
|  | 119 | func GatherRequiredDepsForTest() string { | 
|  | 120 | var bp string | 
|  | 121 |  | 
|  | 122 | extraModules := []string{ | 
|  | 123 | "core-lambda-stubs", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 124 | "ext", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 125 | "android_stubs_current", | 
|  | 126 | "android_system_stubs_current", | 
|  | 127 | "android_test_stubs_current", | 
| Jiyong Park | 50146e9 | 2020-01-30 18:00:15 +0900 | [diff] [blame] | 128 | "android_module_lib_stubs_current", | 
| Anton Hansson | ba6ab2e | 2020-03-19 15:23:38 +0000 | [diff] [blame] | 129 | "android_system_server_stubs_current", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 130 | "core.current.stubs", | 
| Pete Gillin | 1f41dbf | 2020-06-02 15:59:45 +0100 | [diff] [blame] | 131 | "legacy.core.platform.api.stubs", | 
|  | 132 | "stable.core.platform.api.stubs", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 133 | "kotlin-stdlib", | 
| Colin Cross | 0b03d97 | 2019-05-13 11:06:25 -0700 | [diff] [blame] | 134 | "kotlin-stdlib-jdk7", | 
|  | 135 | "kotlin-stdlib-jdk8", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 136 | "kotlin-annotations", | 
|  | 137 | } | 
|  | 138 |  | 
|  | 139 | for _, extra := range extraModules { | 
|  | 140 | bp += fmt.Sprintf(` | 
|  | 141 | java_library { | 
|  | 142 | name: "%s", | 
|  | 143 | srcs: ["a.java"], | 
| Paul Duffin | 52d398a | 2019-06-11 12:31:14 +0100 | [diff] [blame] | 144 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 145 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 146 | } | 
|  | 147 | `, extra) | 
|  | 148 | } | 
|  | 149 |  | 
|  | 150 | bp += ` | 
| Colin Cross | 3047fa2 | 2019-04-18 10:56:44 -0700 | [diff] [blame] | 151 | java_library { | 
|  | 152 | name: "framework", | 
|  | 153 | srcs: ["a.java"], | 
| Paul Duffin | a3d0986 | 2019-06-11 13:40:47 +0100 | [diff] [blame] | 154 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 155 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | 3047fa2 | 2019-04-18 10:56:44 -0700 | [diff] [blame] | 156 | aidl: { | 
|  | 157 | export_include_dirs: ["framework/aidl"], | 
|  | 158 | }, | 
|  | 159 | } | 
|  | 160 |  | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 161 | android_app { | 
|  | 162 | name: "framework-res", | 
| Paul Duffin | 50c217c | 2019-06-12 13:25:22 +0100 | [diff] [blame] | 163 | sdk_version: "core_platform", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 164 | } | 
| Colin Cross | 50ddcc4 | 2019-05-16 12:28:22 -0700 | [diff] [blame] | 165 |  | 
|  | 166 | java_library { | 
|  | 167 | name: "android.hidl.base-V1.0-java", | 
|  | 168 | srcs: ["a.java"], | 
| Paul Duffin | a3d0986 | 2019-06-11 13:40:47 +0100 | [diff] [blame] | 169 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 170 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | 50ddcc4 | 2019-05-16 12:28:22 -0700 | [diff] [blame] | 171 | installable: true, | 
|  | 172 | } | 
|  | 173 |  | 
|  | 174 | java_library { | 
|  | 175 | name: "android.hidl.manager-V1.0-java", | 
|  | 176 | srcs: ["a.java"], | 
| Paul Duffin | a3d0986 | 2019-06-11 13:40:47 +0100 | [diff] [blame] | 177 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 178 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | 50ddcc4 | 2019-05-16 12:28:22 -0700 | [diff] [blame] | 179 | installable: true, | 
|  | 180 | } | 
|  | 181 |  | 
|  | 182 | java_library { | 
|  | 183 | name: "org.apache.http.legacy", | 
|  | 184 | srcs: ["a.java"], | 
| Paul Duffin | a3d0986 | 2019-06-11 13:40:47 +0100 | [diff] [blame] | 185 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 186 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | 50ddcc4 | 2019-05-16 12:28:22 -0700 | [diff] [blame] | 187 | installable: true, | 
|  | 188 | } | 
| Ulya Trafimovich | c9af538 | 2020-05-29 15:35:06 +0100 | [diff] [blame] | 189 |  | 
|  | 190 | java_library { | 
|  | 191 | name: "android.test.base", | 
|  | 192 | srcs: ["a.java"], | 
|  | 193 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 194 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Ulya Trafimovich | c9af538 | 2020-05-29 15:35:06 +0100 | [diff] [blame] | 195 | installable: true, | 
|  | 196 | } | 
|  | 197 |  | 
|  | 198 | java_library { | 
|  | 199 | name: "android.test.mock", | 
|  | 200 | srcs: ["a.java"], | 
|  | 201 | sdk_version: "none", | 
| Pete Gillin | 84c3807 | 2020-07-09 18:03:41 +0100 | [diff] [blame] | 202 | system_modules: "stable-core-platform-api-stubs-system-modules", | 
| Ulya Trafimovich | c9af538 | 2020-05-29 15:35:06 +0100 | [diff] [blame] | 203 | installable: true, | 
|  | 204 | } | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 205 | ` | 
|  | 206 |  | 
|  | 207 | systemModules := []string{ | 
| Neil Fuller | ba88c41 | 2018-10-21 22:57:26 +0100 | [diff] [blame] | 208 | "core-current-stubs-system-modules", | 
| Pete Gillin | 1f41dbf | 2020-06-02 15:59:45 +0100 | [diff] [blame] | 209 | "legacy-core-platform-api-stubs-system-modules", | 
| Pete Gillin | 40a0642 | 2020-07-01 10:59:00 +0100 | [diff] [blame] | 210 | "stable-core-platform-api-stubs-system-modules", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 211 | } | 
|  | 212 |  | 
|  | 213 | for _, extra := range systemModules { | 
|  | 214 | bp += fmt.Sprintf(` | 
|  | 215 | java_system_modules { | 
| Paul Duffin | 68289b0 | 2019-09-20 13:50:52 +0100 | [diff] [blame] | 216 | name: "%[1]s", | 
|  | 217 | libs: ["%[1]s-lib"], | 
|  | 218 | } | 
|  | 219 | java_library { | 
|  | 220 | name: "%[1]s-lib", | 
|  | 221 | sdk_version: "none", | 
|  | 222 | system_modules: "none", | 
| Colin Cross | b197453 | 2019-02-15 10:37:39 -0800 | [diff] [blame] | 223 | } | 
|  | 224 | `, extra) | 
|  | 225 | } | 
|  | 226 |  | 
|  | 227 | return bp | 
|  | 228 | } | 
| Paul Duffin | cee7e66 | 2020-07-09 17:32:57 +0100 | [diff] [blame] | 229 |  | 
|  | 230 | func CheckModuleDependencies(t *testing.T, ctx *android.TestContext, name, variant string, expected []string) { | 
|  | 231 | t.Helper() | 
|  | 232 | module := ctx.ModuleForTests(name, variant).Module() | 
|  | 233 | deps := []string{} | 
|  | 234 | ctx.VisitDirectDeps(module, func(m blueprint.Module) { | 
|  | 235 | deps = append(deps, m.Name()) | 
|  | 236 | }) | 
|  | 237 | sort.Strings(deps) | 
|  | 238 |  | 
|  | 239 | if actual := deps; !reflect.DeepEqual(expected, actual) { | 
|  | 240 | t.Errorf("expected %#q, found %#q", expected, actual) | 
|  | 241 | } | 
|  | 242 | } |