diff options
author | 2024-12-17 21:15:59 +0900 | |
---|---|---|
committer | 2025-03-18 16:11:05 +0900 | |
commit | be6f81d61e25753eeecdb65bdf7dd2bb6d4c1a5c (patch) | |
tree | 8e289a62ad2dab9cbaec0aab99bdc3143b0ff47e /android/config_test.go | |
parent | 247c22ac8648faeb7129c6eb778eb51a06da5f10 (diff) |
Generic configuration for generic system modules.
Config object includes a copy of itself for the generic configuration.
The generic configuration replaces any product-specific configurations
with the generic information.
When a module context gets Config() object, it returns the generic
configuration if the module sets use_generic_config to true. Otherwise,
Config() returns the original config object as before.
By adding `generic:"<value>"` annotation to the product variable, the
variables will be initialized with the <value> for the generic configs.
If the <value> is "unset", the variable will be unset.
The generic modules can be included in the shared system image to be
installed in multiple targets.
Bug: 361816274
Test: m nothing --no-skip-soong-tests
Change-Id: I15e4ade17ad1a8969f8e0e91d994b60545dc412f
Diffstat (limited to 'android/config_test.go')
-rw-r--r-- | android/config_test.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/android/config_test.go b/android/config_test.go index d1b26c12a..81b7c3eb5 100644 --- a/android/config_test.go +++ b/android/config_test.go @@ -281,3 +281,72 @@ func TestPartialCompile(t *testing.T) { }) } } + +type configTestProperties struct { + Use_generic_config *bool +} + +type configTestModule struct { + ModuleBase + properties configTestProperties +} + +func (d *configTestModule) GenerateAndroidBuildActions(ctx ModuleContext) { + deviceName := ctx.Config().DeviceName() + if ctx.ModuleName() == "foo" { + if ctx.Module().UseGenericConfig() { + ctx.PropertyErrorf("use_generic_config", "must not be set for this test") + } + } else if ctx.ModuleName() == "bar" { + if !ctx.Module().UseGenericConfig() { + ctx.ModuleErrorf("\"use_generic_config: true\" must be set for this test") + } + } + + if ctx.Module().UseGenericConfig() { + if deviceName != "generic" { + ctx.ModuleErrorf("Device name for this module must be \"generic\" but %q\n", deviceName) + } + } else { + if deviceName == "generic" { + ctx.ModuleErrorf("Device name for this module must not be \"generic\"\n") + } + } +} + +func configTestModuleFactory() Module { + module := &configTestModule{} + module.AddProperties(&module.properties) + InitAndroidModule(module) + return module +} + +var prepareForConfigTest = GroupFixturePreparers( + FixtureRegisterWithContext(func(ctx RegistrationContext) { + ctx.RegisterModuleType("test", configTestModuleFactory) + }), +) + +func TestGenericConfig(t *testing.T) { + bp := ` + test { + name: "foo", + } + + test { + name: "bar", + use_generic_config: true, + } + ` + + result := GroupFixturePreparers( + prepareForConfigTest, + FixtureWithRootAndroidBp(bp), + ).RunTest(t) + + foo := result.Module("foo", "").(*configTestModule) + bar := result.Module("bar", "").(*configTestModule) + + AssertBoolEquals(t, "Do not use generic config", false, foo.UseGenericConfig()) + AssertBoolEquals(t, "Use generic config", true, bar.UseGenericConfig()) +} |