Move filesystem into Config
The filesystem object was available through ModuleContext.Fs(), but gives too much access to the filesystem without enforicing correct dependencies. In order to support sandboxing the soong_build process move the filesystem into the Config. The next change will make it private. Bug: 146437378 Test: all Soong tests Change-Id: I5d3ae9108f120fd335b21efd612aefa078378813
This commit is contained in:
parent
572aeed6a4
commit
98be1bb00f
|
@ -43,14 +43,6 @@ func customModuleFactory() Module {
|
|||
}
|
||||
|
||||
func TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
config.inMake = true // Enable androidmk Singleton
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
||||
ctx.RegisterModuleType("custom", customModuleFactory)
|
||||
ctx.Register()
|
||||
|
||||
bp := `
|
||||
custom {
|
||||
name: "foo",
|
||||
|
@ -60,9 +52,13 @@ func TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testin
|
|||
}
|
||||
`
|
||||
|
||||
ctx.MockFileSystem(map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
})
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
config.inMake = true // Enable androidmk Singleton
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
||||
ctx.RegisterModuleType("custom", customModuleFactory)
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -289,10 +289,6 @@ func TestArchMutator(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
config func(Config)
|
||||
|
@ -337,11 +333,11 @@ func TestArchMutator(t *testing.T) {
|
|||
|
||||
for _, tt := range testCases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
config := TestArchConfig(buildDir, nil, bp, nil)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("module", archTestModuleFactory)
|
||||
ctx.MockFileSystem(mockFS)
|
||||
ctx.Register()
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
ctx.Register(config)
|
||||
if tt.config != nil {
|
||||
tt.config(config)
|
||||
}
|
||||
|
|
|
@ -25,7 +25,9 @@ import (
|
|||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/bootstrap"
|
||||
"github.com/google/blueprint/pathtools"
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
|
@ -115,6 +117,9 @@ type config struct {
|
|||
|
||||
stopBefore bootstrap.StopBefore
|
||||
|
||||
fs pathtools.FileSystem
|
||||
mockBpList string
|
||||
|
||||
OncePer
|
||||
}
|
||||
|
||||
|
@ -200,7 +205,7 @@ func saveToConfigFile(config jsonConfigurable, filename string) error {
|
|||
}
|
||||
|
||||
// TestConfig returns a Config object suitable for using for tests
|
||||
func TestConfig(buildDir string, env map[string]string) Config {
|
||||
func TestConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
|
||||
envCopy := make(map[string]string)
|
||||
for k, v := range env {
|
||||
envCopy[k] = v
|
||||
|
@ -231,6 +236,8 @@ func TestConfig(buildDir string, env map[string]string) Config {
|
|||
}
|
||||
config.TestProductVariables = &config.productVariables
|
||||
|
||||
config.mockFileSystem(bp, fs)
|
||||
|
||||
if err := config.fromEnv(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -238,8 +245,8 @@ func TestConfig(buildDir string, env map[string]string) Config {
|
|||
return Config{config}
|
||||
}
|
||||
|
||||
func TestArchConfigNativeBridge(buildDir string, env map[string]string) Config {
|
||||
testConfig := TestArchConfig(buildDir, env)
|
||||
func TestArchConfigNativeBridge(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
|
||||
testConfig := TestArchConfig(buildDir, env, bp, fs)
|
||||
config := testConfig.config
|
||||
|
||||
config.Targets[Android] = []Target{
|
||||
|
@ -252,8 +259,8 @@ func TestArchConfigNativeBridge(buildDir string, env map[string]string) Config {
|
|||
return testConfig
|
||||
}
|
||||
|
||||
func TestArchConfigFuchsia(buildDir string, env map[string]string) Config {
|
||||
testConfig := TestConfig(buildDir, env)
|
||||
func TestArchConfigFuchsia(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
|
||||
testConfig := TestConfig(buildDir, env, bp, fs)
|
||||
config := testConfig.config
|
||||
|
||||
config.Targets = map[OsType][]Target{
|
||||
|
@ -269,8 +276,8 @@ func TestArchConfigFuchsia(buildDir string, env map[string]string) Config {
|
|||
}
|
||||
|
||||
// TestConfig returns a Config object suitable for using for tests that need to run the arch mutator
|
||||
func TestArchConfig(buildDir string, env map[string]string) Config {
|
||||
testConfig := TestConfig(buildDir, env)
|
||||
func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
|
||||
testConfig := TestConfig(buildDir, env, bp, fs)
|
||||
config := testConfig.config
|
||||
|
||||
config.Targets = map[OsType][]Target{
|
||||
|
@ -312,6 +319,8 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
|
|||
srcDir: srcDir,
|
||||
buildDir: buildDir,
|
||||
multilibConflicts: make(map[ArchType]bool),
|
||||
|
||||
fs: pathtools.OsFs,
|
||||
}
|
||||
|
||||
config.deviceConfig = &deviceConfig{
|
||||
|
@ -387,6 +396,36 @@ func NewConfig(srcDir, buildDir string) (Config, error) {
|
|||
return Config{config}, nil
|
||||
}
|
||||
|
||||
// mockFileSystem replaces all reads with accesses to the provided map of
|
||||
// filenames to contents stored as a byte slice.
|
||||
func (c *config) mockFileSystem(bp string, fs map[string][]byte) {
|
||||
mockFS := map[string][]byte{}
|
||||
|
||||
if _, exists := mockFS["Android.bp"]; !exists {
|
||||
mockFS["Android.bp"] = []byte(bp)
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
// no module list file specified; find every file named Blueprints or Android.bp
|
||||
pathsToParse := []string{}
|
||||
for candidate := range mockFS {
|
||||
base := filepath.Base(candidate)
|
||||
if base == "Blueprints" || base == "Android.bp" {
|
||||
pathsToParse = append(pathsToParse, candidate)
|
||||
}
|
||||
}
|
||||
if len(pathsToParse) < 1 {
|
||||
panic(fmt.Sprintf("No Blueprint or Android.bp files found in mock filesystem: %v\n", mockFS))
|
||||
}
|
||||
mockFS[blueprint.MockModuleListFile] = []byte(strings.Join(pathsToParse, "\n"))
|
||||
|
||||
c.fs = pathtools.MockFs(mockFS)
|
||||
c.mockBpList = blueprint.MockModuleListFile
|
||||
}
|
||||
|
||||
func (c *config) fromEnv() error {
|
||||
switch c.Getenv("EXPERIMENTAL_JAVA_LANGUAGE_LEVEL_9") {
|
||||
case "", "true":
|
||||
|
|
|
@ -19,15 +19,11 @@ import (
|
|||
)
|
||||
|
||||
func testCSuiteConfig(test *testing.T, bpFileContents string) *TestContext {
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
config := TestArchConfig(buildDir, nil, bpFileContents, nil)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("csuite_config", CSuiteConfigFactory)
|
||||
ctx.Register()
|
||||
mockFiles := map[string][]byte{
|
||||
"Android.bp": []byte(bpFileContents),
|
||||
}
|
||||
ctx.MockFileSystem(mockFiles)
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(test, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -58,19 +58,6 @@ func defaultsTestDefaultsFactory() Module {
|
|||
}
|
||||
|
||||
func TestDefaultsAllowMissingDependencies(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.SetAllowMissingDependencies(true)
|
||||
|
||||
ctx.RegisterModuleType("test", defaultsTestModuleFactory)
|
||||
ctx.RegisterModuleType("defaults", defaultsTestDefaultsFactory)
|
||||
|
||||
ctx.PreArchMutators(RegisterDefaultsPreArchMutators)
|
||||
|
||||
ctx.Register()
|
||||
|
||||
bp := `
|
||||
defaults {
|
||||
name: "defaults",
|
||||
|
@ -91,9 +78,18 @@ func TestDefaultsAllowMissingDependencies(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
ctx.MockFileSystem(map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
})
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.SetAllowMissingDependencies(true)
|
||||
|
||||
ctx.RegisterModuleType("test", defaultsTestModuleFactory)
|
||||
ctx.RegisterModuleType("defaults", defaultsTestDefaultsFactory)
|
||||
|
||||
ctx.PreArchMutators(RegisterDefaultsPreArchMutators)
|
||||
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -178,15 +178,9 @@ func TestErrorDependsOnDisabledModule(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
ctx.Register()
|
||||
|
||||
config := TestConfig(buildDir, nil)
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -56,7 +56,15 @@ func addMissingDependenciesMutator(ctx TopDownMutatorContext) {
|
|||
}
|
||||
|
||||
func TestMutatorAddMissingDependencies(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
bp := `
|
||||
test {
|
||||
name: "foo",
|
||||
deps_missing_deps: ["regular_missing_dep"],
|
||||
mutator_missing_deps: ["added_missing_dep"],
|
||||
}
|
||||
`
|
||||
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||
|
||||
ctx := NewTestContext()
|
||||
|
@ -67,21 +75,7 @@ func TestMutatorAddMissingDependencies(t *testing.T) {
|
|||
ctx.TopDown("add_missing_dependencies", addMissingDependenciesMutator)
|
||||
})
|
||||
|
||||
bp := `
|
||||
test {
|
||||
name: "foo",
|
||||
deps_missing_deps: ["regular_missing_dep"],
|
||||
mutator_missing_deps: ["added_missing_dep"],
|
||||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
@ -139,15 +133,9 @@ func TestModuleString(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
ctx.Register()
|
||||
|
||||
config := TestConfig(buildDir, nil)
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -633,10 +633,9 @@ func mockFiles(bps map[string]string) (files map[string][]byte) {
|
|||
}
|
||||
|
||||
func setupTestFromFiles(bps map[string][]byte) (ctx *TestContext, errs []error) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, nil, "", bps)
|
||||
|
||||
ctx = NewTestContext()
|
||||
ctx.MockFileSystem(bps)
|
||||
ctx.RegisterModuleType("test_module", newTestModule)
|
||||
ctx.RegisterModuleType("soong_namespace", NamespaceFactory)
|
||||
ctx.Context.RegisterModuleType("blueprint_test_module", newBlueprintTestModule)
|
||||
|
@ -644,7 +643,7 @@ func setupTestFromFiles(bps map[string][]byte) (ctx *TestContext, errs []error)
|
|||
ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
|
||||
ctx.BottomUp("rename", renameMutator)
|
||||
})
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs = ctx.ParseBlueprintsFiles("Android.bp")
|
||||
if len(errs) > 0 {
|
||||
|
|
|
@ -44,11 +44,11 @@ var neverallowTests = []struct {
|
|||
NeverAllow().InDirectDeps("not_allowed_in_direct_deps"),
|
||||
},
|
||||
fs: map[string][]byte{
|
||||
"top/Blueprints": []byte(`
|
||||
"top/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "not_allowed_in_direct_deps",
|
||||
}`),
|
||||
"other/Blueprints": []byte(`
|
||||
"other/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libother",
|
||||
static_libs: ["not_allowed_in_direct_deps"],
|
||||
|
@ -65,7 +65,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "include_dir not allowed to reference art",
|
||||
fs: map[string][]byte{
|
||||
"other/Blueprints": []byte(`
|
||||
"other/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libother",
|
||||
include_dirs: ["art/libdexfile/include"],
|
||||
|
@ -78,7 +78,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "include_dir can reference another location",
|
||||
fs: map[string][]byte{
|
||||
"other/Blueprints": []byte(`
|
||||
"other/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libother",
|
||||
include_dirs: ["another/include"],
|
||||
|
@ -89,7 +89,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "no vndk.enabled under vendor directory",
|
||||
fs: map[string][]byte{
|
||||
"vendor/Blueprints": []byte(`
|
||||
"vendor/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
|
@ -105,7 +105,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "no vndk.enabled under device directory",
|
||||
fs: map[string][]byte{
|
||||
"device/Blueprints": []byte(`
|
||||
"device/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
|
@ -121,7 +121,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "vndk-ext under vendor or device directory",
|
||||
fs: map[string][]byte{
|
||||
"device/Blueprints": []byte(`
|
||||
"device/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libvndk1_ext",
|
||||
vendor: true,
|
||||
|
@ -129,7 +129,7 @@ var neverallowTests = []struct {
|
|||
enabled: true,
|
||||
},
|
||||
}`),
|
||||
"vendor/Blueprints": []byte(`
|
||||
"vendor/Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libvndk2_ext",
|
||||
vendor: true,
|
||||
|
@ -143,7 +143,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "no enforce_vintf_manifest.cflags",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libexample",
|
||||
product_variables: {
|
||||
|
@ -161,7 +161,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "no treble_linker_namespaces.cflags",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libexample",
|
||||
product_variables: {
|
||||
|
@ -178,7 +178,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "libc_bionic_ndk treble_linker_namespaces.cflags",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
cc_library {
|
||||
name: "libc_bionic_ndk",
|
||||
product_variables: {
|
||||
|
@ -192,7 +192,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "dependency on updatable-media",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "needs_updatable_media",
|
||||
libs: ["updatable-media"],
|
||||
|
@ -205,7 +205,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "java_device_for_host",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
java_device_for_host {
|
||||
name: "device_for_host",
|
||||
libs: ["core-libart"],
|
||||
|
@ -219,7 +219,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "sdk_version: \"none\" inside core libraries",
|
||||
fs: map[string][]byte{
|
||||
"libcore/Blueprints": []byte(`
|
||||
"libcore/Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "inside_core_libraries",
|
||||
sdk_version: "none",
|
||||
|
@ -229,7 +229,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "sdk_version: \"none\" outside core libraries",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "outside_core_libraries",
|
||||
sdk_version: "none",
|
||||
|
@ -242,7 +242,7 @@ var neverallowTests = []struct {
|
|||
{
|
||||
name: "sdk_version: \"current\"",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "outside_core_libraries",
|
||||
sdk_version: "current",
|
||||
|
@ -254,31 +254,29 @@ var neverallowTests = []struct {
|
|||
func TestNeverallow(t *testing.T) {
|
||||
for _, test := range neverallowTests {
|
||||
// Create a test per config to allow for test specific config, e.g. test rules.
|
||||
config := TestConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, nil, "", test.fs)
|
||||
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
// If the test has its own rules then use them instead of the default ones.
|
||||
if test.rules != nil {
|
||||
setTestNeverallowRules(config, test.rules)
|
||||
}
|
||||
_, errs := testNeverallow(config, test.fs)
|
||||
_, errs := testNeverallow(config)
|
||||
CheckErrorsAgainstExpectations(t, errs, test.expectedErrors)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func testNeverallow(config Config, fs map[string][]byte) (*TestContext, []error) {
|
||||
func testNeverallow(config Config) (*TestContext, []error) {
|
||||
ctx := NewTestContext()
|
||||
ctx.RegisterModuleType("cc_library", newMockCcLibraryModule)
|
||||
ctx.RegisterModuleType("java_library", newMockJavaLibraryModule)
|
||||
ctx.RegisterModuleType("java_library_host", newMockJavaLibraryModule)
|
||||
ctx.RegisterModuleType("java_device_for_host", newMockJavaLibraryModule)
|
||||
ctx.PostDepsMutators(registerNeverallowMutator)
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
ctx.MockFileSystem(fs)
|
||||
|
||||
_, errs := ctx.ParseBlueprintsFiles("Blueprints")
|
||||
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
||||
if len(errs) > 0 {
|
||||
return ctx, errs
|
||||
}
|
||||
|
|
|
@ -84,14 +84,12 @@ func TestPackage(t *testing.T) {
|
|||
func testPackage(fs map[string][]byte) (*TestContext, []error) {
|
||||
|
||||
// Create a new config per test as visibility information is stored in the config.
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
config := TestArchConfig(buildDir, nil, "", fs)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("package", PackageFactory)
|
||||
ctx.PreArchMutators(RegisterPackageRenamer)
|
||||
ctx.Register()
|
||||
|
||||
ctx.MockFileSystem(fs)
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseBlueprintsFiles(".")
|
||||
if len(errs) > 0 {
|
||||
|
|
|
@ -97,12 +97,6 @@ func TestPathDepsMutator(t *testing.T) {
|
|||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
ctx := NewTestArchContext()
|
||||
|
||||
ctx.RegisterModuleType("test", pathDepsMutatorTestModuleFactory)
|
||||
ctx.RegisterModuleType("filegroup", FileGroupFactory)
|
||||
|
||||
bp := test.bp + `
|
||||
filegroup {
|
||||
name: "a",
|
||||
|
@ -121,13 +115,13 @@ func TestPathDepsMutator(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
config := TestArchConfig(buildDir, nil, bp, nil)
|
||||
ctx := NewTestArchContext()
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
ctx.RegisterModuleType("test", pathDepsMutatorTestModuleFactory)
|
||||
ctx.RegisterModuleType("filegroup", FileGroupFactory)
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -1353,19 +1353,17 @@ func WritablePathsForTesting(strs ...string) WritablePaths {
|
|||
|
||||
type testPathContext struct {
|
||||
config Config
|
||||
fs pathtools.FileSystem
|
||||
}
|
||||
|
||||
func (x *testPathContext) Fs() pathtools.FileSystem { return x.fs }
|
||||
func (x *testPathContext) Fs() pathtools.FileSystem { return x.config.fs }
|
||||
func (x *testPathContext) Config() Config { return x.config }
|
||||
func (x *testPathContext) AddNinjaFileDeps(...string) {}
|
||||
|
||||
// PathContextForTesting returns a PathContext that can be used in tests, for example to create an OutputPath with
|
||||
// PathForOutput.
|
||||
func PathContextForTesting(config Config, fs map[string][]byte) PathContext {
|
||||
func PathContextForTesting(config Config) PathContext {
|
||||
return &testPathContext{
|
||||
config: config,
|
||||
fs: pathtools.MockFs(fs),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -241,8 +241,12 @@ func (m moduleInstallPathContextImpl) InstallBypassMake() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func pathTestConfig(buildDir string) Config {
|
||||
return TestConfig(buildDir, nil, "", nil)
|
||||
}
|
||||
|
||||
func TestPathForModuleInstall(t *testing.T) {
|
||||
testConfig := TestConfig("", nil)
|
||||
testConfig := pathTestConfig("")
|
||||
|
||||
hostTarget := Target{Os: Linux}
|
||||
deviceTarget := Target{Os: Android}
|
||||
|
@ -579,18 +583,19 @@ func TestPathForModuleInstall(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDirectorySortedPaths(t *testing.T) {
|
||||
config := TestConfig("out", nil)
|
||||
|
||||
ctx := PathContextForTesting(config, map[string][]byte{
|
||||
"a.txt": nil,
|
||||
"a/txt": nil,
|
||||
"a/b/c": nil,
|
||||
"a/b/d": nil,
|
||||
"b": nil,
|
||||
"b/b.txt": nil,
|
||||
"a/a.txt": nil,
|
||||
config := TestConfig("out", nil, "", map[string][]byte{
|
||||
"Android.bp": nil,
|
||||
"a.txt": nil,
|
||||
"a/txt": nil,
|
||||
"a/b/c": nil,
|
||||
"a/b/d": nil,
|
||||
"b": nil,
|
||||
"b/b.txt": nil,
|
||||
"a/a.txt": nil,
|
||||
})
|
||||
|
||||
ctx := PathContextForTesting(config)
|
||||
|
||||
makePaths := func() Paths {
|
||||
return Paths{
|
||||
PathForSource(ctx, "a.txt"),
|
||||
|
@ -754,7 +759,7 @@ func TestPathForSource(t *testing.T) {
|
|||
t.Run(f.name, func(t *testing.T) {
|
||||
for _, test := range testCases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
testConfig := TestConfig(test.buildDir, nil)
|
||||
testConfig := pathTestConfig(test.buildDir)
|
||||
ctx := &configErrorWrapper{config: testConfig}
|
||||
_, err := f.f(ctx, test.src)
|
||||
if len(ctx.errors) > 0 {
|
||||
|
@ -886,7 +891,6 @@ type pathForModuleSrcTestCase struct {
|
|||
func testPathForModuleSrc(t *testing.T, buildDir string, tests []pathForModuleSrcTestCase) {
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
ctx := NewTestContext()
|
||||
|
||||
ctx.RegisterModuleType("test", pathForModuleSrcTestModuleFactory)
|
||||
|
@ -920,9 +924,9 @@ func testPathForModuleSrc(t *testing.T, buildDir string, tests []pathForModuleSr
|
|||
"foo/src_special/$": nil,
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
config := TestConfig(buildDir, nil, "", mockFS)
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"fg/Android.bp", "foo/Android.bp", "ofp/Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
@ -1097,14 +1101,6 @@ func TestPathForModuleSrc(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPathsForModuleSrc_AllowMissingDependencies(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.SetAllowMissingDependencies(true)
|
||||
|
||||
ctx.RegisterModuleType("test", pathForModuleSrcTestModuleFactory)
|
||||
|
||||
bp := `
|
||||
test {
|
||||
name: "foo",
|
||||
|
@ -1121,13 +1117,16 @@ func TestPathsForModuleSrc_AllowMissingDependencies(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
ctx := NewTestContext()
|
||||
ctx.SetAllowMissingDependencies(true)
|
||||
|
||||
ctx.RegisterModuleType("test", pathForModuleSrcTestModuleFactory)
|
||||
|
||||
ctx.Register(config)
|
||||
|
||||
ctx.Register()
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
@ -1160,7 +1159,7 @@ func TestPathsForModuleSrc_AllowMissingDependencies(t *testing.T) {
|
|||
|
||||
func ExampleOutputPath_ReplaceExtension() {
|
||||
ctx := &configErrorWrapper{
|
||||
config: TestConfig("out", nil),
|
||||
config: TestConfig("out", nil, "", nil),
|
||||
}
|
||||
p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
|
||||
p2 := p.ReplaceExtension(ctx, "oat")
|
||||
|
@ -1174,7 +1173,7 @@ func ExampleOutputPath_ReplaceExtension() {
|
|||
|
||||
func ExampleOutputPath_FileInSameDir() {
|
||||
ctx := &configErrorWrapper{
|
||||
config: TestConfig("out", nil),
|
||||
config: TestConfig("out", nil, "", nil),
|
||||
}
|
||||
p := PathForOutput(ctx, "system/framework").Join(ctx, "boot.art")
|
||||
p2 := p.InSameDir(ctx, "oat", "arm", "boot.vdex")
|
||||
|
|
|
@ -21,7 +21,14 @@ import (
|
|||
)
|
||||
|
||||
func testPrebuiltEtc(t *testing.T, bp string) (*TestContext, Config) {
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
fs := map[string][]byte{
|
||||
"foo.conf": nil,
|
||||
"bar.conf": nil,
|
||||
"baz.conf": nil,
|
||||
}
|
||||
|
||||
config := TestArchConfig(buildDir, nil, bp, fs)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("prebuilt_etc", PrebuiltEtcFactory)
|
||||
ctx.RegisterModuleType("prebuilt_etc_host", PrebuiltEtcHostFactory)
|
||||
|
@ -29,14 +36,7 @@ func testPrebuiltEtc(t *testing.T, bp string) (*TestContext, Config) {
|
|||
ctx.RegisterModuleType("prebuilt_usr_share_host", PrebuiltUserShareHostFactory)
|
||||
ctx.RegisterModuleType("prebuilt_font", PrebuiltFontFactory)
|
||||
ctx.RegisterModuleType("prebuilt_firmware", PrebuiltFirmwareFactory)
|
||||
ctx.Register()
|
||||
mockFiles := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"foo.conf": nil,
|
||||
"bar.conf": nil,
|
||||
"baz.conf": nil,
|
||||
}
|
||||
ctx.MockFileSystem(mockFiles)
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -125,29 +125,30 @@ var prebuiltsTests = []struct {
|
|||
}
|
||||
|
||||
func TestPrebuilts(t *testing.T) {
|
||||
config := TestConfig(buildDir, nil)
|
||||
fs := map[string][]byte{
|
||||
"prebuilt_file": nil,
|
||||
"source_file": nil,
|
||||
}
|
||||
|
||||
for _, test := range prebuiltsTests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
bp := `
|
||||
source {
|
||||
name: "foo",
|
||||
deps: [":bar"],
|
||||
}
|
||||
` + test.modules
|
||||
config := TestConfig(buildDir, nil, bp, fs)
|
||||
|
||||
ctx := NewTestContext()
|
||||
ctx.PreArchMutators(RegisterPrebuiltsPreArchMutators)
|
||||
ctx.PostDepsMutators(RegisterPrebuiltsPostDepsMutators)
|
||||
ctx.RegisterModuleType("filegroup", FileGroupFactory)
|
||||
ctx.RegisterModuleType("prebuilt", newPrebuiltModule)
|
||||
ctx.RegisterModuleType("source", newSourceModule)
|
||||
ctx.Register()
|
||||
ctx.MockFileSystem(map[string][]byte{
|
||||
"prebuilt_file": nil,
|
||||
"source_file": nil,
|
||||
"Blueprints": []byte(`
|
||||
source {
|
||||
name: "foo",
|
||||
deps: [":bar"],
|
||||
}
|
||||
` + test.modules),
|
||||
})
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseBlueprintsFiles("Blueprints")
|
||||
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -27,19 +27,18 @@ import (
|
|||
)
|
||||
|
||||
func pathContext() PathContext {
|
||||
return PathContextForTesting(TestConfig("out", nil),
|
||||
map[string][]byte{
|
||||
"ld": nil,
|
||||
"a.o": nil,
|
||||
"b.o": nil,
|
||||
"cp": nil,
|
||||
"a": nil,
|
||||
"b": nil,
|
||||
"ls": nil,
|
||||
"turbine": nil,
|
||||
"java": nil,
|
||||
"javac": nil,
|
||||
})
|
||||
return PathContextForTesting(TestConfig("out", nil, "", map[string][]byte{
|
||||
"ld": nil,
|
||||
"a.o": nil,
|
||||
"b.o": nil,
|
||||
"cp": nil,
|
||||
"a": nil,
|
||||
"b": nil,
|
||||
"ls": nil,
|
||||
"turbine": nil,
|
||||
"java": nil,
|
||||
"javac": nil,
|
||||
}))
|
||||
}
|
||||
|
||||
func ExampleRuleBuilder() {
|
||||
|
@ -276,7 +275,7 @@ func TestRuleBuilder(t *testing.T) {
|
|||
"input3": nil,
|
||||
}
|
||||
|
||||
ctx := PathContextForTesting(TestConfig("out", nil), fs)
|
||||
ctx := PathContextForTesting(TestConfig("out", nil, "", fs))
|
||||
|
||||
addCommands := func(rule *RuleBuilder) {
|
||||
cmd := rule.Command().
|
||||
|
@ -445,6 +444,11 @@ func testRuleBuilder_Build(ctx BuilderContext, in Path, out, outDep, outDir Writ
|
|||
}
|
||||
|
||||
func TestRuleBuilder_Build(t *testing.T) {
|
||||
fs := map[string][]byte{
|
||||
"bar": nil,
|
||||
"cp": nil,
|
||||
}
|
||||
|
||||
bp := `
|
||||
rule_builder_test {
|
||||
name: "foo",
|
||||
|
@ -458,16 +462,11 @@ func TestRuleBuilder_Build(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
config := TestConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, nil, bp, fs)
|
||||
ctx := NewTestContext()
|
||||
ctx.MockFileSystem(map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"bar": nil,
|
||||
"cp": nil,
|
||||
})
|
||||
ctx.RegisterModuleType("rule_builder_test", testRuleBuilderFactory)
|
||||
ctx.RegisterSingletonType("rule_builder_test", testRuleBuilderSingletonFactory)
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
|
|
|
@ -6,19 +6,18 @@ import (
|
|||
)
|
||||
|
||||
func testShBinary(t *testing.T, bp string) (*TestContext, Config) {
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("sh_test", ShTestFactory)
|
||||
ctx.RegisterModuleType("sh_test_host", ShTestHostFactory)
|
||||
ctx.Register()
|
||||
mockFiles := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
fs := map[string][]byte{
|
||||
"test.sh": nil,
|
||||
"testdata/data1": nil,
|
||||
"testdata/sub/data2": nil,
|
||||
}
|
||||
ctx.MockFileSystem(mockFiles)
|
||||
|
||||
config := TestArchConfig(buildDir, nil, bp, fs)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("sh_test", ShTestFactory)
|
||||
ctx.RegisterModuleType("sh_test_host", ShTestHostFactory)
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -16,7 +16,6 @@ package android
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -68,7 +67,11 @@ func (ctx *TestContext) PostDepsMutators(f RegisterMutatorFunc) {
|
|||
ctx.postDeps = append(ctx.postDeps, f)
|
||||
}
|
||||
|
||||
func (ctx *TestContext) Register() {
|
||||
func (ctx *TestContext) Register(config Config) {
|
||||
ctx.SetFs(config.fs)
|
||||
if config.mockBpList != "" {
|
||||
ctx.SetModuleListFile(config.mockBpList)
|
||||
}
|
||||
registerMutators(ctx.Context.Context, ctx.preArch, ctx.preDeps, ctx.postDeps)
|
||||
|
||||
ctx.RegisterSingletonType("env", EnvSingleton)
|
||||
|
@ -132,25 +135,6 @@ func (ctx *TestContext) SingletonForTests(name string) TestingSingleton {
|
|||
"\nall singletons: %v", name, allSingletonNames))
|
||||
}
|
||||
|
||||
// MockFileSystem causes the Context to replace all reads with accesses to the provided map of
|
||||
// filenames to contents stored as a byte slice.
|
||||
func (ctx *TestContext) MockFileSystem(files map[string][]byte) {
|
||||
// no module list file specified; find every file named Blueprints or Android.bp
|
||||
pathsToParse := []string{}
|
||||
for candidate := range files {
|
||||
base := filepath.Base(candidate)
|
||||
if base == "Blueprints" || base == "Android.bp" {
|
||||
pathsToParse = append(pathsToParse, candidate)
|
||||
}
|
||||
}
|
||||
if len(pathsToParse) < 1 {
|
||||
panic(fmt.Sprintf("No Blueprint or Android.bp files found in mock filesystem: %v\n", files))
|
||||
}
|
||||
files[blueprint.MockModuleListFile] = []byte(strings.Join(pathsToParse, "\n"))
|
||||
|
||||
ctx.Context.MockFileSystem(files)
|
||||
}
|
||||
|
||||
type testBuildProvider interface {
|
||||
BuildParamsForTests() []BuildParams
|
||||
RuleParamsForTests() map[blueprint.Rule]blueprint.RuleParams
|
||||
|
|
|
@ -198,18 +198,11 @@ func TestProductVariables(t *testing.T) {
|
|||
name: "baz",
|
||||
}
|
||||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
ctx.Register()
|
||||
|
||||
config := TestConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, nil, bp, nil)
|
||||
config.TestProductVariables.Eng = proptools.BoolPtr(true)
|
||||
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -868,7 +868,7 @@ func TestVisibility(t *testing.T) {
|
|||
func testVisibility(buildDir string, fs map[string][]byte) (*TestContext, []error) {
|
||||
|
||||
// Create a new config per test as visibility information is stored in the config.
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
config := TestArchConfig(buildDir, nil, "", fs)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("package", PackageFactory)
|
||||
|
@ -879,9 +879,7 @@ func testVisibility(buildDir string, fs map[string][]byte) (*TestContext, []erro
|
|||
ctx.PreArchMutators(RegisterDefaultsPreArchMutators)
|
||||
ctx.PreArchMutators(RegisterVisibilityRuleGatherer)
|
||||
ctx.PostDepsMutators(RegisterVisibilityRuleEnforcer)
|
||||
ctx.Register()
|
||||
|
||||
ctx.MockFileSystem(fs)
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseBlueprintsFiles(".")
|
||||
if len(errs) > 0 {
|
||||
|
|
|
@ -19,15 +19,11 @@ import (
|
|||
)
|
||||
|
||||
func testVtsConfig(test *testing.T, bpFileContents string) *TestContext {
|
||||
config := TestArchConfig(buildDir, nil)
|
||||
config := TestArchConfig(buildDir, nil, bpFileContents, nil)
|
||||
|
||||
ctx := NewTestArchContext()
|
||||
ctx.RegisterModuleType("vts_config", VtsConfigFactory)
|
||||
ctx.Register()
|
||||
mockFiles := map[string][]byte{
|
||||
"Android.bp": []byte(bpFileContents),
|
||||
}
|
||||
ctx.MockFileSystem(mockFiles)
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
FailIfErrored(test, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -93,69 +93,6 @@ func withBinder32bit(fs map[string][]byte, config android.Config) {
|
|||
|
||||
func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*android.TestContext, android.Config) {
|
||||
android.ClearApexDependency()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current")
|
||||
config.TestProductVariables.DefaultAppCertificate = proptools.StringPtr("vendor/foo/devkeys/test")
|
||||
config.TestProductVariables.CertificateOverrides = []string{"myapex_keytest:myapex.certificate.override"}
|
||||
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("Q")
|
||||
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(false)
|
||||
config.TestProductVariables.Platform_vndk_version = proptools.StringPtr("VER")
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("apex", BundleFactory)
|
||||
ctx.RegisterModuleType("apex_test", testApexBundleFactory)
|
||||
ctx.RegisterModuleType("apex_vndk", vndkApexBundleFactory)
|
||||
ctx.RegisterModuleType("apex_key", ApexKeyFactory)
|
||||
ctx.RegisterModuleType("apex_defaults", defaultsFactory)
|
||||
ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
|
||||
ctx.RegisterModuleType("override_apex", overrideApexFactory)
|
||||
|
||||
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
||||
ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
|
||||
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_shared", cc.PrebuiltSharedLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_binary", cc.BinaryFactory)
|
||||
ctx.RegisterModuleType("cc_object", cc.ObjectFactory)
|
||||
ctx.RegisterModuleType("cc_defaults", func() android.Module {
|
||||
return cc.DefaultsFactory()
|
||||
})
|
||||
ctx.RegisterModuleType("cc_test", cc.TestFactory)
|
||||
ctx.RegisterModuleType("llndk_library", cc.LlndkLibraryFactory)
|
||||
ctx.RegisterModuleType("vndk_prebuilt_shared", cc.VndkPrebuiltSharedFactory)
|
||||
ctx.RegisterModuleType("vndk_libraries_txt", cc.VndkLibrariesTxtFactory)
|
||||
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
|
||||
ctx.RegisterModuleType("prebuilt_etc", android.PrebuiltEtcFactory)
|
||||
ctx.RegisterModuleType("sh_binary", android.ShBinaryFactory)
|
||||
ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
|
||||
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
|
||||
ctx.RegisterModuleType("java_library", java.LibraryFactory)
|
||||
ctx.RegisterModuleType("java_import", java.ImportFactory)
|
||||
ctx.RegisterModuleType("java_system_modules", java.SystemModulesFactory)
|
||||
ctx.RegisterModuleType("android_app", java.AndroidAppFactory)
|
||||
ctx.RegisterModuleType("android_app_import", java.AndroidAppImportFactory)
|
||||
ctx.RegisterModuleType("override_android_app", java.OverrideAndroidAppModuleFactory)
|
||||
|
||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
||||
})
|
||||
ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("vndk", cc.VndkMutator).Parallel()
|
||||
ctx.BottomUp("link", cc.LinkageMutator).Parallel()
|
||||
ctx.BottomUp("test_per_src", cc.TestPerSrcMutator).Parallel()
|
||||
ctx.BottomUp("version", cc.VersionMutator).Parallel()
|
||||
ctx.BottomUp("begin", cc.BeginMutator).Parallel()
|
||||
})
|
||||
ctx.PreDepsMutators(RegisterPreDepsMutators)
|
||||
ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)
|
||||
ctx.PostDepsMutators(RegisterPostDepsMutators)
|
||||
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.TopDown("prebuilt_select", android.PrebuiltSelectModuleMutator).Parallel()
|
||||
ctx.BottomUp("prebuilt_postdeps", android.PrebuiltPostDepsMutator).Parallel()
|
||||
})
|
||||
|
||||
ctx.Register()
|
||||
|
||||
bp = bp + `
|
||||
toolchain_library {
|
||||
|
@ -271,10 +208,10 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
|
|||
],
|
||||
}
|
||||
`
|
||||
|
||||
bp = bp + java.GatherRequiredDepsForTest()
|
||||
|
||||
fs := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"a.java": nil,
|
||||
"PrebuiltAppFoo.apk": nil,
|
||||
"PrebuiltAppFooPriv.apk": nil,
|
||||
|
@ -285,42 +222,116 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr
|
|||
"system/sepolicy/apex/otherapex-file_contexts": nil,
|
||||
"system/sepolicy/apex/commonapex-file_contexts": nil,
|
||||
"system/sepolicy/apex/com.android.vndk-file_contexts": nil,
|
||||
"mylib.cpp": nil,
|
||||
"mylib_common.cpp": nil,
|
||||
"mytest.cpp": nil,
|
||||
"mytest1.cpp": nil,
|
||||
"mytest2.cpp": nil,
|
||||
"mytest3.cpp": nil,
|
||||
"myprebuilt": nil,
|
||||
"my_include": nil,
|
||||
"foo/bar/MyClass.java": nil,
|
||||
"prebuilt.jar": nil,
|
||||
"vendor/foo/devkeys/test.x509.pem": nil,
|
||||
"vendor/foo/devkeys/test.pk8": nil,
|
||||
"testkey.x509.pem": nil,
|
||||
"testkey.pk8": nil,
|
||||
"testkey.override.x509.pem": nil,
|
||||
"testkey.override.pk8": nil,
|
||||
"vendor/foo/devkeys/testkey.avbpubkey": nil,
|
||||
"vendor/foo/devkeys/testkey.pem": nil,
|
||||
"NOTICE": nil,
|
||||
"custom_notice": nil,
|
||||
"testkey2.avbpubkey": nil,
|
||||
"testkey2.pem": nil,
|
||||
"myapex-arm64.apex": nil,
|
||||
"myapex-arm.apex": nil,
|
||||
"frameworks/base/api/current.txt": nil,
|
||||
"framework/aidl/a.aidl": nil,
|
||||
"build/make/core/proguard.flags": nil,
|
||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||
"dummy.txt": nil,
|
||||
"mylib.cpp": nil,
|
||||
"mylib_common.cpp": nil,
|
||||
"mytest.cpp": nil,
|
||||
"mytest1.cpp": nil,
|
||||
"mytest2.cpp": nil,
|
||||
"mytest3.cpp": nil,
|
||||
"myprebuilt": nil,
|
||||
"my_include": nil,
|
||||
"foo/bar/MyClass.java": nil,
|
||||
"prebuilt.jar": nil,
|
||||
"vendor/foo/devkeys/test.x509.pem": nil,
|
||||
"vendor/foo/devkeys/test.pk8": nil,
|
||||
"testkey.x509.pem": nil,
|
||||
"testkey.pk8": nil,
|
||||
"testkey.override.x509.pem": nil,
|
||||
"testkey.override.pk8": nil,
|
||||
"vendor/foo/devkeys/testkey.avbpubkey": nil,
|
||||
"vendor/foo/devkeys/testkey.pem": nil,
|
||||
"NOTICE": nil,
|
||||
"custom_notice": nil,
|
||||
"testkey2.avbpubkey": nil,
|
||||
"testkey2.pem": nil,
|
||||
"myapex-arm64.apex": nil,
|
||||
"myapex-arm.apex": nil,
|
||||
"frameworks/base/api/current.txt": nil,
|
||||
"framework/aidl/a.aidl": nil,
|
||||
"build/make/core/proguard.flags": nil,
|
||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||
"dummy.txt": nil,
|
||||
}
|
||||
|
||||
for _, handler := range handlers {
|
||||
handler(fs, config)
|
||||
// The fs now needs to be populated before creating the config, call handlers twice
|
||||
// for now, once to get any fs changes, and later after the config was created to
|
||||
// set product variables or targets.
|
||||
tempConfig := android.TestArchConfig(buildDir, nil, bp, fs)
|
||||
handler(fs, tempConfig)
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(fs)
|
||||
config := android.TestArchConfig(buildDir, nil, bp, fs)
|
||||
config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current")
|
||||
config.TestProductVariables.DefaultAppCertificate = proptools.StringPtr("vendor/foo/devkeys/test")
|
||||
config.TestProductVariables.CertificateOverrides = []string{"myapex_keytest:myapex.certificate.override"}
|
||||
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("Q")
|
||||
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(false)
|
||||
config.TestProductVariables.Platform_vndk_version = proptools.StringPtr("VER")
|
||||
|
||||
for _, handler := range handlers {
|
||||
// The fs now needs to be populated before creating the config, call handlers twice
|
||||
// for now, earlier to get any fs changes, and now after the config was created to
|
||||
// set product variables or targets.
|
||||
tempFS := map[string][]byte{}
|
||||
handler(tempFS, config)
|
||||
}
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("apex", BundleFactory)
|
||||
ctx.RegisterModuleType("apex_test", testApexBundleFactory)
|
||||
ctx.RegisterModuleType("apex_vndk", vndkApexBundleFactory)
|
||||
ctx.RegisterModuleType("apex_key", ApexKeyFactory)
|
||||
ctx.RegisterModuleType("apex_defaults", defaultsFactory)
|
||||
ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
|
||||
ctx.RegisterModuleType("override_apex", overrideApexFactory)
|
||||
|
||||
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
||||
ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
|
||||
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_shared", cc.PrebuiltSharedLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_binary", cc.BinaryFactory)
|
||||
ctx.RegisterModuleType("cc_object", cc.ObjectFactory)
|
||||
ctx.RegisterModuleType("cc_defaults", func() android.Module {
|
||||
return cc.DefaultsFactory()
|
||||
})
|
||||
ctx.RegisterModuleType("cc_test", cc.TestFactory)
|
||||
ctx.RegisterModuleType("llndk_library", cc.LlndkLibraryFactory)
|
||||
ctx.RegisterModuleType("vndk_prebuilt_shared", cc.VndkPrebuiltSharedFactory)
|
||||
ctx.RegisterModuleType("vndk_libraries_txt", cc.VndkLibrariesTxtFactory)
|
||||
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
|
||||
ctx.RegisterModuleType("prebuilt_etc", android.PrebuiltEtcFactory)
|
||||
ctx.RegisterModuleType("sh_binary", android.ShBinaryFactory)
|
||||
ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
|
||||
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
|
||||
ctx.RegisterModuleType("java_library", java.LibraryFactory)
|
||||
ctx.RegisterModuleType("java_import", java.ImportFactory)
|
||||
ctx.RegisterModuleType("java_system_modules", java.SystemModulesFactory)
|
||||
ctx.RegisterModuleType("android_app", java.AndroidAppFactory)
|
||||
ctx.RegisterModuleType("android_app_import", java.AndroidAppImportFactory)
|
||||
ctx.RegisterModuleType("override_android_app", java.OverrideAndroidAppModuleFactory)
|
||||
|
||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
|
||||
})
|
||||
ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("vndk", cc.VndkMutator).Parallel()
|
||||
ctx.BottomUp("link", cc.LinkageMutator).Parallel()
|
||||
ctx.BottomUp("test_per_src", cc.TestPerSrcMutator).Parallel()
|
||||
ctx.BottomUp("version", cc.VersionMutator).Parallel()
|
||||
ctx.BottomUp("begin", cc.BeginMutator).Parallel()
|
||||
})
|
||||
ctx.PreDepsMutators(RegisterPreDepsMutators)
|
||||
ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators)
|
||||
ctx.PostDepsMutators(RegisterPostDepsMutators)
|
||||
ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.TopDown("prebuilt_select", android.PrebuiltSelectModuleMutator).Parallel()
|
||||
ctx.BottomUp("prebuilt_postdeps", android.PrebuiltPostDepsMutator).Parallel()
|
||||
})
|
||||
|
||||
ctx.Register(config)
|
||||
|
||||
return ctx, config
|
||||
}
|
||||
|
|
|
@ -48,21 +48,24 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testContext(bp string) *android.TestContext {
|
||||
func testConfig(buildDir string, env map[string]string, bp string) android.Config {
|
||||
mockFS := map[string][]byte{
|
||||
"bpf.c": nil,
|
||||
"BpfTest.cpp": nil,
|
||||
}
|
||||
|
||||
ctx := cc.CreateTestContext(bp, mockFS, android.Android)
|
||||
return cc.TestConfig(buildDir, android.Android, env, bp, mockFS)
|
||||
}
|
||||
|
||||
func testContext(config android.Config) *android.TestContext {
|
||||
ctx := cc.CreateTestContext()
|
||||
ctx.RegisterModuleType("bpf", bpfFactory)
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func TestBpfDataDependency(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp := `
|
||||
bpf {
|
||||
name: "bpf.o",
|
||||
|
@ -77,7 +80,9 @@ func TestBpfDataDependency(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
ctx := testContext(bp)
|
||||
config := testConfig(buildDir, nil, bp)
|
||||
ctx := testContext(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if errs == nil {
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
212
cc/cc_test.go
212
cc/cc_test.go
|
@ -52,15 +52,10 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testCcWithConfig(t *testing.T, bp string, config android.Config) *android.TestContext {
|
||||
func testCcWithConfig(t *testing.T, config android.Config) *android.TestContext {
|
||||
t.Helper()
|
||||
return testCcWithConfigForOs(t, bp, config, android.Android)
|
||||
}
|
||||
|
||||
func testCcWithConfigForOs(t *testing.T, bp string, config android.Config, os android.OsType) *android.TestContext {
|
||||
t.Helper()
|
||||
ctx := CreateTestContext(bp, nil, os)
|
||||
ctx.Register()
|
||||
ctx := CreateTestContext()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
|
@ -72,29 +67,29 @@ func testCcWithConfigForOs(t *testing.T, bp string, config android.Config, os an
|
|||
|
||||
func testCc(t *testing.T, bp string) *android.TestContext {
|
||||
t.Helper()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
return testCcWithConfig(t, bp, config)
|
||||
return testCcWithConfig(t, config)
|
||||
}
|
||||
|
||||
func testCcNoVndk(t *testing.T, bp string) *android.TestContext {
|
||||
t.Helper()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
return testCcWithConfig(t, bp, config)
|
||||
return testCcWithConfig(t, config)
|
||||
}
|
||||
|
||||
func testCcError(t *testing.T, pattern string, bp string) {
|
||||
t.Helper()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
ctx := CreateTestContext(bp, nil, android.Android)
|
||||
ctx.Register()
|
||||
ctx := CreateTestContext()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if len(errs) > 0 {
|
||||
|
@ -131,8 +126,8 @@ func TestFuchsiaDeps(t *testing.T) {
|
|||
},
|
||||
}`
|
||||
|
||||
config := android.TestArchConfigFuchsia(buildDir, nil)
|
||||
ctx := testCcWithConfigForOs(t, bp, config, android.Fuchsia)
|
||||
config := TestConfig(buildDir, android.Fuchsia, nil, bp, nil)
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
rt := false
|
||||
fb := false
|
||||
|
@ -168,8 +163,8 @@ func TestFuchsiaTargetDecl(t *testing.T) {
|
|||
},
|
||||
}`
|
||||
|
||||
config := android.TestArchConfigFuchsia(buildDir, nil)
|
||||
ctx := testCcWithConfigForOs(t, bp, config, android.Fuchsia)
|
||||
config := TestConfig(buildDir, android.Fuchsia, nil, bp, nil)
|
||||
ctx := testCcWithConfig(t, config)
|
||||
ld := ctx.ModuleForTests("libTest", "fuchsia_arm64_shared").Rule("ld")
|
||||
var objs []string
|
||||
for _, o := range ld.Inputs {
|
||||
|
@ -290,11 +285,7 @@ func checkVndkLibrariesOutput(t *testing.T, ctx *android.TestContext, module str
|
|||
}
|
||||
|
||||
func TestVndk(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
ctx := testCcWithConfig(t, `
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
|
@ -354,7 +345,13 @@ func TestVndk(t *testing.T) {
|
|||
vndk_libraries_txt {
|
||||
name: "vndkcorevariant.libraries.txt",
|
||||
}
|
||||
`, config)
|
||||
`
|
||||
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
checkVndkModule(t, ctx, "libvndk", "vndk-VER", false, "")
|
||||
checkVndkModule(t, ctx, "libvndk_private", "vndk-VER", false, "")
|
||||
|
@ -412,13 +409,14 @@ func TestVndk(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestVndkLibrariesTxtAndroidMk(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
ctx := testCcWithConfig(t, `
|
||||
bp := `
|
||||
vndk_libraries_txt {
|
||||
name: "llndk.libraries.txt",
|
||||
}`, config)
|
||||
}`
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
module := ctx.ModuleForTests("llndk.libraries.txt", "")
|
||||
entries := android.AndroidMkEntriesForTest(t, config, "", module.Module())[0]
|
||||
|
@ -426,14 +424,7 @@ func TestVndkLibrariesTxtAndroidMk(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestVndkUsingCoreVariant(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
config.TestProductVariables.VndkUseCoreVariant = BoolPtr(true)
|
||||
|
||||
setVndkMustUseVendorVariantListForTest(config, []string{"libvndk"})
|
||||
|
||||
ctx := testCcWithConfig(t, `
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
|
@ -465,7 +456,16 @@ func TestVndkUsingCoreVariant(t *testing.T) {
|
|||
vndk_libraries_txt {
|
||||
name: "vndkcorevariant.libraries.txt",
|
||||
}
|
||||
`, config)
|
||||
`
|
||||
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
config.TestProductVariables.VndkUseCoreVariant = BoolPtr(true)
|
||||
|
||||
setVndkMustUseVendorVariantListForTest(config, []string{"libvndk"})
|
||||
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
checkVndkLibrariesOutput(t, ctx, "vndkcorevariant.libraries.txt", []string{"libc++.so", "libvndk2.so", "libvndk_sp.so"})
|
||||
}
|
||||
|
@ -1446,75 +1446,77 @@ func TestVndkUseVndkExtError(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestMakeLinkType(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndksp",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
support_system_process: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndkprivate",
|
||||
vendor_available: false,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvendor",
|
||||
vendor: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndkext",
|
||||
vendor: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
extends: "libvndk",
|
||||
},
|
||||
}
|
||||
vndk_prebuilt_shared {
|
||||
name: "prevndk",
|
||||
version: "27",
|
||||
target_arch: "arm",
|
||||
binder32bit: true,
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
arch: {
|
||||
arm: {
|
||||
srcs: ["liba.so"],
|
||||
},
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libllndkprivate",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndkprivate",
|
||||
vendor_available: false,
|
||||
symbol_file: "",
|
||||
}`
|
||||
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
// native:vndk
|
||||
ctx := testCcWithConfig(t, `
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndksp",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
support_system_process: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndkprivate",
|
||||
vendor_available: false,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libvendor",
|
||||
vendor: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndkext",
|
||||
vendor: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
extends: "libvndk",
|
||||
},
|
||||
}
|
||||
vndk_prebuilt_shared {
|
||||
name: "prevndk",
|
||||
version: "27",
|
||||
target_arch: "arm",
|
||||
binder32bit: true,
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
arch: {
|
||||
arm: {
|
||||
srcs: ["liba.so"],
|
||||
},
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libllndkprivate",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndkprivate",
|
||||
vendor_available: false,
|
||||
symbol_file: "",
|
||||
}`, config)
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
assertMapKeys(t, vndkCoreLibraries(config),
|
||||
[]string{"libvndk", "libvndkprivate"})
|
||||
|
|
|
@ -21,31 +21,20 @@ import (
|
|||
"android/soong/android"
|
||||
)
|
||||
|
||||
func testGenruleContext(config android.Config, bp string,
|
||||
fs map[string][]byte) *android.TestContext {
|
||||
|
||||
func testGenruleContext(config android.Config) *android.TestContext {
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("cc_genrule", genRuleFactory)
|
||||
ctx.Register()
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"tool": nil,
|
||||
"foo": nil,
|
||||
"bar": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
ctx.Register(config)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func TestArchGenruleCmd(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
fs := map[string][]byte{
|
||||
"tool": nil,
|
||||
"foo": nil,
|
||||
"bar": nil,
|
||||
}
|
||||
bp := `
|
||||
cc_genrule {
|
||||
name: "gen",
|
||||
|
@ -63,8 +52,9 @@ func TestArchGenruleCmd(t *testing.T) {
|
|||
},
|
||||
}
|
||||
`
|
||||
config := android.TestArchConfig(buildDir, nil, bp, fs)
|
||||
|
||||
ctx := testGenruleContext(config, bp, nil)
|
||||
ctx := testGenruleContext(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if errs == nil {
|
||||
|
|
|
@ -68,9 +68,9 @@ func TestPrebuilt(t *testing.T) {
|
|||
"libe.a": nil,
|
||||
}
|
||||
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, fs)
|
||||
|
||||
ctx := CreateTestContext(bp, fs, android.Android)
|
||||
ctx := CreateTestContext()
|
||||
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_shared", PrebuiltSharedLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_prebuilt_library_static", PrebuiltStaticLibraryFactory)
|
||||
|
@ -79,7 +79,7 @@ func TestPrebuilt(t *testing.T) {
|
|||
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
|
||||
ctx.PostDepsMutators(android.RegisterPrebuiltsPostDepsMutators)
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
|
|
|
@ -115,20 +115,17 @@ func TestDataTests(t *testing.T) {
|
|||
}
|
||||
defer os.RemoveAll(buildDir)
|
||||
|
||||
config := android.TestConfig(buildDir, nil)
|
||||
|
||||
for _, test := range testDataTests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
ctx := android.NewTestContext()
|
||||
ctx.MockFileSystem(map[string][]byte{
|
||||
"Blueprints": []byte(`subdirs = ["dir"]`),
|
||||
"dir/Blueprints": []byte(test.modules),
|
||||
config := android.TestConfig(buildDir, nil, "", map[string][]byte{
|
||||
"dir/Android.bp": []byte(test.modules),
|
||||
"dir/baz": nil,
|
||||
"dir/bar/baz": nil,
|
||||
})
|
||||
ctx := android.NewTestContext()
|
||||
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
|
||||
ctx.RegisterModuleType("test", newTest)
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseBlueprintsFiles("Blueprints")
|
||||
android.FailIfErrored(t, errs)
|
||||
|
|
|
@ -249,9 +249,41 @@ func GatherRequiredDepsForTest(os android.OsType) string {
|
|||
return ret
|
||||
}
|
||||
|
||||
func CreateTestContext(bp string, fs map[string][]byte,
|
||||
os android.OsType) *android.TestContext {
|
||||
func TestConfig(buildDir string, os android.OsType, env map[string]string,
|
||||
bp string, fs map[string][]byte) android.Config {
|
||||
|
||||
// add some modules that are required by the compiler and/or linker
|
||||
bp = bp + GatherRequiredDepsForTest(os)
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"foo.c": nil,
|
||||
"foo.lds": nil,
|
||||
"bar.c": nil,
|
||||
"baz.c": nil,
|
||||
"baz.o": nil,
|
||||
"a.proto": nil,
|
||||
"b.aidl": nil,
|
||||
"sub/c.aidl": nil,
|
||||
"my_include": nil,
|
||||
"foo.map.txt": nil,
|
||||
"liba.so": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
var config android.Config
|
||||
if os == android.Fuchsia {
|
||||
config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS)
|
||||
} else {
|
||||
config = android.TestArchConfig(buildDir, env, bp, mockFS)
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
func CreateTestContext() *android.TestContext {
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("cc_defaults", defaultsFactory)
|
||||
ctx.RegisterModuleType("cc_binary", BinaryFactory)
|
||||
|
@ -283,29 +315,5 @@ func CreateTestContext(bp string, fs map[string][]byte,
|
|||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
|
||||
|
||||
// add some modules that are required by the compiler and/or linker
|
||||
bp = bp + GatherRequiredDepsForTest(os)
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"foo.c": nil,
|
||||
"foo.lds": nil,
|
||||
"bar.c": nil,
|
||||
"baz.c": nil,
|
||||
"baz.o": nil,
|
||||
"a.proto": nil,
|
||||
"b.aidl": nil,
|
||||
"sub/c.aidl": nil,
|
||||
"my_include": nil,
|
||||
"foo.map.txt": nil,
|
||||
"liba.so": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ func main() {
|
|||
usage("path to module configuration file is required")
|
||||
}
|
||||
|
||||
ctx := &pathContext{android.TestConfig(*outDir, nil)}
|
||||
ctx := &pathContext{android.TestConfig(*outDir, nil, "", nil)}
|
||||
|
||||
globalConfig, _, err := dexpreopt.LoadGlobalConfig(ctx, *globalConfigPath)
|
||||
if err != nil {
|
||||
|
|
|
@ -61,7 +61,7 @@ func testModuleConfig(ctx android.PathContext, name, partition string) ModuleCon
|
|||
}
|
||||
|
||||
func TestDexPreopt(t *testing.T) {
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil), nil)
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil, "", nil))
|
||||
global, module := GlobalConfigForTests(ctx), testSystemModuleConfig(ctx, "test")
|
||||
|
||||
rule, err := GenerateDexpreoptRule(ctx, global, module)
|
||||
|
@ -80,7 +80,7 @@ func TestDexPreopt(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDexPreoptSystemOther(t *testing.T) {
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil), nil)
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil, "", nil))
|
||||
global := GlobalConfigForTests(ctx)
|
||||
systemModule := testSystemModuleConfig(ctx, "Stest")
|
||||
systemProductModule := testSystemProductModuleConfig(ctx, "SPtest")
|
||||
|
@ -138,7 +138,7 @@ func TestDexPreoptSystemOther(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDexPreoptProfile(t *testing.T) {
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil), nil)
|
||||
ctx := android.PathContextForTesting(android.TestConfig("out", nil, "", nil))
|
||||
global, module := GlobalConfigForTests(ctx), testSystemModuleConfig(ctx, "test")
|
||||
|
||||
module.ProfileClassListing = android.OptionalPathForPath(android.PathForTesting("profile"))
|
||||
|
|
|
@ -51,8 +51,7 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testContext(config android.Config, bp string,
|
||||
fs map[string][]byte) *android.TestContext {
|
||||
func testContext(config android.Config) *android.TestContext {
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
|
||||
|
@ -61,8 +60,12 @@ func testContext(config android.Config, bp string,
|
|||
ctx.RegisterModuleType("genrule_defaults", defaultsFactory)
|
||||
ctx.RegisterModuleType("tool", toolFactory)
|
||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func testConfig(bp string, fs map[string][]byte) android.Config {
|
||||
bp += `
|
||||
tool {
|
||||
name: "tool",
|
||||
|
@ -104,7 +107,6 @@ func testContext(config android.Config, bp string,
|
|||
`
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"tool": nil,
|
||||
"tool_file1": nil,
|
||||
"tool_file2": nil,
|
||||
|
@ -119,9 +121,7 @@ func testContext(config android.Config, bp string,
|
|||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
return ctx
|
||||
return android.TestArchConfig(buildDir, nil, bp, mockFS)
|
||||
}
|
||||
|
||||
func TestGenruleCmd(t *testing.T) {
|
||||
|
@ -461,15 +461,15 @@ func TestGenruleCmd(t *testing.T) {
|
|||
|
||||
for _, test := range testcases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp := "genrule {\n"
|
||||
bp += "name: \"gen\",\n"
|
||||
bp += test.prop
|
||||
bp += "}\n"
|
||||
|
||||
config := testConfig(bp, nil)
|
||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(test.allowMissingDependencies)
|
||||
|
||||
ctx := testContext(config, bp, nil)
|
||||
ctx := testContext(config)
|
||||
ctx.SetAllowMissingDependencies(test.allowMissingDependencies)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
|
@ -546,14 +546,14 @@ func TestGenSrcs(t *testing.T) {
|
|||
|
||||
for _, test := range testcases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp := "gensrcs {\n"
|
||||
bp += `name: "gen",` + "\n"
|
||||
bp += `output_extension: "h",` + "\n"
|
||||
bp += test.prop
|
||||
bp += "}\n"
|
||||
|
||||
ctx := testContext(config, bp, nil)
|
||||
config := testConfig(bp, nil)
|
||||
ctx := testContext(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if errs == nil {
|
||||
|
@ -595,7 +595,6 @@ func TestGenSrcs(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestGenruleDefaults(t *testing.T) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp := `
|
||||
genrule_defaults {
|
||||
name: "gen_defaults1",
|
||||
|
@ -613,7 +612,8 @@ func TestGenruleDefaults(t *testing.T) {
|
|||
defaults: ["gen_defaults1", "gen_defaults2"],
|
||||
}
|
||||
`
|
||||
ctx := testContext(config, bp, nil)
|
||||
config := testConfig(bp, nil)
|
||||
ctx := testContext(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if errs == nil {
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
|
@ -43,7 +43,7 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
func testAppContext(bp string, fs map[string][]byte) *android.TestContext {
|
||||
func testAppConfig(env map[string]string, bp string, fs map[string][]byte) android.Config {
|
||||
appFS := map[string][]byte{}
|
||||
for k, v := range fs {
|
||||
appFS[k] = v
|
||||
|
@ -53,13 +53,13 @@ func testAppContext(bp string, fs map[string][]byte) *android.TestContext {
|
|||
appFS[file] = nil
|
||||
}
|
||||
|
||||
return testContext(bp, appFS)
|
||||
return testConfig(env, bp, appFS)
|
||||
}
|
||||
|
||||
func testApp(t *testing.T, bp string) *android.TestContext {
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
@ -301,8 +301,8 @@ func TestResourceDirs(t *testing.T) {
|
|||
|
||||
for _, testCase := range testCases {
|
||||
t.Run(testCase.name, func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
ctx := testContext(fmt.Sprintf(bp, testCase.prop), fs)
|
||||
config := testConfig(nil, fmt.Sprintf(bp, testCase.prop), fs)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
module := ctx.ModuleForTests("foo", "android_common")
|
||||
|
@ -509,7 +509,7 @@ func TestAndroidResources(t *testing.T) {
|
|||
|
||||
for _, testCase := range testCases {
|
||||
t.Run(testCase.name, func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, fs)
|
||||
config.TestProductVariables.DeviceResourceOverlays = deviceResourceOverlays
|
||||
config.TestProductVariables.ProductResourceOverlays = productResourceOverlays
|
||||
if testCase.enforceRROTargets != nil {
|
||||
|
@ -519,7 +519,7 @@ func TestAndroidResources(t *testing.T) {
|
|||
config.TestProductVariables.EnforceRROExcludedOverlays = testCase.enforceRROExcludedOverlays
|
||||
}
|
||||
|
||||
ctx := testAppContext(bp, fs)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
resourceListToFiles := func(module android.TestingModule, list []string) (files []string) {
|
||||
|
@ -649,12 +649,12 @@ func TestAppSdkVersion(t *testing.T) {
|
|||
%s
|
||||
}`, moduleType, test.sdkVersion, platformApiProp)
|
||||
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
config.TestProductVariables.Platform_sdk_version = &test.platformSdkInt
|
||||
config.TestProductVariables.Platform_sdk_codename = &test.platformSdkCodename
|
||||
config.TestProductVariables.Platform_sdk_final = &test.platformSdkFinal
|
||||
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
@ -777,9 +777,6 @@ func TestAppSdkVersionByPartition(t *testing.T) {
|
|||
`)
|
||||
|
||||
for _, enforce := range []bool{true, false} {
|
||||
|
||||
config := testConfig(nil)
|
||||
config.TestProductVariables.EnforceProductPartitionInterface = proptools.BoolPtr(enforce)
|
||||
bp := `
|
||||
android_app {
|
||||
name: "foo",
|
||||
|
@ -788,10 +785,13 @@ func TestAppSdkVersionByPartition(t *testing.T) {
|
|||
platform_apis: true,
|
||||
}
|
||||
`
|
||||
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
config.TestProductVariables.EnforceProductPartitionInterface = proptools.BoolPtr(enforce)
|
||||
if enforce {
|
||||
testJavaErrorWithConfig(t, "sdk_version must have a value when the module is located at vendor or product", bp, config)
|
||||
testJavaErrorWithConfig(t, "sdk_version must have a value when the module is located at vendor or product", config)
|
||||
} else {
|
||||
testJavaWithConfig(t, bp, config)
|
||||
testJavaWithConfig(t, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -954,11 +954,11 @@ func TestCertificates(t *testing.T) {
|
|||
|
||||
for _, test := range testCases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, test.bp, nil)
|
||||
if test.certificateOverride != "" {
|
||||
config.TestProductVariables.CertificateOverrides = []string{test.certificateOverride}
|
||||
}
|
||||
ctx := testAppContext(test.bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
foo := ctx.ModuleForTests("foo", "android_common")
|
||||
|
@ -1014,11 +1014,11 @@ func TestPackageNameOverride(t *testing.T) {
|
|||
|
||||
for _, test := range testCases {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, test.bp, nil)
|
||||
if test.packageNameOverride != "" {
|
||||
config.TestProductVariables.PackageNameOverrides = []string{test.packageNameOverride}
|
||||
}
|
||||
ctx := testAppContext(test.bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
foo := ctx.ModuleForTests("foo", "android_common")
|
||||
|
@ -1051,9 +1051,9 @@ func TestInstrumentationTargetOverridden(t *testing.T) {
|
|||
sdk_version: "current",
|
||||
}
|
||||
`
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
config.TestProductVariables.ManifestPackageNameOverrides = []string{"foo:org.dandroid.bp"}
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
@ -1471,10 +1471,10 @@ func TestAndroidAppImport_DpiVariants(t *testing.T) {
|
|||
|
||||
jniRuleRe := regexp.MustCompile("^if \\(zipinfo (\\S+)")
|
||||
for _, test := range testCases {
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
config.TestProductVariables.AAPTPreferredConfig = test.aaptPreferredConfig
|
||||
config.TestProductVariables.AAPTPrebuiltDPI = test.aaptPrebuiltDPI
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
@ -1732,10 +1732,10 @@ func TestUsesLibraries(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
config.TestProductVariables.MissingUsesLibraries = []string{"baz"}
|
||||
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
@ -2006,12 +2006,12 @@ func TestUncompressDex(t *testing.T) {
|
|||
test := func(t *testing.T, bp string, want bool, unbundled bool) {
|
||||
t.Helper()
|
||||
|
||||
config := testConfig(nil)
|
||||
config := testAppConfig(nil, bp, nil)
|
||||
if unbundled {
|
||||
config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true)
|
||||
}
|
||||
|
||||
ctx := testAppContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
run(t, ctx, config)
|
||||
|
||||
|
|
|
@ -44,14 +44,14 @@ func TestDexpreoptBootJars(t *testing.T) {
|
|||
}
|
||||
`
|
||||
|
||||
config := testConfig(nil)
|
||||
config := testConfig(nil, bp, nil)
|
||||
|
||||
pathCtx := android.PathContextForTesting(config, nil)
|
||||
pathCtx := android.PathContextForTesting(config)
|
||||
dexpreoptConfig := dexpreopt.GlobalConfigForTests(pathCtx)
|
||||
dexpreoptConfig.ArtApexJars = []string{"foo", "bar", "baz"}
|
||||
setDexpreoptTestGlobalConfig(config, dexpreoptConfig)
|
||||
|
||||
ctx := testContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
ctx.RegisterSingletonType("dex_bootjars", dexpreoptBootJarsFactory)
|
||||
|
||||
|
|
|
@ -56,11 +56,11 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testConfig(env map[string]string) android.Config {
|
||||
return TestConfig(buildDir, env)
|
||||
func testConfig(env map[string]string, bp string, fs map[string][]byte) android.Config {
|
||||
return TestConfig(buildDir, env, bp, fs)
|
||||
}
|
||||
|
||||
func testContext(bp string, fs map[string][]byte) *android.TestContext {
|
||||
func testContext() *android.TestContext {
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("android_app", AndroidAppFactory)
|
||||
|
@ -116,119 +116,16 @@ func testContext(bp string, fs map[string][]byte) *android.TestContext {
|
|||
ctx.BottomUp("begin", cc.BeginMutator).Parallel()
|
||||
})
|
||||
|
||||
bp += GatherRequiredDepsForTest()
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"a.java": nil,
|
||||
"b.java": nil,
|
||||
"c.java": nil,
|
||||
"b.kt": nil,
|
||||
"a.jar": nil,
|
||||
"b.jar": nil,
|
||||
"APP_NOTICE": nil,
|
||||
"GENRULE_NOTICE": nil,
|
||||
"LIB_NOTICE": nil,
|
||||
"TOOL_NOTICE": nil,
|
||||
"java-res/a/a": nil,
|
||||
"java-res/b/b": nil,
|
||||
"java-res2/a": nil,
|
||||
"java-fg/a.java": nil,
|
||||
"java-fg/b.java": nil,
|
||||
"java-fg/c.java": nil,
|
||||
"api/current.txt": nil,
|
||||
"api/removed.txt": nil,
|
||||
"api/system-current.txt": nil,
|
||||
"api/system-removed.txt": nil,
|
||||
"api/test-current.txt": nil,
|
||||
"api/test-removed.txt": nil,
|
||||
"framework/aidl/a.aidl": nil,
|
||||
|
||||
"prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so": nil,
|
||||
|
||||
"prebuilts/sdk/14/public/android.jar": nil,
|
||||
"prebuilts/sdk/14/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/14/system/android.jar": nil,
|
||||
"prebuilts/sdk/17/public/android.jar": nil,
|
||||
"prebuilts/sdk/17/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/17/system/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/29/system/android.jar": nil,
|
||||
"prebuilts/sdk/current/core/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/current/public/core.jar": nil,
|
||||
"prebuilts/sdk/current/system/android.jar": nil,
|
||||
"prebuilts/sdk/current/test/android.jar": nil,
|
||||
"prebuilts/sdk/28/public/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/tools/core-lambda-stubs.jar": nil,
|
||||
"prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "current"],}`),
|
||||
|
||||
"prebuilts/apk/app.apk": nil,
|
||||
"prebuilts/apk/app_arm.apk": nil,
|
||||
"prebuilts/apk/app_arm64.apk": nil,
|
||||
"prebuilts/apk/app_xhdpi.apk": nil,
|
||||
"prebuilts/apk/app_xxhdpi.apk": nil,
|
||||
|
||||
// For framework-res, which is an implicit dependency for framework
|
||||
"AndroidManifest.xml": nil,
|
||||
"build/make/target/product/security/testkey": nil,
|
||||
|
||||
"build/soong/scripts/jar-wrapper.sh": nil,
|
||||
|
||||
"build/make/core/verify_uses_libraries.sh": nil,
|
||||
|
||||
"build/make/core/proguard.flags": nil,
|
||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||
|
||||
"jdk8/jre/lib/jce.jar": nil,
|
||||
"jdk8/jre/lib/rt.jar": nil,
|
||||
"jdk8/lib/tools.jar": nil,
|
||||
|
||||
"bar-doc/a.java": nil,
|
||||
"bar-doc/b.java": nil,
|
||||
"bar-doc/IFoo.aidl": nil,
|
||||
"bar-doc/IBar.aidl": nil,
|
||||
"bar-doc/known_oj_tags.txt": nil,
|
||||
"external/doclava/templates-sdk": nil,
|
||||
|
||||
"cert/new_cert.x509.pem": nil,
|
||||
"cert/new_cert.pk8": nil,
|
||||
|
||||
"testdata/data": nil,
|
||||
|
||||
"stubs-sources/foo/Foo.java": nil,
|
||||
"stubs/sources/foo/Foo.java": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func run(t *testing.T, ctx *android.TestContext, config android.Config) {
|
||||
t.Helper()
|
||||
|
||||
pathCtx := android.PathContextForTesting(config, nil)
|
||||
pathCtx := android.PathContextForTesting(config)
|
||||
setDexpreoptTestGlobalConfig(config, dexpreopt.GlobalConfigForTests(pathCtx))
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
||||
android.FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
@ -237,17 +134,17 @@ func run(t *testing.T, ctx *android.TestContext, config android.Config) {
|
|||
|
||||
func testJavaError(t *testing.T, pattern string, bp string) (*android.TestContext, android.Config) {
|
||||
t.Helper()
|
||||
return testJavaErrorWithConfig(t, pattern, bp, testConfig(nil))
|
||||
return testJavaErrorWithConfig(t, pattern, testConfig(nil, bp, nil))
|
||||
}
|
||||
|
||||
func testJavaErrorWithConfig(t *testing.T, pattern string, bp string, config android.Config) (*android.TestContext, android.Config) {
|
||||
func testJavaErrorWithConfig(t *testing.T, pattern string, config android.Config) (*android.TestContext, android.Config) {
|
||||
t.Helper()
|
||||
ctx := testContext(bp, nil)
|
||||
ctx := testContext()
|
||||
|
||||
pathCtx := android.PathContextForTesting(config, nil)
|
||||
pathCtx := android.PathContextForTesting(config)
|
||||
setDexpreoptTestGlobalConfig(config, dexpreopt.GlobalConfigForTests(pathCtx))
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseBlueprintsFiles("Android.bp")
|
||||
if len(errs) > 0 {
|
||||
android.FailIfNoMatchingErrors(t, pattern, errs)
|
||||
|
@ -266,12 +163,12 @@ func testJavaErrorWithConfig(t *testing.T, pattern string, bp string, config and
|
|||
|
||||
func testJava(t *testing.T, bp string) (*android.TestContext, android.Config) {
|
||||
t.Helper()
|
||||
return testJavaWithConfig(t, bp, testConfig(nil))
|
||||
return testJavaWithConfig(t, testConfig(nil, bp, nil))
|
||||
}
|
||||
|
||||
func testJavaWithConfig(t *testing.T, bp string, config android.Config) (*android.TestContext, android.Config) {
|
||||
func testJavaWithConfig(t *testing.T, config android.Config) (*android.TestContext, android.Config) {
|
||||
t.Helper()
|
||||
ctx := testContext(bp, nil)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
return ctx, config
|
||||
|
@ -520,9 +417,6 @@ func TestSdkVersionByPartition(t *testing.T) {
|
|||
`)
|
||||
|
||||
for _, enforce := range []bool{true, false} {
|
||||
|
||||
config := testConfig(nil)
|
||||
config.TestProductVariables.EnforceProductPartitionInterface = proptools.BoolPtr(enforce)
|
||||
bp := `
|
||||
java_library {
|
||||
name: "foo",
|
||||
|
@ -530,10 +424,13 @@ func TestSdkVersionByPartition(t *testing.T) {
|
|||
product_specific: true,
|
||||
}
|
||||
`
|
||||
|
||||
config := testConfig(nil, bp, nil)
|
||||
config.TestProductVariables.EnforceProductPartitionInterface = proptools.BoolPtr(enforce)
|
||||
if enforce {
|
||||
testJavaErrorWithConfig(t, "sdk_version must have a value when the module is located at vendor or product", bp, config)
|
||||
testJavaErrorWithConfig(t, "sdk_version must have a value when the module is located at vendor or product", config)
|
||||
} else {
|
||||
testJavaWithConfig(t, bp, config)
|
||||
testJavaWithConfig(t, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1127,8 +1024,7 @@ func TestExcludeFileGroupInSrcs(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestJavaLibrary(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
ctx := testContext("", map[string][]byte{
|
||||
config := testConfig(nil, "", map[string][]byte{
|
||||
"libcore/Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "core",
|
||||
|
@ -1136,6 +1032,7 @@ func TestJavaLibrary(t *testing.T) {
|
|||
system_modules: "none",
|
||||
}`),
|
||||
})
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
}
|
||||
|
||||
|
|
|
@ -327,14 +327,14 @@ func TestClasspath(t *testing.T) {
|
|||
|
||||
// Test with legacy javac -source 1.8 -target 1.8
|
||||
t.Run("Java language level 8", func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testConfig(nil, bpJava8, nil)
|
||||
if testcase.unbundled {
|
||||
config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true)
|
||||
}
|
||||
if testcase.pdk {
|
||||
config.TestProductVariables.Pdk = proptools.BoolPtr(true)
|
||||
}
|
||||
ctx := testContext(bpJava8, nil)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
checkClasspath(t, ctx, true /* isJava8 */)
|
||||
|
@ -350,14 +350,14 @@ func TestClasspath(t *testing.T) {
|
|||
|
||||
// Test with default javac -source 9 -target 9
|
||||
t.Run("Java language level 9", func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testConfig(nil, bp, nil)
|
||||
if testcase.unbundled {
|
||||
config.TestProductVariables.Unbundled_build = proptools.BoolPtr(true)
|
||||
}
|
||||
if testcase.pdk {
|
||||
config.TestProductVariables.Pdk = proptools.BoolPtr(true)
|
||||
}
|
||||
ctx := testContext(bp, nil)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
checkClasspath(t, ctx, false /* isJava8 */)
|
||||
|
@ -373,7 +373,7 @@ func TestClasspath(t *testing.T) {
|
|||
|
||||
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
|
||||
t.Run("REL + Java language level 8", func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testConfig(nil, bpJava8, nil)
|
||||
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL")
|
||||
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true)
|
||||
|
||||
|
@ -383,7 +383,7 @@ func TestClasspath(t *testing.T) {
|
|||
if testcase.pdk {
|
||||
config.TestProductVariables.Pdk = proptools.BoolPtr(true)
|
||||
}
|
||||
ctx := testContext(bpJava8, nil)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
checkClasspath(t, ctx, true /* isJava8 */)
|
||||
|
@ -391,7 +391,7 @@ func TestClasspath(t *testing.T) {
|
|||
|
||||
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
|
||||
t.Run("REL + Java language level 9", func(t *testing.T) {
|
||||
config := testConfig(nil)
|
||||
config := testConfig(nil, bp, nil)
|
||||
config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("REL")
|
||||
config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(true)
|
||||
|
||||
|
@ -401,7 +401,7 @@ func TestClasspath(t *testing.T) {
|
|||
if testcase.pdk {
|
||||
config.TestProductVariables.Pdk = proptools.BoolPtr(true)
|
||||
}
|
||||
ctx := testContext(bp, nil)
|
||||
ctx := testContext()
|
||||
run(t, ctx, config)
|
||||
|
||||
checkClasspath(t, ctx, false /* isJava8 */)
|
||||
|
|
104
java/testing.go
104
java/testing.go
|
@ -20,14 +20,114 @@ import (
|
|||
"android/soong/android"
|
||||
)
|
||||
|
||||
func TestConfig(buildDir string, env map[string]string) android.Config {
|
||||
func TestConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) android.Config {
|
||||
bp += GatherRequiredDepsForTest()
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"a.java": nil,
|
||||
"b.java": nil,
|
||||
"c.java": nil,
|
||||
"b.kt": nil,
|
||||
"a.jar": nil,
|
||||
"b.jar": nil,
|
||||
"APP_NOTICE": nil,
|
||||
"GENRULE_NOTICE": nil,
|
||||
"LIB_NOTICE": nil,
|
||||
"TOOL_NOTICE": nil,
|
||||
"java-res/a/a": nil,
|
||||
"java-res/b/b": nil,
|
||||
"java-res2/a": nil,
|
||||
"java-fg/a.java": nil,
|
||||
"java-fg/b.java": nil,
|
||||
"java-fg/c.java": nil,
|
||||
"api/current.txt": nil,
|
||||
"api/removed.txt": nil,
|
||||
"api/system-current.txt": nil,
|
||||
"api/system-removed.txt": nil,
|
||||
"api/test-current.txt": nil,
|
||||
"api/test-removed.txt": nil,
|
||||
"framework/aidl/a.aidl": nil,
|
||||
|
||||
"prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so": nil,
|
||||
|
||||
"prebuilts/sdk/14/public/android.jar": nil,
|
||||
"prebuilts/sdk/14/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/14/system/android.jar": nil,
|
||||
"prebuilts/sdk/17/public/android.jar": nil,
|
||||
"prebuilts/sdk/17/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/17/system/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/android.jar": nil,
|
||||
"prebuilts/sdk/29/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/29/system/android.jar": nil,
|
||||
"prebuilts/sdk/current/core/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/android.jar": nil,
|
||||
"prebuilts/sdk/current/public/framework.aidl": nil,
|
||||
"prebuilts/sdk/current/public/core.jar": nil,
|
||||
"prebuilts/sdk/current/system/android.jar": nil,
|
||||
"prebuilts/sdk/current/test/android.jar": nil,
|
||||
"prebuilts/sdk/28/public/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/foo.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/foo-removed.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/bar.txt": nil,
|
||||
"prebuilts/sdk/28/public/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/28/system/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/28/test/api/bar-removed.txt": nil,
|
||||
"prebuilts/sdk/tools/core-lambda-stubs.jar": nil,
|
||||
"prebuilts/sdk/Android.bp": []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "current"],}`),
|
||||
|
||||
"prebuilts/apk/app.apk": nil,
|
||||
"prebuilts/apk/app_arm.apk": nil,
|
||||
"prebuilts/apk/app_arm64.apk": nil,
|
||||
"prebuilts/apk/app_xhdpi.apk": nil,
|
||||
"prebuilts/apk/app_xxhdpi.apk": nil,
|
||||
|
||||
// For framework-res, which is an implicit dependency for framework
|
||||
"AndroidManifest.xml": nil,
|
||||
"build/make/target/product/security/testkey": nil,
|
||||
|
||||
"build/soong/scripts/jar-wrapper.sh": nil,
|
||||
|
||||
"build/make/core/verify_uses_libraries.sh": nil,
|
||||
|
||||
"build/make/core/proguard.flags": nil,
|
||||
"build/make/core/proguard_basic_keeps.flags": nil,
|
||||
|
||||
"jdk8/jre/lib/jce.jar": nil,
|
||||
"jdk8/jre/lib/rt.jar": nil,
|
||||
"jdk8/lib/tools.jar": nil,
|
||||
|
||||
"bar-doc/a.java": nil,
|
||||
"bar-doc/b.java": nil,
|
||||
"bar-doc/IFoo.aidl": nil,
|
||||
"bar-doc/IBar.aidl": nil,
|
||||
"bar-doc/known_oj_tags.txt": nil,
|
||||
"external/doclava/templates-sdk": nil,
|
||||
|
||||
"cert/new_cert.x509.pem": nil,
|
||||
"cert/new_cert.pk8": nil,
|
||||
|
||||
"testdata/data": nil,
|
||||
|
||||
"stubs-sources/foo/Foo.java": nil,
|
||||
"stubs/sources/foo/Foo.java": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
if env == nil {
|
||||
env = make(map[string]string)
|
||||
}
|
||||
if env["ANDROID_JAVA8_HOME"] == "" {
|
||||
env["ANDROID_JAVA8_HOME"] = "jdk8"
|
||||
}
|
||||
config := android.TestArchConfig(buildDir, env)
|
||||
config := android.TestArchConfig(buildDir, env, bp, mockFS)
|
||||
|
||||
return config
|
||||
}
|
||||
|
|
|
@ -28,6 +28,8 @@ import (
|
|||
"android/soong/android"
|
||||
)
|
||||
|
||||
var buildDir string
|
||||
|
||||
type pyModule struct {
|
||||
name string
|
||||
actualVersion string
|
||||
|
@ -50,7 +52,7 @@ var (
|
|||
noSrcFileErr = moduleVariantErrTemplate + "doesn't have any source files!"
|
||||
badSrcFileExtErr = moduleVariantErrTemplate + "srcs: found non (.py|.proto) file: %q!"
|
||||
badDataFileExtErr = moduleVariantErrTemplate + "data: found (.py|.proto) file: %q!"
|
||||
bpFile = "Blueprints"
|
||||
bpFile = "Android.bp"
|
||||
|
||||
data = []struct {
|
||||
desc string
|
||||
|
@ -71,7 +73,7 @@ var (
|
|||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(noSrcFileErr,
|
||||
"dir/Blueprints:1:1", "lib1", "PY3"),
|
||||
"dir/Android.bp:1:1", "lib1", "PY3"),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -90,7 +92,7 @@ var (
|
|||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(badSrcFileExtErr,
|
||||
"dir/Blueprints:3:11", "lib1", "PY3", "dir/file1.exe"),
|
||||
"dir/Android.bp:3:11", "lib1", "PY3", "dir/file1.exe"),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -113,7 +115,7 @@ var (
|
|||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(badDataFileExtErr,
|
||||
"dir/Blueprints:6:11", "lib1", "PY3", "dir/file2.py"),
|
||||
"dir/Android.bp:6:11", "lib1", "PY3", "dir/file2.py"),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -149,9 +151,9 @@ var (
|
|||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(pkgPathErrTemplate,
|
||||
"dir/Blueprints:11:15", "lib2", "PY3", "a/c/../../../"),
|
||||
"dir/Android.bp:11:15", "lib2", "PY3", "a/c/../../../"),
|
||||
fmt.Sprintf(pkgPathErrTemplate,
|
||||
"dir/Blueprints:19:15", "lib3", "PY3", "/a/c/../../"),
|
||||
"dir/Android.bp:19:15", "lib3", "PY3", "/a/c/../../"),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -174,11 +176,11 @@ var (
|
|||
"dir/-e/f/file1.py": nil,
|
||||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Blueprints:4:11",
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Android.bp:4:11",
|
||||
"lib1", "PY3", "a/b/c/-e/f/file1.py", "-e"),
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Blueprints:4:11",
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Android.bp:4:11",
|
||||
"lib1", "PY3", "a/b/c/.file1.py", ".file1"),
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Blueprints:4:11",
|
||||
fmt.Sprintf(badIdentifierErrTemplate, "dir/Android.bp:4:11",
|
||||
"lib1", "PY3", "a/b/c/123/file1.py", "123"),
|
||||
},
|
||||
},
|
||||
|
@ -211,7 +213,7 @@ var (
|
|||
"dir/file1.py": nil,
|
||||
},
|
||||
errors: []string{
|
||||
fmt.Sprintf(dupRunfileErrTemplate, "dir/Blueprints:9:6",
|
||||
fmt.Sprintf(dupRunfileErrTemplate, "dir/Android.bp:9:6",
|
||||
"lib2", "PY3", "a/b/c/file1.py", "lib2", "dir/file1.py",
|
||||
"lib1", "dir/c/file1.py"),
|
||||
},
|
||||
|
@ -324,10 +326,9 @@ var (
|
|||
)
|
||||
|
||||
func TestPythonModule(t *testing.T) {
|
||||
config, buildDir := setupBuildEnv(t)
|
||||
defer tearDownBuildEnv(buildDir)
|
||||
for _, d := range data {
|
||||
t.Run(d.desc, func(t *testing.T) {
|
||||
config := android.TestConfig(buildDir, nil, "", d.mockFiles)
|
||||
ctx := android.NewTestContext()
|
||||
ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("version_split", versionSplitMutator()).Parallel()
|
||||
|
@ -336,8 +337,7 @@ func TestPythonModule(t *testing.T) {
|
|||
ctx.RegisterModuleType("python_binary_host", PythonBinaryHostFactory)
|
||||
ctx.RegisterModuleType("python_defaults", defaultsFactory)
|
||||
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
|
||||
ctx.Register()
|
||||
ctx.MockFileSystem(d.mockFiles)
|
||||
ctx.Register(config)
|
||||
_, testErrs := ctx.ParseBlueprintsFiles(bpFile)
|
||||
android.FailIfErrored(t, testErrs)
|
||||
_, actErrs := ctx.PrepareBuildActions(config)
|
||||
|
@ -425,17 +425,25 @@ func expectModule(t *testing.T, ctx *android.TestContext, buildDir, name, varian
|
|||
return
|
||||
}
|
||||
|
||||
func setupBuildEnv(t *testing.T) (config android.Config, buildDir string) {
|
||||
buildDir, err := ioutil.TempDir("", buildNamePrefix)
|
||||
func setUp() {
|
||||
var err error
|
||||
buildDir, err = ioutil.TempDir("", "soong_python_test")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
config = android.TestConfig(buildDir, nil)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func tearDownBuildEnv(buildDir string) {
|
||||
func tearDown() {
|
||||
os.RemoveAll(buildDir)
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
run := func() int {
|
||||
setUp()
|
||||
defer tearDown()
|
||||
|
||||
return m.Run()
|
||||
}
|
||||
|
||||
os.Exit(run())
|
||||
}
|
||||
|
|
|
@ -51,6 +51,19 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testConfig(bp string) android.Config {
|
||||
bp = bp + GatherRequiredDepsForTest()
|
||||
|
||||
fs := map[string][]byte{
|
||||
"foo.rs": nil,
|
||||
"src/bar.rs": nil,
|
||||
"liby.so": nil,
|
||||
"libz.so": nil,
|
||||
}
|
||||
|
||||
return android.TestArchConfig(buildDir, nil, bp, fs)
|
||||
}
|
||||
|
||||
func testRust(t *testing.T, bp string) *android.TestContext {
|
||||
// TODO (b/140435149)
|
||||
if runtime.GOOS != "linux" {
|
||||
|
@ -58,11 +71,11 @@ func testRust(t *testing.T, bp string) *android.TestContext {
|
|||
}
|
||||
|
||||
t.Helper()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := testConfig(bp)
|
||||
|
||||
t.Helper()
|
||||
ctx := CreateTestContext(bp)
|
||||
ctx.Register()
|
||||
ctx := CreateTestContext()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
|
@ -79,10 +92,10 @@ func testRustError(t *testing.T, pattern string, bp string) {
|
|||
}
|
||||
|
||||
t.Helper()
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
config := testConfig(bp)
|
||||
|
||||
ctx := CreateTestContext(bp)
|
||||
ctx.Register()
|
||||
ctx := CreateTestContext()
|
||||
ctx.Register(config)
|
||||
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
if len(errs) > 0 {
|
||||
|
|
|
@ -162,7 +162,7 @@ func GatherRequiredDepsForTest() string {
|
|||
return bp
|
||||
}
|
||||
|
||||
func CreateTestContext(bp string) *android.TestContext {
|
||||
func CreateTestContext() *android.TestContext {
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
||||
ctx.RegisterModuleType("cc_object", cc.ObjectFactory)
|
||||
|
@ -193,17 +193,6 @@ func CreateTestContext(bp string) *android.TestContext {
|
|||
ctx.BottomUp("rust_libraries", LibraryMutator).Parallel()
|
||||
ctx.BottomUp("rust_unit_tests", TestPerSrcMutator).Parallel()
|
||||
})
|
||||
bp = bp + GatherRequiredDepsForTest()
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"foo.rs": nil,
|
||||
"src/bar.rs": nil,
|
||||
"liby.so": nil,
|
||||
"libz.so": nil,
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
|
|
@ -29,7 +29,36 @@ import (
|
|||
)
|
||||
|
||||
func testSdkContext(bp string, fs map[string][]byte) (*android.TestContext, android.Config) {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
bp = bp + `
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "myapex.avbpubkey",
|
||||
private_key: "myapex.pem",
|
||||
}
|
||||
|
||||
android_app_certificate {
|
||||
name: "myapex.cert",
|
||||
certificate: "myapex",
|
||||
}
|
||||
` + cc.GatherRequiredDepsForTest(android.Android)
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"build/make/target/product/security": nil,
|
||||
"apex_manifest.json": nil,
|
||||
"system/sepolicy/apex/myapex-file_contexts": nil,
|
||||
"system/sepolicy/apex/myapex2-file_contexts": nil,
|
||||
"myapex.avbpubkey": nil,
|
||||
"myapex.pem": nil,
|
||||
"myapex.x509.pem": nil,
|
||||
"myapex.pk8": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
config := android.TestArchConfig(buildDir, nil, bp, mockFS)
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
|
||||
// from android package
|
||||
|
@ -84,38 +113,7 @@ func testSdkContext(bp string, fs map[string][]byte) (*android.TestContext, andr
|
|||
ctx.PreDepsMutators(RegisterPreDepsMutators)
|
||||
ctx.PostDepsMutators(RegisterPostDepsMutators)
|
||||
|
||||
ctx.Register()
|
||||
|
||||
bp = bp + `
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "myapex.avbpubkey",
|
||||
private_key: "myapex.pem",
|
||||
}
|
||||
|
||||
android_app_certificate {
|
||||
name: "myapex.cert",
|
||||
certificate: "myapex",
|
||||
}
|
||||
` + cc.GatherRequiredDepsForTest(android.Android)
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"build/make/target/product/security": nil,
|
||||
"apex_manifest.json": nil,
|
||||
"system/sepolicy/apex/myapex-file_contexts": nil,
|
||||
"system/sepolicy/apex/myapex2-file_contexts": nil,
|
||||
"myapex.avbpubkey": nil,
|
||||
"myapex.pem": nil,
|
||||
"myapex.x509.pem": nil,
|
||||
"myapex.pk8": nil,
|
||||
}
|
||||
|
||||
for k, v := range fs {
|
||||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
ctx.Register(config)
|
||||
|
||||
return ctx, config
|
||||
}
|
||||
|
|
|
@ -52,8 +52,7 @@ func TestMain(m *testing.M) {
|
|||
os.Exit(run())
|
||||
}
|
||||
|
||||
func testContext(config android.Config, bp string,
|
||||
fs map[string][]byte) *android.TestContext {
|
||||
func testContext(config android.Config) *android.TestContext {
|
||||
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("android_app", java.AndroidAppFactory)
|
||||
|
@ -82,13 +81,23 @@ func testContext(config android.Config, bp string,
|
|||
|
||||
ctx.RegisterModuleType("sysprop_library", syspropLibraryFactory)
|
||||
|
||||
ctx.Register()
|
||||
ctx.Register(config)
|
||||
|
||||
bp += java.GatherRequiredDepsForTest()
|
||||
return ctx
|
||||
}
|
||||
|
||||
func run(t *testing.T, ctx *android.TestContext, config android.Config) {
|
||||
t.Helper()
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
android.FailIfErrored(t, errs)
|
||||
}
|
||||
|
||||
func testConfig(env map[string]string, bp string, fs map[string][]byte) android.Config {
|
||||
bp += cc.GatherRequiredDepsForTest(android.Android)
|
||||
|
||||
mockFS := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"a.java": nil,
|
||||
"b.java": nil,
|
||||
"c.java": nil,
|
||||
|
@ -134,21 +143,7 @@ func testContext(config android.Config, bp string,
|
|||
mockFS[k] = v
|
||||
}
|
||||
|
||||
ctx.MockFileSystem(mockFS)
|
||||
|
||||
return ctx
|
||||
}
|
||||
|
||||
func run(t *testing.T, ctx *android.TestContext, config android.Config) {
|
||||
t.Helper()
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
android.FailIfErrored(t, errs)
|
||||
}
|
||||
|
||||
func testConfig(env map[string]string) android.Config {
|
||||
config := java.TestConfig(buildDir, env)
|
||||
config := java.TestConfig(buildDir, env, bp, mockFS)
|
||||
|
||||
config.TestProductVariables.DeviceSystemSdkVersions = []string{"28"}
|
||||
config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current")
|
||||
|
@ -160,8 +155,8 @@ func testConfig(env map[string]string) android.Config {
|
|||
|
||||
func test(t *testing.T, bp string) *android.TestContext {
|
||||
t.Helper()
|
||||
config := testConfig(nil)
|
||||
ctx := testContext(config, bp, nil)
|
||||
config := testConfig(nil, bp, nil)
|
||||
ctx := testContext(config)
|
||||
run(t, ctx, config)
|
||||
|
||||
return ctx
|
||||
|
|
|
@ -48,20 +48,18 @@ func TestMain(m *testing.M) {
|
|||
}
|
||||
|
||||
func testXml(t *testing.T, bp string) *android.TestContext {
|
||||
config := android.TestArchConfig(buildDir, nil)
|
||||
fs := map[string][]byte{
|
||||
"foo.xml": nil,
|
||||
"foo.dtd": nil,
|
||||
"bar.xml": nil,
|
||||
"bar.xsd": nil,
|
||||
"baz.xml": nil,
|
||||
}
|
||||
config := android.TestArchConfig(buildDir, nil, bp, fs)
|
||||
ctx := android.NewTestArchContext()
|
||||
ctx.RegisterModuleType("prebuilt_etc", android.PrebuiltEtcFactory)
|
||||
ctx.RegisterModuleType("prebuilt_etc_xml", PrebuiltEtcXmlFactory)
|
||||
ctx.Register()
|
||||
mockFiles := map[string][]byte{
|
||||
"Android.bp": []byte(bp),
|
||||
"foo.xml": nil,
|
||||
"foo.dtd": nil,
|
||||
"bar.xml": nil,
|
||||
"bar.xsd": nil,
|
||||
"baz.xml": nil,
|
||||
}
|
||||
ctx.MockFileSystem(mockFiles)
|
||||
ctx.Register(config)
|
||||
_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
|
||||
android.FailIfErrored(t, errs)
|
||||
_, errs = ctx.PrepareBuildActions(config)
|
||||
|
|
Loading…
Reference in New Issue