package android import ( "regexp" "testing" ) func TestDistFilesInGenerateAndroidBuildActions(t *testing.T) { result := GroupFixturePreparers( FixtureRegisterWithContext(func(ctx RegistrationContext) { ctx.RegisterModuleType("my_module_type", newDistFileModule) ctx.RegisterParallelSingletonType("my_singleton", newDistFileSingleton) ctx.RegisterParallelSingletonModuleType("my_singleton_module", newDistFileSingletonModule) }), FixtureModifyConfig(SetKatiEnabledForTests), PrepareForTestWithMakevars, ).RunTestWithBp(t, ` my_module_type { name: "foo", } my_singleton_module { name: "bar" } `) lateContents := string(result.SingletonForTests(t, "makevars").Singleton().(*makeVarsSingleton).lateForTesting) matched, err := regexp.MatchString(`call dist-for-goals,my_goal,.*/my_file.txt:my_file.txt\)`, lateContents) if err != nil || !matched { t.Fatalf("Expected a dist of my_file.txt, but got: %s", lateContents) } matched, err = regexp.MatchString(`call dist-for-goals,my_singleton_goal,.*/my_singleton_file.txt:my_singleton_file.txt\)`, lateContents) if err != nil || !matched { t.Fatalf("Expected a dist of my_singleton_file.txt, but got: %s", lateContents) } matched, err = regexp.MatchString(`call dist-for-goals,my_singleton_module_module_goal,.*/my_singleton_module_module_file.txt:my_singleton_module_module_file.txt\)`, lateContents) if err != nil || !matched { t.Fatalf("Expected a dist of my_singleton_module_module_file.txt, but got: %s", lateContents) } matched, err = regexp.MatchString(`call dist-for-goals,my_singleton_module_singleton_goal,.*/my_singleton_module_singleton_file.txt:my_singleton_module_singleton_file.txt\)`, lateContents) if err != nil || !matched { t.Fatalf("Expected a dist of my_singleton_module_singleton_file.txt, but got: %s", lateContents) } } type distFileModule struct { ModuleBase } func newDistFileModule() Module { m := &distFileModule{} InitAndroidModule(m) return m } func (m *distFileModule) GenerateAndroidBuildActions(ctx ModuleContext) { out := PathForModuleOut(ctx, "my_file.txt") WriteFileRule(ctx, out, "Hello, world!") ctx.DistForGoal("my_goal", out) } type distFileSingleton struct { } func newDistFileSingleton() Singleton { return &distFileSingleton{} } func (d *distFileSingleton) GenerateBuildActions(ctx SingletonContext) { out := PathForOutput(ctx, "my_singleton_file.txt") WriteFileRule(ctx, out, "Hello, world!") ctx.DistForGoal("my_singleton_goal", out) } type distFileSingletonModule struct { SingletonModuleBase } func newDistFileSingletonModule() SingletonModule { sm := &distFileSingletonModule{} InitAndroidSingletonModule(sm) return sm } // GenerateAndroidBuildActions implements SingletonModule. func (d *distFileSingletonModule) GenerateAndroidBuildActions(ctx ModuleContext) { out := PathForModuleOut(ctx, "my_singleton_module_module_file.txt") WriteFileRule(ctx, out, "Hello, world!") ctx.DistForGoal("my_singleton_module_module_goal", out) } // GenerateSingletonBuildActions implements SingletonModule. func (d *distFileSingletonModule) GenerateSingletonBuildActions(ctx SingletonContext) { out := PathForOutput(ctx, "my_singleton_module_singleton_file.txt") WriteFileRule(ctx, out, "Hello, world!") ctx.DistForGoal("my_singleton_module_singleton_goal", out) }