blob: b33cb527c56d877cd826153f31d18b82522b4231 [file] [log] [blame]
// Copyright 2019 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 (
"testing"
)
type defaultsTestProperties struct {
Foo []string
}
type defaultsTestModule struct {
ModuleBase
DefaultableModuleBase
properties defaultsTestProperties
}
func (d *defaultsTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
ctx.Build(pctx, BuildParams{
Rule: Touch,
Output: PathForModuleOut(ctx, "out"),
})
}
func defaultsTestModuleFactory() Module {
module := &defaultsTestModule{}
module.AddProperties(&module.properties)
InitAndroidModule(module)
InitDefaultableModule(module)
return module
}
type defaultsTestDefaults struct {
ModuleBase
DefaultsModuleBase
}
func defaultsTestDefaultsFactory() Module {
defaults := &defaultsTestDefaults{}
defaults.AddProperties(&defaultsTestProperties{})
InitDefaultsModule(defaults)
return defaults
}
var prepareForDefaultsTest = GroupFixturePreparers(
PrepareForTestWithDefaults,
FixtureRegisterWithContext(func(ctx RegistrationContext) {
ctx.RegisterModuleType("test", defaultsTestModuleFactory)
ctx.RegisterModuleType("defaults", defaultsTestDefaultsFactory)
}),
)
func TestDefaults(t *testing.T) {
bp := `
defaults {
name: "transitive",
foo: ["transitive"],
}
defaults {
name: "defaults",
defaults: ["transitive"],
foo: ["defaults"],
}
test {
name: "foo",
defaults: ["defaults"],
foo: ["module"],
}
`
result := emptyTestFixtureFactory.RunTest(t,
prepareForDefaultsTest,
FixtureWithRootAndroidBp(bp),
)
foo := result.Module("foo", "").(*defaultsTestModule)
AssertDeepEquals(t, "foo", []string{"transitive", "defaults", "module"}, foo.properties.Foo)
}
func TestDefaultsAllowMissingDependencies(t *testing.T) {
bp := `
defaults {
name: "defaults",
defaults: ["missing"],
foo: ["defaults"],
}
test {
name: "missing_defaults",
defaults: ["missing"],
foo: ["module"],
}
test {
name: "missing_transitive_defaults",
defaults: ["defaults"],
foo: ["module"],
}
`
result := emptyTestFixtureFactory.RunTest(t,
prepareForDefaultsTest,
PrepareForTestWithAllowMissingDependencies,
FixtureWithRootAndroidBp(bp),
)
missingDefaults := result.ModuleForTests("missing_defaults", "").Output("out")
missingTransitiveDefaults := result.ModuleForTests("missing_transitive_defaults", "").Output("out")
AssertSame(t, "missing_defaults rule", ErrorRule, missingDefaults.Rule)
AssertStringEquals(t, "missing_defaults", "module missing_defaults missing dependencies: missing\n", missingDefaults.Args["error"])
// TODO: missing transitive defaults is currently not handled
_ = missingTransitiveDefaults
}