Merge changes Idc01d3cc,I644db99c am: 379f36b6e5
am: 35bc45ceb4
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1660144 Change-Id: I742f7dc058be2068c0a87037a60c0492959417b5
This commit is contained in:
commit
64b3d2adbe
|
@ -26,16 +26,9 @@ import (
|
||||||
// Fixture
|
// Fixture
|
||||||
// =======
|
// =======
|
||||||
// These determine the environment within which a test can be run. Fixtures are mutable and are
|
// These determine the environment within which a test can be run. Fixtures are mutable and are
|
||||||
// created by FixtureFactory instances and mutated by FixturePreparer instances. They are created by
|
// created and mutated by FixturePreparer instances. They are created by first creating a base
|
||||||
// first creating a base Fixture (which is essentially empty) and then applying FixturePreparer
|
// Fixture (which is essentially empty) and then applying FixturePreparer instances to it to modify
|
||||||
// instances to it to modify the environment.
|
// the environment.
|
||||||
//
|
|
||||||
// FixtureFactory (deprecated)
|
|
||||||
// ===========================
|
|
||||||
// These are responsible for creating fixtures. Factories are immutable and are intended to be
|
|
||||||
// initialized once and reused to create multiple fixtures. Each factory has a list of fixture
|
|
||||||
// preparers that prepare a fixture for running a test. Factories can also be used to create other
|
|
||||||
// factories by extending them with additional fixture preparers.
|
|
||||||
//
|
//
|
||||||
// FixturePreparer
|
// FixturePreparer
|
||||||
// ===============
|
// ===============
|
||||||
|
@ -169,77 +162,6 @@ import (
|
||||||
// PrepareForApex,
|
// PrepareForApex,
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
// // FixtureFactory instances have been deprecated, this remains for informational purposes to
|
|
||||||
// // help explain some of the existing code but will be removed along with FixtureFactory.
|
|
||||||
//
|
|
||||||
// var javaFixtureFactory = android.NewFixtureFactory(
|
|
||||||
// PrepareForIntegrationTestWithJava,
|
|
||||||
// FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
|
|
||||||
// ctx.RegisterModuleType("test_module", testModule)
|
|
||||||
// }),
|
|
||||||
// javaMockFS.AddToFixture(),
|
|
||||||
// ...
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// func TestJavaStuff(t *testing.T) {
|
|
||||||
// result := javaFixtureFactory.RunTest(t,
|
|
||||||
// android.FixtureWithRootAndroidBp(`java_library {....}`),
|
|
||||||
// android.MockFS{...}.AddToFixture(),
|
|
||||||
// )
|
|
||||||
// ... test result ...
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// package cc
|
|
||||||
// var PrepareForTestWithCC = GroupFixturePreparers(
|
|
||||||
// android.PrepareForArchMutator,
|
|
||||||
// android.prepareForPrebuilts,
|
|
||||||
// FixtureRegisterWithContext(RegisterRequiredBuildComponentsForTest),
|
|
||||||
// ...
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// package apex
|
|
||||||
//
|
|
||||||
// var PrepareForApex = GroupFixturePreparers(
|
|
||||||
// ...
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// Use modules and mutators from java, cc and apex. Any duplicate preparers (like
|
|
||||||
// android.PrepareForArchMutator) will be automatically deduped.
|
|
||||||
//
|
|
||||||
// var apexFixtureFactory = android.NewFixtureFactory(
|
|
||||||
// PrepareForJava,
|
|
||||||
// PrepareForCC,
|
|
||||||
// PrepareForApex,
|
|
||||||
// )
|
|
||||||
|
|
||||||
// Factory for Fixture objects.
|
|
||||||
//
|
|
||||||
// This is configured with a set of FixturePreparer objects that are used to
|
|
||||||
// initialize each Fixture instance this creates.
|
|
||||||
//
|
|
||||||
// deprecated: Use FixturePreparer instead.
|
|
||||||
type FixtureFactory interface {
|
|
||||||
FixturePreparer
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new FixtureFactory that will apply the supplied preparers.
|
|
||||||
//
|
|
||||||
// The buildDirSupplier is a pointer to the package level buildDir variable that is initialized by
|
|
||||||
// the package level setUp method. It has to be a pointer to the variable as the variable will not
|
|
||||||
// have been initialized at the time the factory is created. If it is nil then a test specific
|
|
||||||
// temporary directory will be created instead.
|
|
||||||
//
|
|
||||||
// deprecated: The functionality provided by FixtureFactory will be merged into FixturePreparer
|
|
||||||
func NewFixtureFactory(buildDirSupplier *string, preparers ...FixturePreparer) FixtureFactory {
|
|
||||||
f := &fixtureFactory{
|
|
||||||
buildDirSupplier: buildDirSupplier,
|
|
||||||
compositeFixturePreparer: compositeFixturePreparer{
|
|
||||||
preparers: dedupAndFlattenPreparers(nil, preparers),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
f.initBaseFixturePreparer(f)
|
|
||||||
return f
|
|
||||||
}
|
|
||||||
|
|
||||||
// A set of mock files to add to the mock file system.
|
// A set of mock files to add to the mock file system.
|
||||||
type MockFS map[string][]byte
|
type MockFS map[string][]byte
|
||||||
|
@ -445,15 +367,6 @@ type FixturePreparer interface {
|
||||||
// Return the flattened and deduped list of simpleFixturePreparer pointers.
|
// Return the flattened and deduped list of simpleFixturePreparer pointers.
|
||||||
list() []*simpleFixturePreparer
|
list() []*simpleFixturePreparer
|
||||||
|
|
||||||
// Creates a copy of this instance and adds some additional preparers.
|
|
||||||
//
|
|
||||||
// Before the preparers are used they are combined with the preparers provided when the factory
|
|
||||||
// was created, any groups of preparers are flattened, and the list is deduped so that each
|
|
||||||
// preparer is only used once. See the file documentation in android/fixture.go for more details.
|
|
||||||
//
|
|
||||||
// deprecated: Use GroupFixturePreparers() instead.
|
|
||||||
Extend(preparers ...FixturePreparer) FixturePreparer
|
|
||||||
|
|
||||||
// Create a Fixture.
|
// Create a Fixture.
|
||||||
Fixture(t *testing.T) Fixture
|
Fixture(t *testing.T) Fixture
|
||||||
|
|
||||||
|
@ -734,17 +647,12 @@ func (b *baseFixturePreparer) initBaseFixturePreparer(self FixturePreparer) {
|
||||||
b.self = self
|
b.self = self
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *baseFixturePreparer) Extend(preparers ...FixturePreparer) FixturePreparer {
|
|
||||||
all := dedupAndFlattenPreparers(b.self.list(), preparers)
|
|
||||||
return newFixturePreparer(all)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *baseFixturePreparer) Fixture(t *testing.T) Fixture {
|
func (b *baseFixturePreparer) Fixture(t *testing.T) Fixture {
|
||||||
return createFixture(t, t.TempDir(), b.self.list())
|
return createFixture(t, t.TempDir(), b.self.list())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *baseFixturePreparer) ExtendWithErrorHandler(errorHandler FixtureErrorHandler) FixturePreparer {
|
func (b *baseFixturePreparer) ExtendWithErrorHandler(errorHandler FixtureErrorHandler) FixturePreparer {
|
||||||
return b.self.Extend(newSimpleFixturePreparer(func(fixture *fixture) {
|
return GroupFixturePreparers(b.self, newSimpleFixturePreparer(func(fixture *fixture) {
|
||||||
fixture.errorHandler = errorHandler
|
fixture.errorHandler = errorHandler
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
@ -782,46 +690,6 @@ func (b *baseFixturePreparer) RunTestWithConfig(t *testing.T, config Config) *Te
|
||||||
return fixture.RunTest()
|
return fixture.RunTest()
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ FixtureFactory = (*fixtureFactory)(nil)
|
|
||||||
|
|
||||||
type fixtureFactory struct {
|
|
||||||
compositeFixturePreparer
|
|
||||||
|
|
||||||
buildDirSupplier *string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override to preserve the buildDirSupplier.
|
|
||||||
func (f *fixtureFactory) Extend(preparers ...FixturePreparer) FixturePreparer {
|
|
||||||
// If there is no buildDirSupplier then just use the default implementation.
|
|
||||||
if f.buildDirSupplier == nil {
|
|
||||||
return f.baseFixturePreparer.Extend(preparers...)
|
|
||||||
}
|
|
||||||
|
|
||||||
all := dedupAndFlattenPreparers(f.preparers, preparers)
|
|
||||||
|
|
||||||
// Create a new factory which uses the same buildDirSupplier as the previous one.
|
|
||||||
extendedFactory := &fixtureFactory{
|
|
||||||
buildDirSupplier: f.buildDirSupplier,
|
|
||||||
compositeFixturePreparer: compositeFixturePreparer{
|
|
||||||
preparers: all,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
extendedFactory.initBaseFixturePreparer(extendedFactory)
|
|
||||||
return extendedFactory
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *fixtureFactory) Fixture(t *testing.T) Fixture {
|
|
||||||
// If there is no buildDirSupplier then just use the default implementation.
|
|
||||||
if f.buildDirSupplier == nil {
|
|
||||||
return f.baseFixturePreparer.Fixture(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve the buildDir from the supplier.
|
|
||||||
buildDir := *f.buildDirSupplier
|
|
||||||
|
|
||||||
return createFixture(t, buildDir, f.preparers)
|
|
||||||
}
|
|
||||||
|
|
||||||
type fixture struct {
|
type fixture struct {
|
||||||
// The preparers used to create this fixture.
|
// The preparers used to create this fixture.
|
||||||
preparers []*simpleFixturePreparer
|
preparers []*simpleFixturePreparer
|
||||||
|
@ -936,10 +804,10 @@ func (r *TestResult) NormalizePathsForTesting(paths Paths) []string {
|
||||||
// that produced this result.
|
// that produced this result.
|
||||||
//
|
//
|
||||||
// e.g. assuming that this result was created by running:
|
// e.g. assuming that this result was created by running:
|
||||||
// factory.Extend(preparer1, preparer2).RunTest(t, preparer3, preparer4)
|
// GroupFixturePreparers(preparer1, preparer2, preparer3).RunTest(t)
|
||||||
//
|
//
|
||||||
// Then this method will be equivalent to running:
|
// Then this method will be equivalent to running:
|
||||||
// GroupFixturePreparers(preparer1, preparer2, preparer3, preparer4)
|
// GroupFixturePreparers(preparer1, preparer2, preparer3)
|
||||||
//
|
//
|
||||||
// This is intended for use by tests whose output is Android.bp files to verify that those files
|
// This is intended for use by tests whose output is Android.bp files to verify that those files
|
||||||
// are valid, e.g. tests of the snapshots produced by the sdk module type.
|
// are valid, e.g. tests of the snapshots produced by the sdk module type.
|
||||||
|
|
|
@ -41,7 +41,7 @@ func TestFixtureDedup(t *testing.T) {
|
||||||
|
|
||||||
group := GroupFixturePreparers(preparer1, preparer2, preparer1, preparer1Then2)
|
group := GroupFixturePreparers(preparer1, preparer2, preparer1, preparer1Then2)
|
||||||
|
|
||||||
extension := group.Extend(preparer4, preparer2)
|
extension := GroupFixturePreparers(group, preparer4, preparer2)
|
||||||
|
|
||||||
GroupFixturePreparers(extension, preparer1, preparer2, preparer2Then1, preparer3).Fixture(t)
|
GroupFixturePreparers(extension, preparer1, preparer2, preparer2Then1, preparer3).Fixture(t)
|
||||||
|
|
||||||
|
|
|
@ -670,7 +670,8 @@ func TestGenruleAllowMissingDependencies(t *testing.T) {
|
||||||
cmd: "cat $(in) > $(out)",
|
cmd: "cat $(in) > $(out)",
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
result := prepareForGenRuleTest.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
prepareForGenRuleTest,
|
||||||
android.FixtureModifyConfigAndContext(
|
android.FixtureModifyConfigAndContext(
|
||||||
func(config android.Config, ctx *android.TestContext) {
|
func(config android.Config, ctx *android.TestContext) {
|
||||||
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
|
||||||
|
|
|
@ -39,7 +39,8 @@ var hiddenApiFixtureFactory = android.GroupFixturePreparers(
|
||||||
prepareForJavaTest, PrepareForTestWithHiddenApiBuildComponents)
|
prepareForJavaTest, PrepareForTestWithHiddenApiBuildComponents)
|
||||||
|
|
||||||
func TestHiddenAPISingleton(t *testing.T) {
|
func TestHiddenAPISingleton(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
).RunTestWithBp(t, `
|
).RunTestWithBp(t, `
|
||||||
java_library {
|
java_library {
|
||||||
|
@ -56,7 +57,8 @@ func TestHiddenAPISingleton(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHiddenAPIIndexSingleton(t *testing.T) {
|
func TestHiddenAPIIndexSingleton(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
PrepareForTestWithJavaSdkLibraryFiles,
|
PrepareForTestWithJavaSdkLibraryFiles,
|
||||||
FixtureWithLastReleaseApis("bar"),
|
FixtureWithLastReleaseApis("bar"),
|
||||||
fixtureSetBootJarsProductVariable("platform:foo", "platform:bar"),
|
fixtureSetBootJarsProductVariable("platform:foo", "platform:bar"),
|
||||||
|
@ -115,7 +117,8 @@ func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T)
|
||||||
" replaced by the prebuilt module \"prebuilt_foo\" but unfortunately it does not provide a" +
|
" replaced by the prebuilt module \"prebuilt_foo\" but unfortunately it does not provide a" +
|
||||||
" suitable boot dex jar"
|
" suitable boot dex jar"
|
||||||
|
|
||||||
hiddenApiFixtureFactory.Extend(
|
android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(expectedErrorMessage)).
|
).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(expectedErrorMessage)).
|
||||||
RunTestWithBp(t, `
|
RunTestWithBp(t, `
|
||||||
|
@ -134,7 +137,8 @@ func TestHiddenAPISingletonWithSourceAndPrebuiltPreferredButNoDex(t *testing.T)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHiddenAPISingletonWithPrebuilt(t *testing.T) {
|
func TestHiddenAPISingletonWithPrebuilt(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
).RunTestWithBp(t, `
|
).RunTestWithBp(t, `
|
||||||
java_import {
|
java_import {
|
||||||
|
@ -151,7 +155,8 @@ func TestHiddenAPISingletonWithPrebuilt(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) {
|
func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
).RunTestWithBp(t, `
|
).RunTestWithBp(t, `
|
||||||
java_library {
|
java_library {
|
||||||
|
@ -178,7 +183,8 @@ func TestHiddenAPISingletonWithPrebuiltUseSource(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) {
|
func TestHiddenAPISingletonWithPrebuiltOverrideSource(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
).RunTestWithBp(t, `
|
).RunTestWithBp(t, `
|
||||||
java_library {
|
java_library {
|
||||||
|
@ -236,7 +242,8 @@ func TestHiddenAPISingletonSdks(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
tc.preparer,
|
tc.preparer,
|
||||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||||
variables.Always_use_prebuilt_sdks = proptools.BoolPtr(tc.unbundledBuild)
|
variables.Always_use_prebuilt_sdks = proptools.BoolPtr(tc.unbundledBuild)
|
||||||
|
@ -286,7 +293,8 @@ func TestHiddenAPISingletonWithPrebuiltCsvFile(t *testing.T) {
|
||||||
// Where to find the prebuilt hiddenapi files:
|
// Where to find the prebuilt hiddenapi files:
|
||||||
prebuiltHiddenApiDir := "path/to/prebuilt/hiddenapi"
|
prebuiltHiddenApiDir := "path/to/prebuilt/hiddenapi"
|
||||||
|
|
||||||
result := hiddenApiFixtureFactory.Extend(
|
result := android.GroupFixturePreparers(
|
||||||
|
hiddenApiFixtureFactory,
|
||||||
fixtureSetBootJarsProductVariable("platform:foo"),
|
fixtureSetBootJarsProductVariable("platform:foo"),
|
||||||
fixtureSetPrebuiltHiddenApiDirProductVariable(&prebuiltHiddenApiDir),
|
fixtureSetPrebuiltHiddenApiDirProductVariable(&prebuiltHiddenApiDir),
|
||||||
).RunTestWithBp(t, `
|
).RunTestWithBp(t, `
|
||||||
|
|
|
@ -402,14 +402,16 @@ func TestClasspath(t *testing.T) {
|
||||||
|
|
||||||
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
|
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 8 -target 8
|
||||||
t.Run("REL + Java language level 8", func(t *testing.T) {
|
t.Run("REL + Java language level 8", func(t *testing.T) {
|
||||||
result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
|
result := android.GroupFixturePreparers(
|
||||||
|
fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bpJava8)
|
||||||
|
|
||||||
checkClasspath(t, result, true /* isJava8 */)
|
checkClasspath(t, result, true /* isJava8 */)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
|
// Test again with PLATFORM_VERSION_CODENAME=REL, javac -source 9 -target 9
|
||||||
t.Run("REL + Java language level 9", func(t *testing.T) {
|
t.Run("REL + Java language level 9", func(t *testing.T) {
|
||||||
result := fixtureFactory.Extend(prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
|
result := android.GroupFixturePreparers(
|
||||||
|
fixtureFactory, prepareWithPlatformVersionRel).RunTestWithBp(t, bp)
|
||||||
|
|
||||||
checkClasspath(t, result, false /* isJava8 */)
|
checkClasspath(t, result, false /* isJava8 */)
|
||||||
})
|
})
|
||||||
|
|
|
@ -28,9 +28,10 @@ import (
|
||||||
// testProjectJson run the generation of rust-project.json. It returns the raw
|
// testProjectJson run the generation of rust-project.json. It returns the raw
|
||||||
// content of the generated file.
|
// content of the generated file.
|
||||||
func testProjectJson(t *testing.T, bp string) []byte {
|
func testProjectJson(t *testing.T, bp string) []byte {
|
||||||
result := prepareForRustTest.
|
result := android.GroupFixturePreparers(
|
||||||
Extend(android.FixtureMergeEnv(map[string]string{"SOONG_GEN_RUST_PROJECT": "1"})).
|
prepareForRustTest,
|
||||||
RunTestWithBp(t, bp)
|
android.FixtureMergeEnv(map[string]string{"SOONG_GEN_RUST_PROJECT": "1"}),
|
||||||
|
).RunTestWithBp(t, bp)
|
||||||
|
|
||||||
// The JSON file is generated via WriteFileToOutputDir. Therefore, it
|
// The JSON file is generated via WriteFileToOutputDir. Therefore, it
|
||||||
// won't appear in the Output of the TestingSingleton. Manually verify
|
// won't appear in the Output of the TestingSingleton. Manually verify
|
||||||
|
|
Loading…
Reference in New Issue