diff --git a/aconfig/init.go b/aconfig/init.go index 3ed5faf6a..7e283ea47 100644 --- a/aconfig/init.go +++ b/aconfig/init.go @@ -44,6 +44,7 @@ var ( Command: `rm -rf ${out}.tmp` + ` && mkdir -p ${out}.tmp` + ` && ${aconfig} create-java-lib` + + ` --mode ${mode}` + ` --cache ${in}` + ` --out ${out}.tmp` + ` && $soong_zip -write_if_changed -jar -o ${out} -C ${out}.tmp -D ${out}.tmp` + @@ -53,7 +54,7 @@ var ( "$soong_zip", }, Restat: true, - }) + }, "mode") // For java_aconfig_library: Generate java file cppRule = pctx.AndroidStaticRule("cc_aconfig_library", diff --git a/aconfig/java_aconfig_library.go b/aconfig/java_aconfig_library.go index 53b2b10cf..53f8bd1ba 100644 --- a/aconfig/java_aconfig_library.go +++ b/aconfig/java_aconfig_library.go @@ -30,6 +30,9 @@ var declarationsTag = declarationsTagType{} type JavaAconfigDeclarationsLibraryProperties struct { // name of the aconfig_declarations module to generate a library for Aconfig_declarations string + + // whether to generate test mode version of the library + Test bool } type JavaAconfigDeclarationsLibraryCallbacks struct { @@ -61,11 +64,20 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild // Generate the action to build the srcjar srcJarPath := android.PathForModuleGen(ctx, ctx.ModuleName()+".srcjar") + var mode string + if callbacks.properties.Test { + mode = "test" + } else { + mode = "production" + } ctx.Build(pctx, android.BuildParams{ Rule: javaRule, Input: declarations.IntermediatePath, Output: srcJarPath, Description: "aconfig.srcjar", + Args: map[string]string{ + "mode": mode, + }, }) // Tell the java module about the .aconfig files, so they can be propagated up the dependency chain. diff --git a/aconfig/java_aconfig_library_test.go b/aconfig/java_aconfig_library_test.go index 1808290ee..af50848f1 100644 --- a/aconfig/java_aconfig_library_test.go +++ b/aconfig/java_aconfig_library_test.go @@ -15,6 +15,7 @@ package aconfig import ( + "fmt" "strings" "testing" @@ -152,3 +153,39 @@ func TestAndroidMkBinaryThatLinksAgainstAar(t *testing.T) { runJavaAndroidMkTest(t, bp) } + +func testCodegenMode(t *testing.T, bpMode string, ruleMode string) { + result := android.GroupFixturePreparers( + PrepareForTestWithAconfigBuildComponents, + java.PrepareForTestWithJavaDefaultModules). + ExtendWithErrorHandler(android.FixtureExpectsNoErrors). + RunTestWithBp(t, fmt.Sprintf(` + aconfig_declarations { + name: "my_aconfig_declarations", + package: "com.example.package", + srcs: ["foo.aconfig"], + } + + java_aconfig_library { + name: "my_java_aconfig_library", + aconfig_declarations: "my_aconfig_declarations", + %s + } + `, bpMode)) + + module := result.ModuleForTests("my_java_aconfig_library", "android_common") + rule := module.Rule("java_aconfig_library") + android.AssertStringEquals(t, "rule must contain test mode", rule.Args["mode"], ruleMode) +} + +func TestDefaultProdMode(t *testing.T) { + testCodegenMode(t, "", "production") +} + +func TestProdMode(t *testing.T) { + testCodegenMode(t, "test: false,", "production") +} + +func TestTestMode(t *testing.T) { + testCodegenMode(t, "test: true,", "test") +}