xref: /aosp_15_r20/build/soong/java/jdeps_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2018 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	"reflect"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
22*333d2b36SAndroid Build Coastguard Worker)
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddLibsDeps(t *testing.T) {
25*333d2b36SAndroid Build Coastguard Worker	ctx, _ := testJava(t,
26*333d2b36SAndroid Build Coastguard Worker		`
27*333d2b36SAndroid Build Coastguard Worker		java_library {name: "Foo"}
28*333d2b36SAndroid Build Coastguard Worker		java_library {name: "Bar"}
29*333d2b36SAndroid Build Coastguard Worker		java_library {
30*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
31*333d2b36SAndroid Build Coastguard Worker			libs: ["Foo", "Bar"],
32*333d2b36SAndroid Build Coastguard Worker		}
33*333d2b36SAndroid Build Coastguard Worker	`)
34*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
35*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Worker	for _, expected := range []string{"Foo", "Bar"} {
38*333d2b36SAndroid Build Coastguard Worker		if !android.InList(expected, dpInfo.Deps) {
39*333d2b36SAndroid Build Coastguard Worker			t.Errorf("Library.IDEInfo() Deps = %v, %v not found", dpInfo.Deps, expected)
40*333d2b36SAndroid Build Coastguard Worker		}
41*333d2b36SAndroid Build Coastguard Worker	}
42*333d2b36SAndroid Build Coastguard Worker}
43*333d2b36SAndroid Build Coastguard Worker
44*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddStaticLibsDeps(t *testing.T) {
45*333d2b36SAndroid Build Coastguard Worker	ctx, _ := testJava(t,
46*333d2b36SAndroid Build Coastguard Worker		`
47*333d2b36SAndroid Build Coastguard Worker		java_library {name: "Foo"}
48*333d2b36SAndroid Build Coastguard Worker		java_library {name: "Bar"}
49*333d2b36SAndroid Build Coastguard Worker		java_library {
50*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
51*333d2b36SAndroid Build Coastguard Worker			static_libs: ["Foo", "Bar"],
52*333d2b36SAndroid Build Coastguard Worker		}
53*333d2b36SAndroid Build Coastguard Worker	`)
54*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
55*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Worker	for _, expected := range []string{"Foo", "Bar"} {
58*333d2b36SAndroid Build Coastguard Worker		if !android.InList(expected, dpInfo.Deps) {
59*333d2b36SAndroid Build Coastguard Worker			t.Errorf("Library.IDEInfo() Deps = %v, %v not found", dpInfo.Deps, expected)
60*333d2b36SAndroid Build Coastguard Worker		}
61*333d2b36SAndroid Build Coastguard Worker	}
62*333d2b36SAndroid Build Coastguard Worker}
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddScrs(t *testing.T) {
65*333d2b36SAndroid Build Coastguard Worker	ctx, _ := testJava(t,
66*333d2b36SAndroid Build Coastguard Worker		`
67*333d2b36SAndroid Build Coastguard Worker		java_library {
68*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
69*333d2b36SAndroid Build Coastguard Worker			srcs: ["Foo.java", "Bar.java"],
70*333d2b36SAndroid Build Coastguard Worker		}
71*333d2b36SAndroid Build Coastguard Worker	`)
72*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
73*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
74*333d2b36SAndroid Build Coastguard Worker
75*333d2b36SAndroid Build Coastguard Worker	expected := []string{"Foo.java", "Bar.java"}
76*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(dpInfo.Srcs, expected) {
77*333d2b36SAndroid Build Coastguard Worker		t.Errorf("Library.IDEInfo() Srcs = %v, want %v", dpInfo.Srcs, expected)
78*333d2b36SAndroid Build Coastguard Worker	}
79*333d2b36SAndroid Build Coastguard Worker}
80*333d2b36SAndroid Build Coastguard Worker
81*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryPropertiesAddAidlIncludeDirs(t *testing.T) {
82*333d2b36SAndroid Build Coastguard Worker	ctx, _ := testJava(t,
83*333d2b36SAndroid Build Coastguard Worker		`
84*333d2b36SAndroid Build Coastguard Worker		java_library {
85*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
86*333d2b36SAndroid Build Coastguard Worker			aidl: {
87*333d2b36SAndroid Build Coastguard Worker				include_dirs: ["Foo", "Bar"],
88*333d2b36SAndroid Build Coastguard Worker			},
89*333d2b36SAndroid Build Coastguard Worker		}
90*333d2b36SAndroid Build Coastguard Worker	`)
91*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
92*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Worker	expected := []string{"Foo", "Bar"}
95*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(dpInfo.Aidl_include_dirs, expected) {
96*333d2b36SAndroid Build Coastguard Worker		t.Errorf("Library.IDEInfo() Aidl_include_dirs = %v, want %v", dpInfo.Aidl_include_dirs, expected)
97*333d2b36SAndroid Build Coastguard Worker	}
98*333d2b36SAndroid Build Coastguard Worker}
99*333d2b36SAndroid Build Coastguard Worker
100*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryWithJarJarRules(t *testing.T) {
101*333d2b36SAndroid Build Coastguard Worker	ctx, _ := testJava(t,
102*333d2b36SAndroid Build Coastguard Worker		`
103*333d2b36SAndroid Build Coastguard Worker		java_library {
104*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
105*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.java"],
106*333d2b36SAndroid Build Coastguard Worker			jarjar_rules: "jarjar_rules.txt",
107*333d2b36SAndroid Build Coastguard Worker		}
108*333d2b36SAndroid Build Coastguard Worker	`)
109*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
110*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
111*333d2b36SAndroid Build Coastguard Worker
112*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "IdeInfo.Srcs of repackaged library should not be empty", "foo.java", dpInfo.Srcs[0])
113*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "IdeInfo.Jar_rules of repackaged library should not be empty", "jarjar_rules.txt", dpInfo.Jarjar_rules[0])
114*333d2b36SAndroid Build Coastguard Worker	if !android.SubstringInList(dpInfo.Jars, "soong/.intermediates/javalib/android_common/jarjar/turbine/javalib.jar") {
115*333d2b36SAndroid Build Coastguard Worker		t.Errorf("IdeInfo.Jars of repackaged library should contain the output of jarjar-ing. All outputs: %v\n", dpInfo.Jars)
116*333d2b36SAndroid Build Coastguard Worker	}
117*333d2b36SAndroid Build Coastguard Worker}
118*333d2b36SAndroid Build Coastguard Worker
119*333d2b36SAndroid Build Coastguard Workerfunc TestCollectJavaLibraryLinkingAgainstVersionedSdk(t *testing.T) {
120*333d2b36SAndroid Build Coastguard Worker	ctx := android.GroupFixturePreparers(
121*333d2b36SAndroid Build Coastguard Worker		prepareForJavaTest,
122*333d2b36SAndroid Build Coastguard Worker		FixtureWithPrebuiltApis(map[string][]string{
123*333d2b36SAndroid Build Coastguard Worker			"29": {},
124*333d2b36SAndroid Build Coastguard Worker		})).RunTestWithBp(t,
125*333d2b36SAndroid Build Coastguard Worker		`
126*333d2b36SAndroid Build Coastguard Worker		java_library {
127*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
128*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.java"],
129*333d2b36SAndroid Build Coastguard Worker			sdk_version: "29",
130*333d2b36SAndroid Build Coastguard Worker		}
131*333d2b36SAndroid Build Coastguard Worker	`)
132*333d2b36SAndroid Build Coastguard Worker	module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
133*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey)
134*333d2b36SAndroid Build Coastguard Worker
135*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListContains(t, "IdeInfo.Deps should contain versioned sdk module", dpInfo.Deps, "sdk_public_29_android")
136*333d2b36SAndroid Build Coastguard Worker}
137*333d2b36SAndroid Build Coastguard Worker
138*333d2b36SAndroid Build Coastguard Workerfunc TestDoNotAddNoneSystemModulesToDeps(t *testing.T) {
139*333d2b36SAndroid Build Coastguard Worker	ctx := android.GroupFixturePreparers(
140*333d2b36SAndroid Build Coastguard Worker		prepareForJavaTest,
141*333d2b36SAndroid Build Coastguard Worker		android.FixtureMergeEnv(
142*333d2b36SAndroid Build Coastguard Worker			map[string]string{
143*333d2b36SAndroid Build Coastguard Worker				"DISABLE_STUB_VALIDATION": "true",
144*333d2b36SAndroid Build Coastguard Worker			},
145*333d2b36SAndroid Build Coastguard Worker		),
146*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t,
147*333d2b36SAndroid Build Coastguard Worker		`
148*333d2b36SAndroid Build Coastguard Worker		java_library {
149*333d2b36SAndroid Build Coastguard Worker			name: "javalib",
150*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.java"],
151*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
152*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
153*333d2b36SAndroid Build Coastguard Worker		}
154*333d2b36SAndroid Build Coastguard Worker
155*333d2b36SAndroid Build Coastguard Worker		java_api_library {
156*333d2b36SAndroid Build Coastguard Worker			name: "javalib.stubs",
157*333d2b36SAndroid Build Coastguard Worker			stubs_type: "everything",
158*333d2b36SAndroid Build Coastguard Worker			api_contributions: ["javalib-current.txt"],
159*333d2b36SAndroid Build Coastguard Worker			api_surface: "public",
160*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
161*333d2b36SAndroid Build Coastguard Worker		}
162*333d2b36SAndroid Build Coastguard Worker		java_api_contribution {
163*333d2b36SAndroid Build Coastguard Worker			name: "javalib-current.txt",
164*333d2b36SAndroid Build Coastguard Worker			api_file: "javalib-current.txt",
165*333d2b36SAndroid Build Coastguard Worker			api_surface: "public",
166*333d2b36SAndroid Build Coastguard Worker		}
167*333d2b36SAndroid Build Coastguard Worker	`)
168*333d2b36SAndroid Build Coastguard Worker	javalib := ctx.ModuleForTests("javalib", "android_common").Module().(*Library)
169*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ := android.OtherModuleProvider(ctx, javalib, android.IdeInfoProviderKey)
170*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListDoesNotContain(t, "IdeInfo.Deps should contain not contain `none`", dpInfo.Deps, "none")
171*333d2b36SAndroid Build Coastguard Worker
172*333d2b36SAndroid Build Coastguard Worker	javalib_stubs := ctx.ModuleForTests("javalib.stubs", "android_common").Module().(*ApiLibrary)
173*333d2b36SAndroid Build Coastguard Worker	dpInfo, _ = android.OtherModuleProvider(ctx, javalib_stubs, android.IdeInfoProviderKey)
174*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListDoesNotContain(t, "IdeInfo.Deps should contain not contain `none`", dpInfo.Deps, "none")
175*333d2b36SAndroid Build Coastguard Worker}
176