Merge "Allow namespace config to be tested properly" am: 73d394dec2

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2292017

Change-Id: I0209340278dfca4abe0fe6c13a070dde783b8820
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Paul Duffin 2022-11-14 14:35:20 +00:00 committed by Automerger Merge Worker
commit 38a5a9e80e
5 changed files with 75 additions and 25 deletions

View file

@ -658,7 +658,7 @@ func (t *TestPathContext) AddNinjaFileDeps(deps ...string) {
func createFixture(t *testing.T, buildDir string, preparers []*simpleFixturePreparer) Fixture {
config := TestConfig(buildDir, nil, "", nil)
ctx := NewTestContext(config)
ctx := newTestContextForFixture(config)
fixture := &fixture{
preparers: preparers,
t: t,
@ -790,6 +790,16 @@ func (f *fixture) RunTest() *TestResult {
}
}
// Create and set the Context's NameInterface. It needs to be created here as it depends on the
// configuration that has been prepared for this fixture.
resolver := NewNameResolver(ctx.config)
// Set the NameInterface in the main Context.
ctx.SetNameInterface(resolver)
// Set the NameResolver in the TestContext.
ctx.NameResolver = resolver
ctx.Register()
var ninjaDeps []string
extraNinjaDeps, errs := ctx.ParseBlueprintsFiles("ignored")

View file

@ -91,7 +91,27 @@ type NameResolver struct {
namespaceExportFilter func(*Namespace) bool
}
func NewNameResolver(namespaceExportFilter func(*Namespace) bool) *NameResolver {
// NameResolverConfig provides the subset of the Config interface needed by the
// NewNameResolver function.
type NameResolverConfig interface {
// ExportedNamespaces is the list of namespaces that Soong must export to
// make.
ExportedNamespaces() []string
}
func NewNameResolver(config NameResolverConfig) *NameResolver {
namespacePathsToExport := make(map[string]bool)
for _, namespaceName := range config.ExportedNamespaces() {
namespacePathsToExport[namespaceName] = true
}
namespacePathsToExport["."] = true // always export the root namespace
namespaceExportFilter := func(namespace *Namespace) bool {
return namespacePathsToExport[namespace.Path]
}
r := &NameResolver{
namespacesByDir: sync.Map{},
namespaceExportFilter: namespaceExportFilter,

View file

@ -602,6 +602,36 @@ func TestRename(t *testing.T) {
// RunTest will report any errors
}
func TestNamespace_Exports(t *testing.T) {
result := GroupFixturePreparers(
prepareForTestWithNamespace,
FixtureModifyProductVariables(func(variables FixtureProductVariables) {
variables.NamespacesToExport = []string{"dir1"}
}),
dirBpToPreparer(map[string]string{
"dir1": `
soong_namespace {
}
test_module {
name: "a",
}
`,
"dir2": `
soong_namespace {
}
test_module {
name: "b",
}
`,
}),
).RunTest(t)
aModule := result.Module("a", "")
AssertBoolEquals(t, "a exported", true, aModule.ExportedToMake())
bModule := result.Module("b", "")
AssertBoolEquals(t, "b not exported", false, bModule.ExportedToMake())
}
// some utils to support the tests
var prepareForTestWithNamespace = GroupFixturePreparers(

View file

@ -30,19 +30,11 @@ import (
"github.com/google/blueprint/proptools"
)
func NewTestContext(config Config) *TestContext {
namespaceExportFilter := func(namespace *Namespace) bool {
return true
}
nameResolver := NewNameResolver(namespaceExportFilter)
func newTestContextForFixture(config Config) *TestContext {
ctx := &TestContext{
Context: &Context{blueprint.NewContext(), config},
NameResolver: nameResolver,
Context: &Context{blueprint.NewContext(), config},
}
ctx.SetNameInterface(nameResolver)
ctx.postDeps = append(ctx.postDeps, registerPathDepsMutator)
ctx.SetFs(ctx.config.fs)
@ -53,6 +45,16 @@ func NewTestContext(config Config) *TestContext {
return ctx
}
func NewTestContext(config Config) *TestContext {
ctx := newTestContextForFixture(config)
nameResolver := NewNameResolver(config)
ctx.NameResolver = nameResolver
ctx.SetNameInterface(nameResolver)
return ctx
}
var PrepareForTestWithArchMutator = GroupFixturePreparers(
// Configure architecture targets in the fixture config.
FixtureModifyConfig(modifyTestConfigToSupportArchMutator),

View file

@ -106,19 +106,7 @@ func init() {
}
func newNameResolver(config android.Config) *android.NameResolver {
namespacePathsToExport := make(map[string]bool)
for _, namespaceName := range config.ExportedNamespaces() {
namespacePathsToExport[namespaceName] = true
}
namespacePathsToExport["."] = true // always export the root namespace
exportFilter := func(namespace *android.Namespace) bool {
return namespacePathsToExport[namespace.Path]
}
return android.NewNameResolver(exportFilter)
return android.NewNameResolver(config)
}
func newContext(configuration android.Config) *android.Context {