|  | // Copyright 2021 Google Inc. All rights reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | package java | 
|  |  | 
|  | import ( | 
|  | "testing" | 
|  |  | 
|  | "android/soong/android" | 
|  | ) | 
|  |  | 
|  | func getModuleHeaderJarsAsRelativeToTopPaths(result *android.TestResult, moduleNames ...string) []string { | 
|  | paths := []string{} | 
|  | for _, moduleName := range moduleNames { | 
|  | module := result.Module(moduleName, "android_common") | 
|  | info, _ := android.SingletonModuleProvider(result, module, JavaInfoProvider) | 
|  | paths = append(paths, info.HeaderJars.RelativeToTop().Strings()...) | 
|  | } | 
|  | return paths | 
|  | } | 
|  |  | 
|  | var addSourceSystemModules = android.FixtureAddTextFile("source/Android.bp", ` | 
|  | java_system_modules { | 
|  | name: "system-modules", | 
|  | libs: ["system-module1", "system-module2"], | 
|  | } | 
|  | java_library { | 
|  | name: "system-module1", | 
|  | srcs: ["a.java"], | 
|  | sdk_version: "none", | 
|  | system_modules: "none", | 
|  | } | 
|  | java_library { | 
|  | name: "system-module2", | 
|  | srcs: ["b.java"], | 
|  | sdk_version: "none", | 
|  | system_modules: "none", | 
|  | } | 
|  | `) | 
|  |  | 
|  | func TestJavaSystemModules(t *testing.T) { | 
|  | result := android.GroupFixturePreparers(prepareForJavaTest, addSourceSystemModules).RunTest(t) | 
|  |  | 
|  | // check the existence of the source module | 
|  | sourceSystemModules := result.ModuleForTests("system-modules", "android_common") | 
|  | sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs | 
|  |  | 
|  | // The expected paths are the header jars from the source input modules. | 
|  | expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2") | 
|  | android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings()) | 
|  | } | 
|  |  | 
|  | var addPrebuiltSystemModules = android.FixtureAddTextFile("prebuilts/Android.bp", ` | 
|  | java_system_modules_import { | 
|  | name: "system-modules", | 
|  | libs: ["system-module1", "system-module2"], | 
|  | } | 
|  | java_import { | 
|  | name: "system-module1", | 
|  | jars: ["a.jar"], | 
|  | } | 
|  | java_import { | 
|  | name: "system-module2", | 
|  | jars: ["b.jar"], | 
|  | } | 
|  | `) | 
|  |  | 
|  | func TestJavaSystemModulesImport(t *testing.T) { | 
|  | result := android.GroupFixturePreparers(prepareForJavaTest, addPrebuiltSystemModules).RunTest(t) | 
|  |  | 
|  | // check the existence of the renamed prebuilt module | 
|  | prebuiltSystemModules := result.ModuleForTests("system-modules", "android_common") | 
|  | prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs | 
|  |  | 
|  | // The expected paths are the header jars from the renamed prebuilt input modules. | 
|  | expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2") | 
|  | android.AssertArrayString(t, "renamed prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings()) | 
|  | } | 
|  |  | 
|  | func TestJavaSystemModulesMixSourceAndPrebuilt(t *testing.T) { | 
|  | result := android.GroupFixturePreparers( | 
|  | prepareForJavaTest, | 
|  | addSourceSystemModules, | 
|  | addPrebuiltSystemModules, | 
|  | ).RunTest(t) | 
|  |  | 
|  | // check the existence of the source module | 
|  | sourceSystemModules := result.ModuleForTests("system-modules", "android_common") | 
|  | sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs | 
|  |  | 
|  | // The expected paths are the header jars from the source input modules. | 
|  | expectedSourcePaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "system-module1", "system-module2") | 
|  | android.AssertArrayString(t, "source system modules inputs", expectedSourcePaths, sourceInputs.RelativeToTop().Strings()) | 
|  |  | 
|  | // check the existence of the renamed prebuilt module | 
|  | prebuiltSystemModules := result.ModuleForTests("prebuilt_system-modules", "android_common") | 
|  | prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs | 
|  |  | 
|  | // The expected paths are the header jars from the renamed prebuilt input modules. | 
|  | expectedPrebuiltPaths := getModuleHeaderJarsAsRelativeToTopPaths(result, "prebuilt_system-module1", "prebuilt_system-module2") | 
|  | android.AssertArrayString(t, "prebuilt system modules inputs", expectedPrebuiltPaths, prebuiltInputs.RelativeToTop().Strings()) | 
|  | } |