xref: /aosp_15_r20/build/soong/android/test_suites_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage android
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker)
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Workerfunc TestBuildTestList(t *testing.T) {
23*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
24*333d2b36SAndroid Build Coastguard Worker	ctx := GroupFixturePreparers(
25*333d2b36SAndroid Build Coastguard Worker		prepareForFakeTestSuite,
26*333d2b36SAndroid Build Coastguard Worker		FixtureRegisterWithContext(func(ctx RegistrationContext) {
27*333d2b36SAndroid Build Coastguard Worker			ctx.RegisterParallelSingletonType("testsuites", testSuiteFilesFactory)
28*333d2b36SAndroid Build Coastguard Worker		}),
29*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
30*333d2b36SAndroid Build Coastguard Worker		fake_module {
31*333d2b36SAndroid Build Coastguard Worker			name: "module1",
32*333d2b36SAndroid Build Coastguard Worker			outputs: [
33*333d2b36SAndroid Build Coastguard Worker				"Test1/Test1.config",
34*333d2b36SAndroid Build Coastguard Worker				"Test1/Test1.apk",
35*333d2b36SAndroid Build Coastguard Worker			],
36*333d2b36SAndroid Build Coastguard Worker			test_suites: ["ravenwood-tests"],
37*333d2b36SAndroid Build Coastguard Worker		}
38*333d2b36SAndroid Build Coastguard Worker		fake_module {
39*333d2b36SAndroid Build Coastguard Worker			name: "module2",
40*333d2b36SAndroid Build Coastguard Worker			outputs: [
41*333d2b36SAndroid Build Coastguard Worker				"Test2/Test21/Test21.config",
42*333d2b36SAndroid Build Coastguard Worker				"Test2/Test21/Test21.apk",
43*333d2b36SAndroid Build Coastguard Worker			],
44*333d2b36SAndroid Build Coastguard Worker			test_suites: ["ravenwood-tests", "robolectric-tests"],
45*333d2b36SAndroid Build Coastguard Worker		}
46*333d2b36SAndroid Build Coastguard Worker		fake_module {
47*333d2b36SAndroid Build Coastguard Worker			name: "module_without_config",
48*333d2b36SAndroid Build Coastguard Worker			outputs: [
49*333d2b36SAndroid Build Coastguard Worker				"BadTest/BadTest.jar",
50*333d2b36SAndroid Build Coastguard Worker			],
51*333d2b36SAndroid Build Coastguard Worker			test_suites: ["robolectric-tests"],
52*333d2b36SAndroid Build Coastguard Worker		}
53*333d2b36SAndroid Build Coastguard Worker	`)
54*333d2b36SAndroid Build Coastguard Worker
55*333d2b36SAndroid Build Coastguard Worker	config := ctx.SingletonForTests("testsuites")
56*333d2b36SAndroid Build Coastguard Worker	allOutputs := config.AllOutputs()
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Worker	wantContents := map[string]string{
59*333d2b36SAndroid Build Coastguard Worker		"robolectric-tests.zip":      "",
60*333d2b36SAndroid Build Coastguard Worker		"robolectric-tests_list.zip": "",
61*333d2b36SAndroid Build Coastguard Worker		"robolectric-tests_list": `host/testcases/Test2/Test21/Test21.config
62*333d2b36SAndroid Build Coastguard Worker`,
63*333d2b36SAndroid Build Coastguard Worker		"ravenwood-tests.zip":      "",
64*333d2b36SAndroid Build Coastguard Worker		"ravenwood-tests_list.zip": "",
65*333d2b36SAndroid Build Coastguard Worker		"ravenwood-tests_list": `host/testcases/Test1/Test1.config
66*333d2b36SAndroid Build Coastguard Workerhost/testcases/Test2/Test21/Test21.config
67*333d2b36SAndroid Build Coastguard Worker`,
68*333d2b36SAndroid Build Coastguard Worker	}
69*333d2b36SAndroid Build Coastguard Worker	for _, output := range allOutputs {
70*333d2b36SAndroid Build Coastguard Worker		want, ok := wantContents[filepath.Base(output)]
71*333d2b36SAndroid Build Coastguard Worker		if !ok {
72*333d2b36SAndroid Build Coastguard Worker			t.Errorf("unexpected output: %q", output)
73*333d2b36SAndroid Build Coastguard Worker			continue
74*333d2b36SAndroid Build Coastguard Worker		}
75*333d2b36SAndroid Build Coastguard Worker
76*333d2b36SAndroid Build Coastguard Worker		got := ""
77*333d2b36SAndroid Build Coastguard Worker		if want != "" {
78*333d2b36SAndroid Build Coastguard Worker			got = ContentFromFileRuleForTests(t, ctx.TestContext, config.MaybeOutput(output))
79*333d2b36SAndroid Build Coastguard Worker		}
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Worker		if want != got {
82*333d2b36SAndroid Build Coastguard Worker			t.Errorf("want %q, got %q", want, got)
83*333d2b36SAndroid Build Coastguard Worker		}
84*333d2b36SAndroid Build Coastguard Worker	}
85*333d2b36SAndroid Build Coastguard Worker}
86*333d2b36SAndroid Build Coastguard Worker
87*333d2b36SAndroid Build Coastguard Workertype fake_module struct {
88*333d2b36SAndroid Build Coastguard Worker	ModuleBase
89*333d2b36SAndroid Build Coastguard Worker	props struct {
90*333d2b36SAndroid Build Coastguard Worker		Outputs     []string
91*333d2b36SAndroid Build Coastguard Worker		Test_suites []string
92*333d2b36SAndroid Build Coastguard Worker	}
93*333d2b36SAndroid Build Coastguard Worker}
94*333d2b36SAndroid Build Coastguard Worker
95*333d2b36SAndroid Build Coastguard Workerfunc fakeTestSuiteFactory() Module {
96*333d2b36SAndroid Build Coastguard Worker	module := &fake_module{}
97*333d2b36SAndroid Build Coastguard Worker	base := module.base()
98*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(&base.nameProperties, &module.props)
99*333d2b36SAndroid Build Coastguard Worker	InitAndroidModule(module)
100*333d2b36SAndroid Build Coastguard Worker	return module
101*333d2b36SAndroid Build Coastguard Worker}
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Workervar prepareForFakeTestSuite = GroupFixturePreparers(
104*333d2b36SAndroid Build Coastguard Worker	FixtureRegisterWithContext(func(ctx RegistrationContext) {
105*333d2b36SAndroid Build Coastguard Worker		ctx.RegisterModuleType("fake_module", fakeTestSuiteFactory)
106*333d2b36SAndroid Build Coastguard Worker	}),
107*333d2b36SAndroid Build Coastguard Worker)
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Workerfunc (f *fake_module) GenerateAndroidBuildActions(ctx ModuleContext) {
110*333d2b36SAndroid Build Coastguard Worker	for _, output := range f.props.Outputs {
111*333d2b36SAndroid Build Coastguard Worker		ctx.InstallFile(pathForTestCases(ctx), output, nil)
112*333d2b36SAndroid Build Coastguard Worker	}
113*333d2b36SAndroid Build Coastguard Worker}
114*333d2b36SAndroid Build Coastguard Worker
115*333d2b36SAndroid Build Coastguard Workerfunc (f *fake_module) TestSuites() []string {
116*333d2b36SAndroid Build Coastguard Worker	return f.props.Test_suites
117*333d2b36SAndroid Build Coastguard Worker}
118