blob: 9d98478e20cc541463a2e2a44343dc5ba12a1caa [file] [log] [blame]
Colin Cross9aed5bc2020-12-28 15:15:34 -08001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17import (
Colin Cross9aed5bc2020-12-28 15:15:34 -080018 "testing"
19)
20
21type testSingletonModule struct {
22 SingletonModuleBase
23 ops []string
24}
25
26func (tsm *testSingletonModule) GenerateAndroidBuildActions(ctx ModuleContext) {
27 tsm.ops = append(tsm.ops, "GenerateAndroidBuildActions")
28}
29
30func (tsm *testSingletonModule) GenerateSingletonBuildActions(ctx SingletonContext) {
31 tsm.ops = append(tsm.ops, "GenerateSingletonBuildActions")
32}
33
34func (tsm *testSingletonModule) MakeVars(ctx MakeVarsContext) {
35 tsm.ops = append(tsm.ops, "MakeVars")
36}
37
38func testSingletonModuleFactory() SingletonModule {
39 tsm := &testSingletonModule{}
40 InitAndroidSingletonModule(tsm)
41 return tsm
42}
43
Paul Duffind6597002021-03-16 23:36:24 +000044var prepareForSingletonModuleTest = GroupFixturePreparers(
Colin Cross9aed5bc2020-12-28 15:15:34 -080045 // Enable Kati output to test SingletonModules with MakeVars.
Paul Duffind6597002021-03-16 23:36:24 +000046 PrepareForTestWithAndroidMk,
47 FixtureRegisterWithContext(func(ctx RegistrationContext) {
48 ctx.RegisterSingletonModuleType("test_singleton_module", testSingletonModuleFactory)
Paul Duffind6597002021-03-16 23:36:24 +000049 }),
Martin Stjernholm1ebef5b2022-02-10 23:34:28 +000050 PrepareForTestWithMakevars,
Paul Duffind6597002021-03-16 23:36:24 +000051)
Colin Cross9aed5bc2020-12-28 15:15:34 -080052
53func TestSingletonModule(t *testing.T) {
54 bp := `
55 test_singleton_module {
56 name: "test_singleton_module",
57 }
58 `
Paul Duffin30ac3e72021-03-20 00:36:14 +000059 result := GroupFixturePreparers(
60 prepareForSingletonModuleTest,
61 FixtureWithRootAndroidBp(bp),
62 ).RunTest(t)
Colin Cross9aed5bc2020-12-28 15:15:34 -080063
Paul Duffind6597002021-03-16 23:36:24 +000064 ops := result.ModuleForTests("test_singleton_module", "").Module().(*testSingletonModule).ops
Colin Cross9aed5bc2020-12-28 15:15:34 -080065 wantOps := []string{"GenerateAndroidBuildActions", "GenerateSingletonBuildActions", "MakeVars"}
Paul Duffind6597002021-03-16 23:36:24 +000066 AssertDeepEquals(t, "operations", wantOps, ops)
Colin Cross9aed5bc2020-12-28 15:15:34 -080067}
68
69func TestDuplicateSingletonModule(t *testing.T) {
70 bp := `
71 test_singleton_module {
72 name: "test_singleton_module",
73 }
74
75 test_singleton_module {
76 name: "test_singleton_module2",
77 }
78 `
Paul Duffind6597002021-03-16 23:36:24 +000079
Paul Duffin30ac3e72021-03-20 00:36:14 +000080 prepareForSingletonModuleTest.
Paul Duffind6597002021-03-16 23:36:24 +000081 ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern([]string{
82 `\QDuplicate SingletonModule "test_singleton_module", previously used in\E`,
Paul Duffin30ac3e72021-03-20 00:36:14 +000083 })).RunTestWithBp(t, bp)
Colin Cross9aed5bc2020-12-28 15:15:34 -080084}
85
86func TestUnusedSingletonModule(t *testing.T) {
Paul Duffin30ac3e72021-03-20 00:36:14 +000087 result := GroupFixturePreparers(
Paul Duffind6597002021-03-16 23:36:24 +000088 prepareForSingletonModuleTest,
Paul Duffin30ac3e72021-03-20 00:36:14 +000089 ).RunTest(t)
Colin Cross9aed5bc2020-12-28 15:15:34 -080090
Paul Duffind6597002021-03-16 23:36:24 +000091 singleton := result.SingletonForTests("test_singleton_module").Singleton()
Colin Cross9aed5bc2020-12-28 15:15:34 -080092 sm := singleton.(*singletonModuleSingletonAdaptor).sm
93 ops := sm.(*testSingletonModule).ops
94 if ops != nil {
95 t.Errorf("Expected no operations, got %q", ops)
96 }
97}
98
99func testVariantSingletonModuleMutator(ctx BottomUpMutatorContext) {
100 if _, ok := ctx.Module().(*testSingletonModule); ok {
101 ctx.CreateVariations("a", "b")
102 }
103}
104
105func TestVariantSingletonModule(t *testing.T) {
106 bp := `
107 test_singleton_module {
108 name: "test_singleton_module",
109 }
110 `
111
Paul Duffin30ac3e72021-03-20 00:36:14 +0000112 GroupFixturePreparers(
113 prepareForSingletonModuleTest,
114 FixtureRegisterWithContext(func(ctx RegistrationContext) {
115 ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
116 ctx.BottomUp("test_singleton_module_mutator", testVariantSingletonModuleMutator)
117 })
118 }),
119 ).
Paul Duffind6597002021-03-16 23:36:24 +0000120 ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern([]string{
121 `\QGenerateAndroidBuildActions already called for variant\E`,
122 })).
Paul Duffin30ac3e72021-03-20 00:36:14 +0000123 RunTestWithBp(t, bp)
Colin Cross9aed5bc2020-12-28 15:15:34 -0800124}