diff --git a/java/system_modules_test.go b/java/system_modules_test.go
index d2fa2b1..a8d7b02 100644
--- a/java/system_modules_test.go
+++ b/java/system_modules_test.go
@@ -16,10 +16,21 @@
 
 import (
 	"testing"
+
+	"android/soong/android"
 )
 
-func TestJavaSystemModules(t *testing.T) {
-	result := javaFixtureFactory.RunTestWithBp(t, `
+func normalizedPathsToHeaderJars(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, result.NormalizePathsForTesting(info.HeaderJars)...)
+	}
+	return paths
+}
+
+var addSourceSystemModules = android.FixtureAddTextFile("source/Android.bp", `
 		java_system_modules {
 			name: "system-modules",
 			libs: ["system-module1", "system-module2"],
@@ -36,21 +47,21 @@
 			sdk_version: "none",
 			system_modules: "none",
 		}
-		`)
+`)
 
-	// check the existence of the module
-	systemModules := result.ModuleForTests("system-modules", "android_common")
+func TestJavaSystemModules(t *testing.T) {
+	result := javaFixtureFactory.RunTest(t, addSourceSystemModules)
 
-	cmd := systemModules.Rule("jarsTosystemModules")
+	// check the existence of the source module
+	sourceSystemModules := result.ModuleForTests("system-modules", "android_common")
+	sourceInputs := sourceSystemModules.Rule("jarsTosystemModules").Inputs
 
-	// make sure the command compiles against the supplied modules.
-	for _, module := range []string{"system-module1.jar", "system-module2.jar"} {
-		result.AssertStringDoesContain("system modules classpath", cmd.Args["classpath"], module)
-	}
+	// The expected paths are the header jars from the source input modules.
+	expectedSourcePaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
+	result.AssertArrayString("source system modules inputs", expectedSourcePaths, result.NormalizePathsForTesting(sourceInputs))
 }
 
-func TestJavaSystemModulesImport(t *testing.T) {
-	result := javaFixtureFactory.RunTestWithBp(t, `
+var addPrebuiltSystemModules = android.FixtureAddTextFile("prebuilts/Android.bp", `
 		java_system_modules_import {
 			name: "system-modules",
 			libs: ["system-module1", "system-module2"],
@@ -63,15 +74,40 @@
 			name: "system-module2",
 			jars: ["b.jar"],
 		}
-		`)
+`)
 
-	// check the existence of the module
-	systemModules := result.ModuleForTests("system-modules", "android_common")
+func TestJavaSystemModulesImport(t *testing.T) {
+	result := javaFixtureFactory.RunTest(t, addPrebuiltSystemModules)
 
-	cmd := systemModules.Rule("jarsTosystemModules")
+	// check the existence of the renamed prebuilt module
+	prebuiltSystemModules := result.ModuleForTests("system-modules", "android_common")
+	prebuiltInputs := prebuiltSystemModules.Rule("jarsTosystemModules").Inputs
 
-	// make sure the command compiles against the supplied modules.
-	for _, module := range []string{"system-module1.jar", "system-module2.jar"} {
-		result.AssertStringDoesContain("system modules classpath", cmd.Args["classpath"], module)
-	}
+	// The expected paths are the header jars from the renamed prebuilt input modules.
+	expectedPrebuiltPaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
+	result.AssertArrayString("renamed prebuilt system modules inputs", expectedPrebuiltPaths, result.NormalizePathsForTesting(prebuiltInputs))
+}
+
+func TestJavaSystemModulesMixSourceAndPrebuilt(t *testing.T) {
+	result := javaFixtureFactory.RunTest(t,
+		addSourceSystemModules,
+		addPrebuiltSystemModules,
+	)
+
+	// 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 := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
+	result.AssertArrayString("source system modules inputs", expectedSourcePaths, result.NormalizePathsForTesting(sourceInputs))
+
+	// 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.
+	// TODO(b/182402568) - these should be depending on the prebuilts
+	expectedPrebuiltPaths := normalizedPathsToHeaderJars(result, "system-module1", "system-module2")
+	result.AssertArrayString("prebuilt system modules inputs", expectedPrebuiltPaths, result.NormalizePathsForTesting(prebuiltInputs))
 }
