diff options
-rw-r--r-- | sh/sh_binary.go | 26 | ||||
-rw-r--r-- | sh/sh_binary_test.go | 38 |
2 files changed, 43 insertions, 21 deletions
diff --git a/sh/sh_binary.go b/sh/sh_binary.go index 031cd4717..49f4961f2 100644 --- a/sh/sh_binary.go +++ b/sh/sh_binary.go @@ -40,14 +40,32 @@ var pctx = android.NewPackageContext("android/soong/sh") func init() { pctx.Import("android/soong/android") - android.RegisterModuleType("sh_binary", ShBinaryFactory) - android.RegisterModuleType("sh_binary_host", ShBinaryHostFactory) - android.RegisterModuleType("sh_test", ShTestFactory) - android.RegisterModuleType("sh_test_host", ShTestHostFactory) + registerShBuildComponents(android.InitRegistrationContext) android.RegisterBp2BuildMutator("sh_binary", ShBinaryBp2Build) } +func registerShBuildComponents(ctx android.RegistrationContext) { + ctx.RegisterModuleType("sh_binary", ShBinaryFactory) + ctx.RegisterModuleType("sh_binary_host", ShBinaryHostFactory) + ctx.RegisterModuleType("sh_test", ShTestFactory) + ctx.RegisterModuleType("sh_test_host", ShTestHostFactory) +} + +// Test fixture preparer that will register most sh build components. +// +// Singletons and mutators should only be added here if they are needed for a majority of sh +// module types, otherwise they should be added under a separate preparer to allow them to be +// selected only when needed to reduce test execution time. +// +// Module types do not have much of an overhead unless they are used so this should include as many +// module types as possible. The exceptions are those module types that require mutators and/or +// singletons in order to function in which case they should be kept together in a separate +// preparer. +var PrepareForTestWithShBuildComponents = android.GroupFixturePreparers( + android.FixtureRegisterWithContext(registerShBuildComponents), +) + type shBinaryProperties struct { // Source file of this prebuilt. Src *string `android:"path,arch_variant"` diff --git a/sh/sh_binary_test.go b/sh/sh_binary_test.go index f48f7fb29..7a24168e5 100644 --- a/sh/sh_binary_test.go +++ b/sh/sh_binary_test.go @@ -37,28 +37,32 @@ func TestMain(m *testing.M) { os.Exit(run()) } -func testShBinary(t *testing.T, bp string) (*android.TestContext, android.Config) { - fs := map[string][]byte{ +var shFixtureFactory = android.NewFixtureFactory( + &buildDir, + cc.PrepareForTestWithCcBuildComponents, + PrepareForTestWithShBuildComponents, + android.FixtureMergeMockFs(android.MockFS{ "test.sh": nil, "testdata/data1": nil, "testdata/sub/data2": nil, - } - - config := android.TestArchConfig(buildDir, nil, bp, fs) - - ctx := android.NewTestArchContext(config) - ctx.RegisterModuleType("sh_test", ShTestFactory) - ctx.RegisterModuleType("sh_test_host", ShTestHostFactory) - - cc.RegisterRequiredBuildComponentsForTest(ctx) + }), +) - ctx.Register() - _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) - android.FailIfErrored(t, errs) - _, errs = ctx.PrepareBuildActions(config) - android.FailIfErrored(t, errs) +// testShBinary runs tests using the shFixtureFactory +// +// Do not add any new usages of this, instead use the shFixtureFactory directly as it makes it much +// easier to customize the test behavior. +// +// If it is necessary to customize the behavior of an existing test that uses this then please first +// convert the test to using shFixtureFactory first and then in a following change add the +// appropriate fixture preparers. Keeping the conversion change separate makes it easy to verify +// that it did not change the test behavior unexpectedly. +// +// deprecated +func testShBinary(t *testing.T, bp string) (*android.TestContext, android.Config) { + result := shFixtureFactory.RunTestWithBp(t, bp) - return ctx, config + return result.TestContext, result.Config } func TestShTestSubDir(t *testing.T) { |