Merge "Add test_for property" am: 70b5c21270
am: b739f8d870
Change-Id: If02ebcfee4195fbac05dd0b902958236c5a6346d
This commit is contained in:
commit
a7ca0120ad
|
@ -108,6 +108,11 @@ type ApexModule interface {
|
|||
|
||||
// Tests if the module comes from an updatable APEX.
|
||||
Updatable() bool
|
||||
|
||||
// List of APEXes that this module tests. The module has access to
|
||||
// the private part of the listed APEXes even when it is not included in the
|
||||
// APEXes.
|
||||
TestFor() []string
|
||||
}
|
||||
|
||||
type ApexProperties struct {
|
||||
|
@ -151,6 +156,11 @@ func (m *ApexModuleBase) ApexAvailable() []string {
|
|||
return m.ApexProperties.Apex_available
|
||||
}
|
||||
|
||||
func (m *ApexModuleBase) TestFor() []string {
|
||||
// To be implemented by concrete types inheriting ApexModuleBase
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ApexModuleBase) BuildForApexes(apexes []ApexInfo) {
|
||||
m.apexVariationsLock.Lock()
|
||||
defer m.apexVariationsLock.Unlock()
|
||||
|
|
|
@ -4533,6 +4533,58 @@ func TestNoUpdatableJarsInBootImage(t *testing.T) {
|
|||
testNoUpdatableJarsInBootImage(t, "", bp, transform)
|
||||
}
|
||||
|
||||
func TestTestFor(t *testing.T) {
|
||||
ctx, _ := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
native_shared_libs: ["mylib", "myprivlib"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib",
|
||||
srcs: ["mylib.cpp"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
stubs: {
|
||||
versions: ["1"],
|
||||
},
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "myprivlib",
|
||||
srcs: ["mylib.cpp"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
|
||||
|
||||
cc_test {
|
||||
name: "mytest",
|
||||
gtest: false,
|
||||
srcs: ["mylib.cpp"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
shared_libs: ["mylib", "myprivlib"],
|
||||
test_for: ["myapex"]
|
||||
}
|
||||
`)
|
||||
|
||||
// the test 'mytest' is a test for the apex, therefore is linked to the
|
||||
// actual implementation of mylib instead of its stub.
|
||||
ldFlags := ctx.ModuleForTests("mytest", "android_arm64_armv8-a").Rule("ld").Args["libFlags"]
|
||||
ensureContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared/mylib.so")
|
||||
ensureNotContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared_1/mylib.so")
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
run := func() int {
|
||||
setUp()
|
||||
|
|
19
cc/cc.go
19
cc/cc.go
|
@ -2338,6 +2338,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||
// always link to non-stub variant
|
||||
useThisDep = !depIsStubs
|
||||
}
|
||||
for _, testFor := range c.TestFor() {
|
||||
// Another exception: if this module is bundled with an APEX, then
|
||||
// it is linked with the non-stub variant of a module in the APEX
|
||||
// as if this is part of the APEX.
|
||||
if android.DirectlyInApex(testFor, depName) {
|
||||
useThisDep = !depIsStubs
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If building for APEX, use stubs only when it is not from
|
||||
// the same APEX
|
||||
|
@ -2764,6 +2773,16 @@ func (c *Module) AvailableFor(what string) bool {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *Module) TestFor() []string {
|
||||
if test, ok := c.linker.(interface {
|
||||
testFor() []string
|
||||
}); ok {
|
||||
return test.testFor()
|
||||
} else {
|
||||
return c.ApexModuleBase.TestFor()
|
||||
}
|
||||
}
|
||||
|
||||
// Return true if the module is ever installable.
|
||||
func (c *Module) EverInstallable() bool {
|
||||
return c.installer != nil &&
|
||||
|
|
|
@ -29,6 +29,11 @@ type TestProperties struct {
|
|||
|
||||
// if set, use the isolated gtest runner. Defaults to false.
|
||||
Isolated *bool
|
||||
|
||||
// List of APEXes that this module tests. The module has access to
|
||||
// the private part of the listed APEXes even when it is not included in the
|
||||
// APEXes.
|
||||
Test_for []string
|
||||
}
|
||||
|
||||
// Test option struct.
|
||||
|
@ -215,6 +220,10 @@ func (test *testDecorator) gtest() bool {
|
|||
return BoolDefault(test.Properties.Gtest, true)
|
||||
}
|
||||
|
||||
func (test *testDecorator) testFor() []string {
|
||||
return test.Properties.Test_for
|
||||
}
|
||||
|
||||
func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||
if !test.gtest() {
|
||||
return flags
|
||||
|
|
Loading…
Reference in New Issue