| // 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 := result.ModuleProvider(module, JavaInfoProvider).(JavaInfo) | 
 | 		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()) | 
 | } |