diff --git a/python/python_test.go b/python/python_test.go
index 176c6ec..67b1982 100644
--- a/python/python_test.go
+++ b/python/python_test.go
@@ -29,12 +29,11 @@
 )
 
 type pyModule struct {
-	name           string
-	actualVersion  string
-	pyRunfiles     []string
-	depsPyRunfiles []string
-	parSpec        string
-	depsParSpecs   []string
+	name          string
+	actualVersion string
+	pyRunfiles    []string
+	srcsZip       string
+	depsSrcsZips  []string
 }
 
 var (
@@ -313,14 +312,10 @@
 						"runfiles/e/default_py3.py",
 						"runfiles/e/file4.py",
 					},
-					depsPyRunfiles: []string{
-						"runfiles/a/b/file1.py",
-						"runfiles/c/d/file2.py",
-					},
-					parSpec: "-P runfiles/e -C dir/ -l @prefix@/.intermediates/dir/bin/PY3/dir_.list",
-					depsParSpecs: []string{
-						"-P runfiles/a/b -C dir/ -l @prefix@/.intermediates/dir/lib5/PY3/dir_.list",
-						"-P runfiles/c/d -C dir/ -l @prefix@/.intermediates/dir/lib6/PY3/dir_.list",
+					srcsZip: "@prefix@/.intermediates/dir/bin/PY3/bin.zip",
+					depsSrcsZips: []string{
+						"@prefix@/.intermediates/dir/lib5/PY3/lib5.zip",
+						"@prefix@/.intermediates/dir/lib6/PY3/lib6.zip",
 					},
 				},
 			},
@@ -356,8 +351,9 @@
 					testErrs = append(testErrs,
 						expectModule(t, ctx, buildDir, e.name,
 							e.actualVersion,
-							e.pyRunfiles, e.depsPyRunfiles,
-							e.parSpec, e.depsParSpecs)...)
+							e.srcsZip,
+							e.pyRunfiles,
+							e.depsSrcsZips)...)
 				}
 			}
 			fail(t, testErrs)
@@ -388,9 +384,8 @@
 	return
 }
 
-func expectModule(t *testing.T, ctx *android.TestContext, buildDir, name, variant string,
-	expPyRunfiles, expDepsPyRunfiles []string,
-	expParSpec string, expDepsParSpecs []string) (testErrs []error) {
+func expectModule(t *testing.T, ctx *android.TestContext, buildDir, name, variant, expectedSrcsZip string,
+	expectedPyRunfiles, expectedDepsSrcsZips []string) (testErrs []error) {
 	module := ctx.ModuleForTests(name, variant)
 
 	base, baseOk := module.Module().(*Module)
@@ -398,47 +393,36 @@
 		t.Fatalf("%s is not Python module!", name)
 	}
 
-	actPyRunfiles := []string{}
+	actualPyRunfiles := []string{}
 	for _, path := range base.srcsPathMappings {
-		actPyRunfiles = append(actPyRunfiles, path.dest)
+		actualPyRunfiles = append(actualPyRunfiles, path.dest)
 	}
 
-	if !reflect.DeepEqual(actPyRunfiles, expPyRunfiles) {
+	if !reflect.DeepEqual(actualPyRunfiles, expectedPyRunfiles) {
 		testErrs = append(testErrs, errors.New(fmt.Sprintf(
 			`binary "%s" variant "%s" has unexpected pyRunfiles: %q!`,
 			base.Name(),
 			base.properties.Actual_version,
-			actPyRunfiles)))
+			actualPyRunfiles)))
 	}
 
-	if !reflect.DeepEqual(base.depsPyRunfiles, expDepsPyRunfiles) {
+	if base.srcsZip.String() != strings.Replace(expectedSrcsZip, "@prefix@", buildDir, 1) {
 		testErrs = append(testErrs, errors.New(fmt.Sprintf(
-			`binary "%s" variant "%s" has unexpected depsPyRunfiles: %q!`,
+			`binary "%s" variant "%s" has unexpected srcsZip: %q!`,
 			base.Name(),
 			base.properties.Actual_version,
-			base.depsPyRunfiles)))
+			base.srcsZip)))
 	}
 
-	if base.parSpec.soongParArgs() != strings.Replace(expParSpec, "@prefix@", buildDir, 1) {
+	for i, _ := range expectedDepsSrcsZips {
+		expectedDepsSrcsZips[i] = strings.Replace(expectedDepsSrcsZips[i], "@prefix@", buildDir, 1)
+	}
+	if !reflect.DeepEqual(base.depsSrcsZips.Strings(), expectedDepsSrcsZips) {
 		testErrs = append(testErrs, errors.New(fmt.Sprintf(
-			`binary "%s" variant "%s" has unexpected parSpec: %q!`,
+			`binary "%s" variant "%s" has unexpected depsSrcsZips: %q!`,
 			base.Name(),
 			base.properties.Actual_version,
-			base.parSpec.soongParArgs())))
-	}
-
-	actDepsParSpecs := []string{}
-	for i, p := range base.depsParSpecs {
-		actDepsParSpecs = append(actDepsParSpecs, p.soongParArgs())
-		expDepsParSpecs[i] = strings.Replace(expDepsParSpecs[i], "@prefix@", buildDir, 1)
-	}
-
-	if !reflect.DeepEqual(actDepsParSpecs, expDepsParSpecs) {
-		testErrs = append(testErrs, errors.New(fmt.Sprintf(
-			`binary "%s" variant "%s" has unexpected depsParSpecs: %q!`,
-			base.Name(),
-			base.properties.Actual_version,
-			actDepsParSpecs)))
+			base.depsSrcsZips)))
 	}
 
 	return
