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

Commit 73d394de authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge "Allow namespace config to be tested properly"

parents 7cc632d3 3f7bf9fa
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -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")
+21 −1
Original line number Diff line number Diff line
@@ -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,
+30 −0
Original line number Diff line number Diff line
@@ -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(
+12 −10
Original line number Diff line number Diff line
@@ -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,
	}

	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),
+1 −13
Original line number Diff line number Diff line
@@ -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 {