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.
|
// Tests if the module comes from an updatable APEX.
|
||||||
Updatable() bool
|
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 {
|
type ApexProperties struct {
|
||||||
|
@ -151,6 +156,11 @@ func (m *ApexModuleBase) ApexAvailable() []string {
|
||||||
return m.ApexProperties.Apex_available
|
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) {
|
func (m *ApexModuleBase) BuildForApexes(apexes []ApexInfo) {
|
||||||
m.apexVariationsLock.Lock()
|
m.apexVariationsLock.Lock()
|
||||||
defer m.apexVariationsLock.Unlock()
|
defer m.apexVariationsLock.Unlock()
|
||||||
|
|
|
@ -4533,6 +4533,58 @@ func TestNoUpdatableJarsInBootImage(t *testing.T) {
|
||||||
testNoUpdatableJarsInBootImage(t, "", bp, transform)
|
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) {
|
func TestMain(m *testing.M) {
|
||||||
run := func() int {
|
run := func() int {
|
||||||
setUp()
|
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
|
// always link to non-stub variant
|
||||||
useThisDep = !depIsStubs
|
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 {
|
} else {
|
||||||
// If building for APEX, use stubs only when it is not from
|
// If building for APEX, use stubs only when it is not from
|
||||||
// the same APEX
|
// 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.
|
// Return true if the module is ever installable.
|
||||||
func (c *Module) EverInstallable() bool {
|
func (c *Module) EverInstallable() bool {
|
||||||
return c.installer != nil &&
|
return c.installer != nil &&
|
||||||
|
|
|
@ -29,6 +29,11 @@ type TestProperties struct {
|
||||||
|
|
||||||
// if set, use the isolated gtest runner. Defaults to false.
|
// if set, use the isolated gtest runner. Defaults to false.
|
||||||
Isolated *bool
|
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.
|
// Test option struct.
|
||||||
|
@ -215,6 +220,10 @@ func (test *testDecorator) gtest() bool {
|
||||||
return BoolDefault(test.Properties.Gtest, true)
|
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 {
|
func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
if !test.gtest() {
|
if !test.gtest() {
|
||||||
return flags
|
return flags
|
||||||
|
|
Loading…
Reference in New Issue