Added Strict_mode logic catch direct usage of Robolectric reference
When Strict_Mode is true, exclude Robolectric_all-target_upstream from the build pass, instead use the newly added robolectric_all-target_runtime, which compiles the robolectric lib into jar and later being added to final test jar. Test: atest MyRoboTests Bug: 334089788 Change-Id: I59291e3cc478e73f65950886853732ff0c5c5db7
This commit is contained in:
parent
a4362b937a
commit
cab89b51c3
1 changed files with 19 additions and 5 deletions
|
@ -46,6 +46,7 @@ const robolectricPrebuiltLibPattern = "platform-robolectric-%s-prebuilt"
|
|||
var (
|
||||
roboCoverageLibsTag = dependencyTag{name: "roboCoverageLibs"}
|
||||
roboRuntimesTag = dependencyTag{name: "roboRuntimes"}
|
||||
roboRuntimeOnlyTag = dependencyTag{name: "roboRuntimeOnlyTag"}
|
||||
)
|
||||
|
||||
type robolectricProperties struct {
|
||||
|
@ -70,6 +71,9 @@ type robolectricProperties struct {
|
|||
// Use /external/robolectric rather than /external/robolectric-shadows as the version of robolectric
|
||||
// to use. /external/robolectric closely tracks github's master, and will fully replace /external/robolectric-shadows
|
||||
Upstream *bool
|
||||
|
||||
// Use strict mode to limit access of Robolectric API directly. See go/roboStrictMode
|
||||
Strict_mode *bool
|
||||
}
|
||||
|
||||
type robolectricTest struct {
|
||||
|
@ -112,7 +116,7 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||
|
||||
if v := String(r.robolectricProperties.Robolectric_prebuilt_version); v != "" {
|
||||
ctx.AddVariationDependencies(nil, libTag, fmt.Sprintf(robolectricPrebuiltLibPattern, v))
|
||||
} else {
|
||||
} else if !proptools.Bool(r.robolectricProperties.Strict_mode) {
|
||||
if proptools.Bool(r.robolectricProperties.Upstream) {
|
||||
ctx.AddVariationDependencies(nil, libTag, robolectricCurrentLib+"_upstream")
|
||||
} else {
|
||||
|
@ -120,6 +124,10 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||
}
|
||||
}
|
||||
|
||||
if proptools.Bool(r.robolectricProperties.Strict_mode) {
|
||||
ctx.AddVariationDependencies(nil, roboRuntimeOnlyTag, robolectricCurrentLib+"_upstream")
|
||||
}
|
||||
|
||||
ctx.AddVariationDependencies(nil, libTag, robolectricDefaultLibs...)
|
||||
|
||||
ctx.AddVariationDependencies(nil, roboCoverageLibsTag, r.robolectricProperties.Coverage_libs...)
|
||||
|
@ -192,19 +200,25 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
|||
combinedJarJars = append(combinedJarJars, instrumentedApp.implementationAndResourcesJar)
|
||||
}
|
||||
|
||||
handleLibDeps := func(dep android.Module) {
|
||||
handleLibDeps := func(dep android.Module, runtimeOnly bool) {
|
||||
m, _ := android.OtherModuleProvider(ctx, dep, JavaInfoProvider)
|
||||
r.libs = append(r.libs, ctx.OtherModuleName(dep))
|
||||
if !runtimeOnly {
|
||||
r.libs = append(r.libs, ctx.OtherModuleName(dep))
|
||||
}
|
||||
if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) {
|
||||
combinedJarJars = append(combinedJarJars, m.ImplementationAndResourcesJars...)
|
||||
}
|
||||
}
|
||||
|
||||
for _, dep := range ctx.GetDirectDepsWithTag(libTag) {
|
||||
handleLibDeps(dep)
|
||||
handleLibDeps(dep, false)
|
||||
}
|
||||
for _, dep := range ctx.GetDirectDepsWithTag(sdkLibTag) {
|
||||
handleLibDeps(dep)
|
||||
handleLibDeps(dep, false)
|
||||
}
|
||||
// handle the runtimeOnly tag for strict_mode
|
||||
for _, dep := range ctx.GetDirectDepsWithTag(roboRuntimeOnlyTag) {
|
||||
handleLibDeps(dep, true)
|
||||
}
|
||||
|
||||
r.combinedJar = android.PathForModuleOut(ctx, "robolectric_combined", r.outputFile.Base())
|
||||
|
|
Loading…
Reference in a new issue