blob: 41dd4bb4877371cd76bde656c27ebbf2a9a863c1 [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)
49 ctx.RegisterSingletonType("makevars", makeVarsSingletonFunc)
50 }),
51)
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 Duffind6597002021-03-16 23:36:24 +000059 result := emptyTestFixtureFactory.
60 RunTest(t,
61 prepareForSingletonModuleTest,
62 FixtureWithRootAndroidBp(bp),
63 )
Colin Cross9aed5bc2020-12-28 15:15:34 -080064
Paul Duffind6597002021-03-16 23:36:24 +000065 ops := result.ModuleForTests("test_singleton_module", "").Module().(*testSingletonModule).ops
Colin Cross9aed5bc2020-12-28 15:15:34 -080066 wantOps := []string{"GenerateAndroidBuildActions", "GenerateSingletonBuildActions", "MakeVars"}
Paul Duffind6597002021-03-16 23:36:24 +000067 AssertDeepEquals(t, "operations", wantOps, ops)
Colin Cross9aed5bc2020-12-28 15:15:34 -080068}
69
70func TestDuplicateSingletonModule(t *testing.T) {
71 bp := `
72 test_singleton_module {
73 name: "test_singleton_module",
74 }
75
76 test_singleton_module {
77 name: "test_singleton_module2",
78 }
79 `
Paul Duffind6597002021-03-16 23:36:24 +000080
81 emptyTestFixtureFactory.
82 ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern([]string{
83 `\QDuplicate SingletonModule "test_singleton_module", previously used in\E`,
84 })).RunTest(t,
85 prepareForSingletonModuleTest,
86 FixtureWithRootAndroidBp(bp),
87 )
Colin Cross9aed5bc2020-12-28 15:15:34 -080088}
89
90func TestUnusedSingletonModule(t *testing.T) {
Paul Duffind6597002021-03-16 23:36:24 +000091 result := emptyTestFixtureFactory.RunTest(t,
92 prepareForSingletonModuleTest,
93 )
Colin Cross9aed5bc2020-12-28 15:15:34 -080094
Paul Duffind6597002021-03-16 23:36:24 +000095 singleton := result.SingletonForTests("test_singleton_module").Singleton()
Colin Cross9aed5bc2020-12-28 15:15:34 -080096 sm := singleton.(*singletonModuleSingletonAdaptor).sm
97 ops := sm.(*testSingletonModule).ops
98 if ops != nil {
99 t.Errorf("Expected no operations, got %q", ops)
100 }
101}
102
103func testVariantSingletonModuleMutator(ctx BottomUpMutatorContext) {
104 if _, ok := ctx.Module().(*testSingletonModule); ok {
105 ctx.CreateVariations("a", "b")
106 }
107}
108
109func TestVariantSingletonModule(t *testing.T) {
110 bp := `
111 test_singleton_module {
112 name: "test_singleton_module",
113 }
114 `
115
Paul Duffind6597002021-03-16 23:36:24 +0000116 emptyTestFixtureFactory.
117 ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern([]string{
118 `\QGenerateAndroidBuildActions already called for variant\E`,
119 })).
120 RunTest(t,
121 prepareForSingletonModuleTest,
122 FixtureRegisterWithContext(func(ctx RegistrationContext) {
123 ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) {
124 ctx.BottomUp("test_singleton_module_mutator", testVariantSingletonModuleMutator)
125 })
126 }),
127 FixtureWithRootAndroidBp(bp),
128 )
Colin Cross9aed5bc2020-12-28 15:15:34 -0800129}