From 29072a9c1e32c59e9f81a49b1e01efb217fc6e7a Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Tue, 16 Mar 2021 10:12:49 +0000 Subject: [PATCH] Separate metadata provider from apex contents provider The platform_compat_config_singleton only needs access to the metadata so this separates that method into its own interface, distinct from the one needed by the apex. This also adds a test to ensure that the merging still works. Bug: 182402754 Test: m nothing Change-Id: I5212239786810e5fc5eb99831b1122db93d1329f --- java/Android.bp | 1 + java/platform_compat_config.go | 10 ++++-- java/platform_compat_config_test.go | 53 +++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 java/platform_compat_config_test.go diff --git a/java/Android.bp b/java/Android.bp index 9e2db8314..56cc40129 100644 --- a/java/Android.bp +++ b/java/Android.bp @@ -75,6 +75,7 @@ bootstrap_go_package { "java_test.go", "jdeps_test.go", "kotlin_test.go", + "platform_compat_config_test.go", "plugin_test.go", "rro_test.go", "sdk_test.go", diff --git a/java/platform_compat_config.go b/java/platform_compat_config.go index 01e651bfb..4c3143a48 100644 --- a/java/platform_compat_config.go +++ b/java/platform_compat_config.go @@ -48,7 +48,7 @@ type platformCompatConfig struct { metadataFile android.OutputPath } -func (p *platformCompatConfig) compatConfigMetadata() android.OutputPath { +func (p *platformCompatConfig) compatConfigMetadata() android.Path { return p.metadataFile } @@ -60,16 +60,20 @@ func (p *platformCompatConfig) SubDir() string { return "compatconfig" } +type platformCompatConfigMetadataProvider interface { + compatConfigMetadata() android.Path +} + type PlatformCompatConfigIntf interface { android.Module - compatConfigMetadata() android.OutputPath CompatConfig() android.OutputPath // Sub dir under etc dir. SubDir() string } var _ PlatformCompatConfigIntf = (*platformCompatConfig)(nil) +var _ platformCompatConfigMetadataProvider = (*platformCompatConfig)(nil) func (p *platformCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) { rule := android.NewRuleBuilder(pctx, ctx) @@ -122,7 +126,7 @@ func (p *platformCompatConfigSingleton) GenerateBuildActions(ctx android.Singlet var compatConfigMetadata android.Paths ctx.VisitAllModules(func(module android.Module) { - if c, ok := module.(PlatformCompatConfigIntf); ok { + if c, ok := module.(platformCompatConfigMetadataProvider); ok { metadata := c.compatConfigMetadata() compatConfigMetadata = append(compatConfigMetadata, metadata) } diff --git a/java/platform_compat_config_test.go b/java/platform_compat_config_test.go new file mode 100644 index 000000000..0c5d001ac --- /dev/null +++ b/java/platform_compat_config_test.go @@ -0,0 +1,53 @@ +// Copyright 2021 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 java + +import ( + "testing" + + "android/soong/android" +) + +func TestPlatformCompatConfig(t *testing.T) { + result := emptyFixtureFactory.RunTest(t, + PrepareForTestWithPlatformCompatConfig, + android.FixtureWithRootAndroidBp(` + platform_compat_config { + name: "myconfig2", + } + platform_compat_config { + name: "myconfig1", + } + platform_compat_config { + name: "myconfig3", + } + `), + ) + + checkMergedCompatConfigInputs(t, result, "myconfig", + "out/soong/.intermediates/myconfig1/myconfig1_meta.xml", + "out/soong/.intermediates/myconfig2/myconfig2_meta.xml", + "out/soong/.intermediates/myconfig3/myconfig3_meta.xml", + ) +} + +// Check that the merged file create by platform_compat_config_singleton has the correct inputs. +func checkMergedCompatConfigInputs(t *testing.T, result *android.TestResult, message string, expectedPaths ...string) { + sourceGlobalCompatConfig := result.SingletonForTests("platform_compat_config_singleton") + allOutputs := sourceGlobalCompatConfig.AllOutputs() + android.AssertIntEquals(t, message+": output len", 1, len(allOutputs)) + output := sourceGlobalCompatConfig.Output(allOutputs[0]) + android.AssertPathsRelativeToTopEquals(t, message+": inputs", expectedPaths, output.Implicits) +}