1package testing
2
3import (
4	"android/soong/android"
5)
6
7const ownershipDirectory = "ownership"
8const fileContainingFilePaths = "all_test_spec_paths.rsp"
9const allTestSpecsFile = "all_test_specs.pb"
10
11func AllTestSpecsFactory() android.Singleton {
12	return &allTestSpecsSingleton{}
13}
14
15type allTestSpecsSingleton struct {
16	// Path where the collected metadata is stored after successful validation.
17	outputPath android.OutputPath
18}
19
20func (this *allTestSpecsSingleton) GenerateBuildActions(ctx android.SingletonContext) {
21	var intermediateMetadataPaths android.Paths
22
23	ctx.VisitAllModules(func(module android.Module) {
24		if metadata, ok := android.SingletonModuleProvider(ctx, module, TestSpecProviderKey); ok {
25			intermediateMetadataPaths = append(intermediateMetadataPaths, metadata.IntermediatePath)
26		}
27	})
28
29	rspFile := android.PathForOutput(ctx, fileContainingFilePaths)
30	this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allTestSpecsFile)
31
32	rule := android.NewRuleBuilder(pctx, ctx)
33	cmd := rule.Command().
34		BuiltTool("metadata").
35		FlagWithArg("-rule ", "test_spec").
36		FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths)
37	cmd.FlagWithOutput("-outputFile ", this.outputPath)
38	rule.Build("all_test_specs_rule", "Generate all test specifications")
39	ctx.Phony("all_test_specs", this.outputPath)
40}
41
42func (this *allTestSpecsSingleton) MakeVars(ctx android.MakeVarsContext) {
43	ctx.DistForGoal("test_specs", this.outputPath)
44}
45