xref: /aosp_15_r20/build/soong/java/prebuilt_apis_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2021 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 java
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"sort"
19*333d2b36SAndroid Build Coastguard Worker	"strings"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
25*333d2b36SAndroid Build Coastguard Worker)
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Workerfunc intPtr(v int) *int {
28*333d2b36SAndroid Build Coastguard Worker	return &v
29*333d2b36SAndroid Build Coastguard Worker}
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltApis_SystemModulesCreation(t *testing.T) {
32*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
33*333d2b36SAndroid Build Coastguard Worker		prepareForJavaTest,
34*333d2b36SAndroid Build Coastguard Worker		FixtureWithPrebuiltApis(map[string][]string{
35*333d2b36SAndroid Build Coastguard Worker			"31":      {},
36*333d2b36SAndroid Build Coastguard Worker			"32":      {},
37*333d2b36SAndroid Build Coastguard Worker			"current": {},
38*333d2b36SAndroid Build Coastguard Worker		}),
39*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
40*333d2b36SAndroid Build Coastguard Worker
41*333d2b36SAndroid Build Coastguard Worker	sdkSystemModules := []string{}
42*333d2b36SAndroid Build Coastguard Worker	result.VisitAllModules(func(module blueprint.Module) {
43*333d2b36SAndroid Build Coastguard Worker		name := android.RemoveOptionalPrebuiltPrefix(module.Name())
44*333d2b36SAndroid Build Coastguard Worker		if strings.HasPrefix(name, "sdk_") && strings.HasSuffix(name, "_system_modules") {
45*333d2b36SAndroid Build Coastguard Worker			sdkSystemModules = append(sdkSystemModules, name)
46*333d2b36SAndroid Build Coastguard Worker		}
47*333d2b36SAndroid Build Coastguard Worker	})
48*333d2b36SAndroid Build Coastguard Worker	sort.Strings(sdkSystemModules)
49*333d2b36SAndroid Build Coastguard Worker	expected := []string{
50*333d2b36SAndroid Build Coastguard Worker		// 31 only has public system modules.
51*333d2b36SAndroid Build Coastguard Worker		"sdk_public_31_system_modules",
52*333d2b36SAndroid Build Coastguard Worker
53*333d2b36SAndroid Build Coastguard Worker		// 32 and current both have public and module-lib system modules.
54*333d2b36SAndroid Build Coastguard Worker		"sdk_public_32_system_modules",
55*333d2b36SAndroid Build Coastguard Worker		"sdk_module-lib_32_system_modules",
56*333d2b36SAndroid Build Coastguard Worker		"sdk_public_current_system_modules",
57*333d2b36SAndroid Build Coastguard Worker		"sdk_module-lib_current_system_modules",
58*333d2b36SAndroid Build Coastguard Worker	}
59*333d2b36SAndroid Build Coastguard Worker	sort.Strings(expected)
60*333d2b36SAndroid Build Coastguard Worker	android.AssertArrayString(t, "sdk system modules", expected, sdkSystemModules)
61*333d2b36SAndroid Build Coastguard Worker}
62*333d2b36SAndroid Build Coastguard Worker
63*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltApis_WithExtensions(t *testing.T) {
64*333d2b36SAndroid Build Coastguard Worker	runTestWithBaseExtensionLevel := func(v int) (foo_input, bar_input, baz_input string) {
65*333d2b36SAndroid Build Coastguard Worker		result := android.GroupFixturePreparers(
66*333d2b36SAndroid Build Coastguard Worker			prepareForJavaTest,
67*333d2b36SAndroid Build Coastguard Worker			android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
68*333d2b36SAndroid Build Coastguard Worker				variables.Platform_base_sdk_extension_version = intPtr(v)
69*333d2b36SAndroid Build Coastguard Worker			}),
70*333d2b36SAndroid Build Coastguard Worker			FixtureWithPrebuiltApisAndExtensions(map[string][]string{
71*333d2b36SAndroid Build Coastguard Worker				"31":      {"foo"},
72*333d2b36SAndroid Build Coastguard Worker				"32":      {"foo", "bar", "baz"},
73*333d2b36SAndroid Build Coastguard Worker				"current": {"foo", "bar"},
74*333d2b36SAndroid Build Coastguard Worker			}, map[string][]string{
75*333d2b36SAndroid Build Coastguard Worker				"1": {"foo"},
76*333d2b36SAndroid Build Coastguard Worker				"2": {"foo", "bar"},
77*333d2b36SAndroid Build Coastguard Worker			}),
78*333d2b36SAndroid Build Coastguard Worker		).RunTest(t)
79*333d2b36SAndroid Build Coastguard Worker		foo_input = result.ModuleForTests("foo.api.public.latest", "").Rule("generator").Implicits[0].String()
80*333d2b36SAndroid Build Coastguard Worker		bar_input = result.ModuleForTests("bar.api.public.latest", "").Rule("generator").Implicits[0].String()
81*333d2b36SAndroid Build Coastguard Worker		baz_input = result.ModuleForTests("baz.api.public.latest", "").Rule("generator").Implicits[0].String()
82*333d2b36SAndroid Build Coastguard Worker		return
83*333d2b36SAndroid Build Coastguard Worker	}
84*333d2b36SAndroid Build Coastguard Worker	// Extension 2 is the latest for both foo and bar, finalized after the base extension version.
85*333d2b36SAndroid Build Coastguard Worker	foo_input, bar_input, baz_input := runTestWithBaseExtensionLevel(1)
86*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input)
87*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input)
88*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input)
89*333d2b36SAndroid Build Coastguard Worker
90*333d2b36SAndroid Build Coastguard Worker	// Extension 2 is the latest for both foo and bar, finalized together with 32
91*333d2b36SAndroid Build Coastguard Worker	foo_input, bar_input, baz_input = runTestWithBaseExtensionLevel(2)
92*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input)
93*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input)
94*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input)
95*333d2b36SAndroid Build Coastguard Worker
96*333d2b36SAndroid Build Coastguard Worker	// Extension 3 is the current extension, but it has not yet been finalized.
97*333d2b36SAndroid Build Coastguard Worker	foo_input, bar_input, baz_input = runTestWithBaseExtensionLevel(3)
98*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest foo = extension level 2", "prebuilts/sdk/extensions/2/public/api/foo.txt", foo_input)
99*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest bar = extension level 2", "prebuilts/sdk/extensions/2/public/api/bar.txt", bar_input)
100*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest baz = api level 32", "prebuilts/sdk/32/public/api/baz.txt", baz_input)
101*333d2b36SAndroid Build Coastguard Worker}
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltApis_WithIncrementalApi(t *testing.T) {
104*333d2b36SAndroid Build Coastguard Worker	runTestWithIncrementalApi := func() (foo_input, bar_input, baz_input string) {
105*333d2b36SAndroid Build Coastguard Worker		result := android.GroupFixturePreparers(
106*333d2b36SAndroid Build Coastguard Worker			prepareForJavaTest,
107*333d2b36SAndroid Build Coastguard Worker			FixtureWithPrebuiltIncrementalApis(map[string][]string{
108*333d2b36SAndroid Build Coastguard Worker				"33.0":    {"foo"},
109*333d2b36SAndroid Build Coastguard Worker				"33.1":    {"foo", "bar", "baz"},
110*333d2b36SAndroid Build Coastguard Worker				"33.2":    {"foo", "bar"},
111*333d2b36SAndroid Build Coastguard Worker				"current": {"foo", "bar"},
112*333d2b36SAndroid Build Coastguard Worker			}),
113*333d2b36SAndroid Build Coastguard Worker		).RunTest(t)
114*333d2b36SAndroid Build Coastguard Worker		foo_input = result.ModuleForTests("foo.api.public.latest", "").Rule("generator").Implicits[0].String()
115*333d2b36SAndroid Build Coastguard Worker		bar_input = result.ModuleForTests("bar.api.public.latest", "").Rule("generator").Implicits[0].String()
116*333d2b36SAndroid Build Coastguard Worker		baz_input = result.ModuleForTests("baz.api.public.latest", "").Rule("generator").Implicits[0].String()
117*333d2b36SAndroid Build Coastguard Worker		return
118*333d2b36SAndroid Build Coastguard Worker	}
119*333d2b36SAndroid Build Coastguard Worker	// 33.1 is the latest for baz, 33.2 is the latest for both foo & bar
120*333d2b36SAndroid Build Coastguard Worker	foo_input, bar_input, baz_input := runTestWithIncrementalApi()
121*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest foo = api level 33.2", "prebuilts/sdk/33.2/public/api/foo.txt", foo_input)
122*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest bar = api level 33.2", "prebuilts/sdk/33.2/public/api/bar.txt", bar_input)
123*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "Expected latest baz = api level 33.1", "prebuilts/sdk/33.1/public/api/baz.txt", baz_input)
124*333d2b36SAndroid Build Coastguard Worker}
125