Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ff53da9 authored by Yu Liu's avatar Yu Liu Committed by Gerrit Code Review
Browse files

Merge "Support apex_test."

parents ffd5b972 4c212ce0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -928,6 +928,8 @@ type CommonAttributes struct {
	Tags bazel.StringListAttribute

	Applicable_licenses bazel.LabelListAttribute

	Testonly *bool
}

// constraintAttributes represents Bazel attributes pertaining to build constraints,
+21 −6
Original line number Diff line number Diff line
@@ -17,13 +17,14 @@
package apex

import (
	"android/soong/bazel/cquery"
	"fmt"
	"path/filepath"
	"regexp"
	"sort"
	"strings"

	"android/soong/bazel/cquery"

	"github.com/google/blueprint"
	"github.com/google/blueprint/bootstrap"
	"github.com/google/blueprint/proptools"
@@ -47,7 +48,7 @@ func init() {

func registerApexBuildComponents(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("apex", BundleFactory)
	ctx.RegisterModuleType("apex_test", testApexBundleFactory)
	ctx.RegisterModuleType("apex_test", TestApexBundleFactory)
	ctx.RegisterModuleType("apex_vndk", vndkApexBundleFactory)
	ctx.RegisterModuleType("apex_defaults", defaultsFactory)
	ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
@@ -2563,7 +2564,7 @@ func ApexBundleFactory(testApex bool) android.Module {

// apex_test is an APEX for testing. The difference from the ordinary apex module type is that
// certain compatibility checks such as apex_available are not done for apex_test.
func testApexBundleFactory() android.Module {
func TestApexBundleFactory() android.Module {
	bundle := newApexBundle()
	bundle.testApex = true
	return bundle
@@ -3359,6 +3360,7 @@ type bazelApexBundleAttributes struct {
	Compressible          bazel.BoolAttribute
	Package_name          *string
	Logging_parent        *string
	Tests                 bazel.LabelListAttribute
}

type convertedNativeSharedLibs struct {
@@ -3368,13 +3370,19 @@ type convertedNativeSharedLibs struct {

// ConvertWithBp2build performs bp2build conversion of an apex
func (a *apexBundle) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
	// We do not convert apex_test modules at this time
	if ctx.ModuleType() != "apex" {
	// We only convert apex and apex_test modules at this time
	if ctx.ModuleType() != "apex" && ctx.ModuleType() != "apex_test" {
		return
	}

	attrs, props := convertWithBp2build(a, ctx)
	ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, &attrs)
	commonAttrs := android.CommonAttributes{
		Name: a.Name(),
	}
	if a.testApex {
		commonAttrs.Testonly = proptools.BoolPtr(a.testApex)
	}
	ctx.CreateBazelTargetModule(props, commonAttrs, &attrs)
}

func convertWithBp2build(a *apexBundle, ctx android.TopDownMutatorContext) (bazelApexBundleAttributes, bazel.BazelTargetModuleProperties) {
@@ -3441,6 +3449,12 @@ func convertWithBp2build(a *apexBundle, ctx android.TopDownMutatorContext) (baze
	binaries := android.BazelLabelForModuleDeps(ctx, a.properties.ApexNativeDependencies.Binaries)
	binariesLabelListAttribute := bazel.MakeLabelListAttribute(binaries)

	var testsAttrs bazel.LabelListAttribute
	if a.testApex && len(a.properties.ApexNativeDependencies.Tests) > 0 {
		tests := android.BazelLabelForModuleDeps(ctx, a.properties.ApexNativeDependencies.Tests)
		testsAttrs = bazel.MakeLabelListAttribute(tests)
	}

	var updatableAttribute bazel.BoolAttribute
	if a.properties.Updatable != nil {
		updatableAttribute.Value = a.properties.Updatable
@@ -3483,6 +3497,7 @@ func convertWithBp2build(a *apexBundle, ctx android.TopDownMutatorContext) (baze
		Compressible:          compressibleAttribute,
		Package_name:          packageName,
		Logging_parent:        loggingParent,
		Tests:                 testsAttrs,
	}

	props := bazel.BazelTargetModuleProperties{
+26 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ func registerApexModuleTypes(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
	ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory)
	ctx.RegisterModuleType("cc_test", cc.TestFactory)
}

func runOverrideApexTestCase(t *testing.T, tc Bp2buildTestCase) {
@@ -1249,3 +1250,28 @@ override_apex {
			}),
		}})
}

func TestApexTestBundleSimple(t *testing.T) {
	runApexTestCase(t, Bp2buildTestCase{
		Description:                "apex_test - simple",
		ModuleTypeUnderTest:        "apex_test",
		ModuleTypeUnderTestFactory: apex.TestApexBundleFactory,
		Filesystem:                 map[string]string{},
		Blueprint: `
cc_test { name: "cc_test_1", bazel_module: { bp2build_available: false } }

apex_test {
	name: "test_com.android.apogee",
	file_contexts: "file_contexts_file",
	tests: ["cc_test_1"],
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("apex", "test_com.android.apogee", AttrNameToString{
				"file_contexts": `"file_contexts_file"`,
				"manifest":      `"apex_manifest.json"`,
				"testonly":      `True`,
				"tests":         `[":cc_test_1"]`,
			}),
		}})
}