// Copyright 2017 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package android import ( "fmt" "strings" "github.com/google/blueprint" ) func NewTestContext() *TestContext { return &TestContext{ Context: blueprint.NewContext(), } } type TestContext struct { *blueprint.Context preArch, preDeps, postDeps []RegisterMutatorFunc } func (ctx *TestContext) PreArchMutators(f RegisterMutatorFunc) { ctx.preArch = append(ctx.preArch, f) } func (ctx *TestContext) PreDepsMutators(f RegisterMutatorFunc) { ctx.preDeps = append(ctx.preDeps, f) } func (ctx *TestContext) PostDepsMutators(f RegisterMutatorFunc) { ctx.postDeps = append(ctx.postDeps, f) } func (ctx *TestContext) Register() { registerMutators(ctx.Context, ctx.preArch, ctx.preDeps, ctx.postDeps) ctx.RegisterSingletonType("env", EnvSingleton) } func (ctx *TestContext) ModuleForTests(name, variant string) TestingModule { var module Module ctx.VisitAllModules(func(m blueprint.Module) { if ctx.ModuleName(m) == name && ctx.ModuleSubDir(m) == variant { module = m.(Module) } }) if module == nil { panic(fmt.Errorf("failed to find module %q variant %q", name, variant)) } return TestingModule{module} } type TestingModule struct { module Module } func (m TestingModule) Module() Module { return m.module } func (m TestingModule) Rule(rule string) ModuleBuildParams { for _, p := range m.module.BuildParamsForTests() { if strings.Contains(p.Rule.String(), rule) { return p } } panic(fmt.Errorf("couldn't find rule %q", rule)) } func (m TestingModule) Output(file string) ModuleBuildParams { for _, p := range m.module.BuildParamsForTests() { outputs := append(WritablePaths(nil), p.Outputs...) if p.Output != nil { outputs = append(outputs, p.Output) } for _, f := range outputs { if f.Base() == file { return p } } } panic(fmt.Errorf("couldn't find output %q", file)) }