xref: /aosp_15_r20/build/soong/sdk/sdk_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2019 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 sdk
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"log"
19*333d2b36SAndroid Build Coastguard Worker	"os"
20*333d2b36SAndroid Build Coastguard Worker	"runtime"
21*333d2b36SAndroid Build Coastguard Worker	"testing"
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/java"
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
27*333d2b36SAndroid Build Coastguard Worker)
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Worker// Needed in an _test.go file in this package to ensure tests run correctly, particularly in IDE.
30*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) {
31*333d2b36SAndroid Build Coastguard Worker	if runtime.GOOS != "linux" {
32*333d2b36SAndroid Build Coastguard Worker		// b/145598135 - Generating host snapshots for anything other than linux is not supported.
33*333d2b36SAndroid Build Coastguard Worker		log.Printf("Skipping as sdk snapshot generation is only supported on linux not %s", runtime.GOOS)
34*333d2b36SAndroid Build Coastguard Worker		os.Exit(0)
35*333d2b36SAndroid Build Coastguard Worker	}
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Worker	os.Exit(m.Run())
38*333d2b36SAndroid Build Coastguard Worker}
39*333d2b36SAndroid Build Coastguard Worker
40*333d2b36SAndroid Build Coastguard Worker// Ensure that prebuilt modules have the same effective visibility as the source
41*333d2b36SAndroid Build Coastguard Worker// modules.
42*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshotVisibility(t *testing.T) {
43*333d2b36SAndroid Build Coastguard Worker	packageBp := `
44*333d2b36SAndroid Build Coastguard Worker		package {
45*333d2b36SAndroid Build Coastguard Worker			default_visibility: ["//other/foo"],
46*333d2b36SAndroid Build Coastguard Worker		}
47*333d2b36SAndroid Build Coastguard Worker
48*333d2b36SAndroid Build Coastguard Worker		sdk {
49*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
50*333d2b36SAndroid Build Coastguard Worker			visibility: [
51*333d2b36SAndroid Build Coastguard Worker				"//other/foo",
52*333d2b36SAndroid Build Coastguard Worker				// This short form will be replaced with //package:__subpackages__ in the
53*333d2b36SAndroid Build Coastguard Worker				// generated sdk_snapshot.
54*333d2b36SAndroid Build Coastguard Worker				":__subpackages__",
55*333d2b36SAndroid Build Coastguard Worker			],
56*333d2b36SAndroid Build Coastguard Worker			java_header_libs: [
57*333d2b36SAndroid Build Coastguard Worker				"myjavalib",
58*333d2b36SAndroid Build Coastguard Worker				"mypublicjavalib",
59*333d2b36SAndroid Build Coastguard Worker				"mydefaultedjavalib",
60*333d2b36SAndroid Build Coastguard Worker				"myprivatejavalib",
61*333d2b36SAndroid Build Coastguard Worker			],
62*333d2b36SAndroid Build Coastguard Worker		}
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker		java_library {
65*333d2b36SAndroid Build Coastguard Worker			name: "myjavalib",
66*333d2b36SAndroid Build Coastguard Worker			// Uses package default visibility
67*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
68*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
69*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
70*333d2b36SAndroid Build Coastguard Worker		}
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Worker		java_defaults {
73*333d2b36SAndroid Build Coastguard Worker			name: "java-defaults",
74*333d2b36SAndroid Build Coastguard Worker			visibility: ["//other/bar"],
75*333d2b36SAndroid Build Coastguard Worker		}
76*333d2b36SAndroid Build Coastguard Worker
77*333d2b36SAndroid Build Coastguard Worker		java_library {
78*333d2b36SAndroid Build Coastguard Worker			name: "mypublicjavalib",
79*333d2b36SAndroid Build Coastguard Worker			defaults: ["java-defaults"],
80*333d2b36SAndroid Build Coastguard Worker      visibility: ["//visibility:public"],
81*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
82*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
83*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
84*333d2b36SAndroid Build Coastguard Worker		}
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker		java_defaults {
87*333d2b36SAndroid Build Coastguard Worker			name: "myjavadefaults",
88*333d2b36SAndroid Build Coastguard Worker			visibility: ["//other/bar"],
89*333d2b36SAndroid Build Coastguard Worker		}
90*333d2b36SAndroid Build Coastguard Worker
91*333d2b36SAndroid Build Coastguard Worker		java_library {
92*333d2b36SAndroid Build Coastguard Worker			name: "mydefaultedjavalib",
93*333d2b36SAndroid Build Coastguard Worker			defaults: ["myjavadefaults"],
94*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
95*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
96*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
97*333d2b36SAndroid Build Coastguard Worker		}
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker		java_library {
100*333d2b36SAndroid Build Coastguard Worker			name: "myprivatejavalib",
101*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
102*333d2b36SAndroid Build Coastguard Worker			visibility: ["//visibility:private"],
103*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
104*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
105*333d2b36SAndroid Build Coastguard Worker		}
106*333d2b36SAndroid Build Coastguard Worker	`
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithFs(t, ``,
109*333d2b36SAndroid Build Coastguard Worker		map[string][]byte{
110*333d2b36SAndroid Build Coastguard Worker			"package/Test.java":  nil,
111*333d2b36SAndroid Build Coastguard Worker			"package/Android.bp": []byte(packageBp),
112*333d2b36SAndroid Build Coastguard Worker		})
113*333d2b36SAndroid Build Coastguard Worker
114*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "package",
115*333d2b36SAndroid Build Coastguard Worker		checkAndroidBpContents(`
116*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
117*333d2b36SAndroid Build Coastguard Worker
118*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
119*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
120*333d2b36SAndroid Build Coastguard Worker    contents: [
121*333d2b36SAndroid Build Coastguard Worker        "prebuilt_myjavalib",
122*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mypublicjavalib",
123*333d2b36SAndroid Build Coastguard Worker        "prebuilt_mydefaultedjavalib",
124*333d2b36SAndroid Build Coastguard Worker        "prebuilt_myprivatejavalib",
125*333d2b36SAndroid Build Coastguard Worker    ],
126*333d2b36SAndroid Build Coastguard Worker}
127*333d2b36SAndroid Build Coastguard Worker
128*333d2b36SAndroid Build Coastguard Workerjava_import {
129*333d2b36SAndroid Build Coastguard Worker    name: "myjavalib",
130*333d2b36SAndroid Build Coastguard Worker    prefer: false,
131*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
132*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
133*333d2b36SAndroid Build Coastguard Worker    jars: ["java/myjavalib.jar"],
134*333d2b36SAndroid Build Coastguard Worker}
135*333d2b36SAndroid Build Coastguard Worker
136*333d2b36SAndroid Build Coastguard Workerjava_import {
137*333d2b36SAndroid Build Coastguard Worker    name: "mypublicjavalib",
138*333d2b36SAndroid Build Coastguard Worker    prefer: false,
139*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
140*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
141*333d2b36SAndroid Build Coastguard Worker    jars: ["java/mypublicjavalib.jar"],
142*333d2b36SAndroid Build Coastguard Worker}
143*333d2b36SAndroid Build Coastguard Worker
144*333d2b36SAndroid Build Coastguard Workerjava_import {
145*333d2b36SAndroid Build Coastguard Worker    name: "mydefaultedjavalib",
146*333d2b36SAndroid Build Coastguard Worker    prefer: false,
147*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
148*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
149*333d2b36SAndroid Build Coastguard Worker    jars: ["java/mydefaultedjavalib.jar"],
150*333d2b36SAndroid Build Coastguard Worker}
151*333d2b36SAndroid Build Coastguard Worker
152*333d2b36SAndroid Build Coastguard Workerjava_import {
153*333d2b36SAndroid Build Coastguard Worker    name: "myprivatejavalib",
154*333d2b36SAndroid Build Coastguard Worker    prefer: false,
155*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
156*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
157*333d2b36SAndroid Build Coastguard Worker    jars: ["java/myprivatejavalib.jar"],
158*333d2b36SAndroid Build Coastguard Worker}
159*333d2b36SAndroid Build Coastguard Worker`))
160*333d2b36SAndroid Build Coastguard Worker}
161*333d2b36SAndroid Build Coastguard Worker
162*333d2b36SAndroid Build Coastguard Workerfunc TestSdkInstall(t *testing.T) {
163*333d2b36SAndroid Build Coastguard Worker	sdk := `
164*333d2b36SAndroid Build Coastguard Worker		sdk {
165*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
166*333d2b36SAndroid Build Coastguard Worker		}
167*333d2b36SAndroid Build Coastguard Worker	`
168*333d2b36SAndroid Build Coastguard Worker	result := testSdkWithFs(t, sdk, nil)
169*333d2b36SAndroid Build Coastguard Worker
170*333d2b36SAndroid Build Coastguard Worker	CheckSnapshot(t, result, "mysdk", "",
171*333d2b36SAndroid Build Coastguard Worker		checkAllOtherCopyRules(`
172*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/mysdk-current.info -> mysdk-current.info
173*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdk/common_os/mysdk-current.zip -> mysdk-current.zip
174*333d2b36SAndroid Build Coastguard Worker`))
175*333d2b36SAndroid Build Coastguard Worker}
176*333d2b36SAndroid Build Coastguard Worker
177*333d2b36SAndroid Build Coastguard Workertype EmbeddedPropertiesStruct struct {
178*333d2b36SAndroid Build Coastguard Worker	S_Embedded_Common    string `android:"arch_variant"`
179*333d2b36SAndroid Build Coastguard Worker	S_Embedded_Different string `android:"arch_variant"`
180*333d2b36SAndroid Build Coastguard Worker}
181*333d2b36SAndroid Build Coastguard Worker
182*333d2b36SAndroid Build Coastguard Workertype testPropertiesStruct struct {
183*333d2b36SAndroid Build Coastguard Worker	name          string
184*333d2b36SAndroid Build Coastguard Worker	private       string
185*333d2b36SAndroid Build Coastguard Worker	Public_Ignore string `sdk:"ignore"`
186*333d2b36SAndroid Build Coastguard Worker	Public_Keep   string `sdk:"keep"`
187*333d2b36SAndroid Build Coastguard Worker	S_Common      string
188*333d2b36SAndroid Build Coastguard Worker	S_Different   string `android:"arch_variant"`
189*333d2b36SAndroid Build Coastguard Worker	A_Common      []string
190*333d2b36SAndroid Build Coastguard Worker	A_Different   []string `android:"arch_variant"`
191*333d2b36SAndroid Build Coastguard Worker	F_Common      *bool
192*333d2b36SAndroid Build Coastguard Worker	F_Different   *bool `android:"arch_variant"`
193*333d2b36SAndroid Build Coastguard Worker	EmbeddedPropertiesStruct
194*333d2b36SAndroid Build Coastguard Worker}
195*333d2b36SAndroid Build Coastguard Worker
196*333d2b36SAndroid Build Coastguard Workerfunc (p *testPropertiesStruct) optimizableProperties() interface{} {
197*333d2b36SAndroid Build Coastguard Worker	return p
198*333d2b36SAndroid Build Coastguard Worker}
199*333d2b36SAndroid Build Coastguard Worker
200*333d2b36SAndroid Build Coastguard Workerfunc (p *testPropertiesStruct) String() string {
201*333d2b36SAndroid Build Coastguard Worker	return p.name
202*333d2b36SAndroid Build Coastguard Worker}
203*333d2b36SAndroid Build Coastguard Worker
204*333d2b36SAndroid Build Coastguard Workervar _ propertiesContainer = (*testPropertiesStruct)(nil)
205*333d2b36SAndroid Build Coastguard Worker
206*333d2b36SAndroid Build Coastguard Workerfunc TestCommonValueOptimization(t *testing.T) {
207*333d2b36SAndroid Build Coastguard Worker	common := &testPropertiesStruct{name: "common"}
208*333d2b36SAndroid Build Coastguard Worker	structs := []propertiesContainer{
209*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
210*333d2b36SAndroid Build Coastguard Worker			name:          "struct-0",
211*333d2b36SAndroid Build Coastguard Worker			private:       "common",
212*333d2b36SAndroid Build Coastguard Worker			Public_Ignore: "common",
213*333d2b36SAndroid Build Coastguard Worker			Public_Keep:   "keep",
214*333d2b36SAndroid Build Coastguard Worker			S_Common:      "common",
215*333d2b36SAndroid Build Coastguard Worker			S_Different:   "upper",
216*333d2b36SAndroid Build Coastguard Worker			A_Common:      []string{"first", "second"},
217*333d2b36SAndroid Build Coastguard Worker			A_Different:   []string{"alpha", "beta"},
218*333d2b36SAndroid Build Coastguard Worker			F_Common:      proptools.BoolPtr(false),
219*333d2b36SAndroid Build Coastguard Worker			F_Different:   proptools.BoolPtr(false),
220*333d2b36SAndroid Build Coastguard Worker			EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
221*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Common:    "embedded_common",
222*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Different: "embedded_upper",
223*333d2b36SAndroid Build Coastguard Worker			},
224*333d2b36SAndroid Build Coastguard Worker		},
225*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
226*333d2b36SAndroid Build Coastguard Worker			name:          "struct-1",
227*333d2b36SAndroid Build Coastguard Worker			private:       "common",
228*333d2b36SAndroid Build Coastguard Worker			Public_Ignore: "common",
229*333d2b36SAndroid Build Coastguard Worker			Public_Keep:   "keep",
230*333d2b36SAndroid Build Coastguard Worker			S_Common:      "common",
231*333d2b36SAndroid Build Coastguard Worker			S_Different:   "lower",
232*333d2b36SAndroid Build Coastguard Worker			A_Common:      []string{"first", "second"},
233*333d2b36SAndroid Build Coastguard Worker			A_Different:   []string{"alpha", "delta"},
234*333d2b36SAndroid Build Coastguard Worker			F_Common:      proptools.BoolPtr(false),
235*333d2b36SAndroid Build Coastguard Worker			F_Different:   proptools.BoolPtr(true),
236*333d2b36SAndroid Build Coastguard Worker			EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
237*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Common:    "embedded_common",
238*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Different: "embedded_lower",
239*333d2b36SAndroid Build Coastguard Worker			},
240*333d2b36SAndroid Build Coastguard Worker		},
241*333d2b36SAndroid Build Coastguard Worker	}
242*333d2b36SAndroid Build Coastguard Worker
243*333d2b36SAndroid Build Coastguard Worker	extractor := newCommonValueExtractor(common)
244*333d2b36SAndroid Build Coastguard Worker
245*333d2b36SAndroid Build Coastguard Worker	err := extractor.extractCommonProperties(common, structs)
246*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "unexpected error", nil, err)
247*333d2b36SAndroid Build Coastguard Worker
248*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "common properties not correct",
249*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
250*333d2b36SAndroid Build Coastguard Worker			name:          "common",
251*333d2b36SAndroid Build Coastguard Worker			private:       "",
252*333d2b36SAndroid Build Coastguard Worker			Public_Ignore: "",
253*333d2b36SAndroid Build Coastguard Worker			Public_Keep:   "keep",
254*333d2b36SAndroid Build Coastguard Worker			S_Common:      "common",
255*333d2b36SAndroid Build Coastguard Worker			S_Different:   "",
256*333d2b36SAndroid Build Coastguard Worker			A_Common:      []string{"first", "second"},
257*333d2b36SAndroid Build Coastguard Worker			A_Different:   []string(nil),
258*333d2b36SAndroid Build Coastguard Worker			F_Common:      proptools.BoolPtr(false),
259*333d2b36SAndroid Build Coastguard Worker			F_Different:   nil,
260*333d2b36SAndroid Build Coastguard Worker			EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
261*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Common:    "embedded_common",
262*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Different: "",
263*333d2b36SAndroid Build Coastguard Worker			},
264*333d2b36SAndroid Build Coastguard Worker		},
265*333d2b36SAndroid Build Coastguard Worker		common)
266*333d2b36SAndroid Build Coastguard Worker
267*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "updated properties[0] not correct",
268*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
269*333d2b36SAndroid Build Coastguard Worker			name:          "struct-0",
270*333d2b36SAndroid Build Coastguard Worker			private:       "common",
271*333d2b36SAndroid Build Coastguard Worker			Public_Ignore: "common",
272*333d2b36SAndroid Build Coastguard Worker			Public_Keep:   "keep",
273*333d2b36SAndroid Build Coastguard Worker			S_Common:      "",
274*333d2b36SAndroid Build Coastguard Worker			S_Different:   "upper",
275*333d2b36SAndroid Build Coastguard Worker			A_Common:      nil,
276*333d2b36SAndroid Build Coastguard Worker			A_Different:   []string{"alpha", "beta"},
277*333d2b36SAndroid Build Coastguard Worker			F_Common:      nil,
278*333d2b36SAndroid Build Coastguard Worker			F_Different:   proptools.BoolPtr(false),
279*333d2b36SAndroid Build Coastguard Worker			EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
280*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Common:    "",
281*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Different: "embedded_upper",
282*333d2b36SAndroid Build Coastguard Worker			},
283*333d2b36SAndroid Build Coastguard Worker		},
284*333d2b36SAndroid Build Coastguard Worker		structs[0])
285*333d2b36SAndroid Build Coastguard Worker
286*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "updated properties[1] not correct",
287*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
288*333d2b36SAndroid Build Coastguard Worker			name:          "struct-1",
289*333d2b36SAndroid Build Coastguard Worker			private:       "common",
290*333d2b36SAndroid Build Coastguard Worker			Public_Ignore: "common",
291*333d2b36SAndroid Build Coastguard Worker			Public_Keep:   "keep",
292*333d2b36SAndroid Build Coastguard Worker			S_Common:      "",
293*333d2b36SAndroid Build Coastguard Worker			S_Different:   "lower",
294*333d2b36SAndroid Build Coastguard Worker			A_Common:      nil,
295*333d2b36SAndroid Build Coastguard Worker			A_Different:   []string{"alpha", "delta"},
296*333d2b36SAndroid Build Coastguard Worker			F_Common:      nil,
297*333d2b36SAndroid Build Coastguard Worker			F_Different:   proptools.BoolPtr(true),
298*333d2b36SAndroid Build Coastguard Worker			EmbeddedPropertiesStruct: EmbeddedPropertiesStruct{
299*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Common:    "",
300*333d2b36SAndroid Build Coastguard Worker				S_Embedded_Different: "embedded_lower",
301*333d2b36SAndroid Build Coastguard Worker			},
302*333d2b36SAndroid Build Coastguard Worker		},
303*333d2b36SAndroid Build Coastguard Worker		structs[1])
304*333d2b36SAndroid Build Coastguard Worker}
305*333d2b36SAndroid Build Coastguard Worker
306*333d2b36SAndroid Build Coastguard Workerfunc TestCommonValueOptimization_InvalidArchSpecificVariants(t *testing.T) {
307*333d2b36SAndroid Build Coastguard Worker	common := &testPropertiesStruct{name: "common"}
308*333d2b36SAndroid Build Coastguard Worker	structs := []propertiesContainer{
309*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
310*333d2b36SAndroid Build Coastguard Worker			name:     "struct-0",
311*333d2b36SAndroid Build Coastguard Worker			S_Common: "should-be-but-is-not-common0",
312*333d2b36SAndroid Build Coastguard Worker		},
313*333d2b36SAndroid Build Coastguard Worker		&testPropertiesStruct{
314*333d2b36SAndroid Build Coastguard Worker			name:     "struct-1",
315*333d2b36SAndroid Build Coastguard Worker			S_Common: "should-be-but-is-not-common1",
316*333d2b36SAndroid Build Coastguard Worker		},
317*333d2b36SAndroid Build Coastguard Worker	}
318*333d2b36SAndroid Build Coastguard Worker
319*333d2b36SAndroid Build Coastguard Worker	extractor := newCommonValueExtractor(common)
320*333d2b36SAndroid Build Coastguard Worker
321*333d2b36SAndroid Build Coastguard Worker	err := extractor.extractCommonProperties(common, structs)
322*333d2b36SAndroid Build Coastguard Worker	android.AssertErrorMessageEquals(t, "unexpected error", `field "S_Common" is not tagged as "arch_variant" but has arch specific properties:
323*333d2b36SAndroid Build Coastguard Worker    "struct-0" has value "should-be-but-is-not-common0"
324*333d2b36SAndroid Build Coastguard Worker    "struct-1" has value "should-be-but-is-not-common1"`, err)
325*333d2b36SAndroid Build Coastguard Worker}
326*333d2b36SAndroid Build Coastguard Worker
327*333d2b36SAndroid Build Coastguard Worker// Ensure that sdk snapshot related environment variables work correctly.
328*333d2b36SAndroid Build Coastguard Workerfunc TestSnapshot_EnvConfiguration(t *testing.T) {
329*333d2b36SAndroid Build Coastguard Worker	bp := `
330*333d2b36SAndroid Build Coastguard Worker		sdk {
331*333d2b36SAndroid Build Coastguard Worker			name: "mysdk",
332*333d2b36SAndroid Build Coastguard Worker			java_header_libs: ["myjavalib"],
333*333d2b36SAndroid Build Coastguard Worker		}
334*333d2b36SAndroid Build Coastguard Worker
335*333d2b36SAndroid Build Coastguard Worker		java_library {
336*333d2b36SAndroid Build Coastguard Worker			name: "myjavalib",
337*333d2b36SAndroid Build Coastguard Worker			srcs: ["Test.java"],
338*333d2b36SAndroid Build Coastguard Worker			system_modules: "none",
339*333d2b36SAndroid Build Coastguard Worker			sdk_version: "none",
340*333d2b36SAndroid Build Coastguard Worker			compile_dex: true,
341*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
342*333d2b36SAndroid Build Coastguard Worker		}
343*333d2b36SAndroid Build Coastguard Worker	`
344*333d2b36SAndroid Build Coastguard Worker	preparer := android.GroupFixturePreparers(
345*333d2b36SAndroid Build Coastguard Worker		prepareForSdkTestWithJava,
346*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(bp),
347*333d2b36SAndroid Build Coastguard Worker	)
348*333d2b36SAndroid Build Coastguard Worker
349*333d2b36SAndroid Build Coastguard Worker	checkZipFile := func(t *testing.T, result *android.TestResult, expected string) {
350*333d2b36SAndroid Build Coastguard Worker		zipRule := result.ModuleForTests("mysdk", "common_os").Rule("SnapshotZipFiles")
351*333d2b36SAndroid Build Coastguard Worker		android.AssertStringEquals(t, "snapshot zip file", expected, zipRule.Output.String())
352*333d2b36SAndroid Build Coastguard Worker	}
353*333d2b36SAndroid Build Coastguard Worker
354*333d2b36SAndroid Build Coastguard Worker	t.Run("no env variables", func(t *testing.T) {
355*333d2b36SAndroid Build Coastguard Worker		result := preparer.RunTest(t)
356*333d2b36SAndroid Build Coastguard Worker
357*333d2b36SAndroid Build Coastguard Worker		checkZipFile(t, result, "out/soong/.intermediates/mysdk/common_os/mysdk-current.zip")
358*333d2b36SAndroid Build Coastguard Worker
359*333d2b36SAndroid Build Coastguard Worker		CheckSnapshot(t, result, "mysdk", "",
360*333d2b36SAndroid Build Coastguard Worker			checkAndroidBpContents(`
361*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
362*333d2b36SAndroid Build Coastguard Worker
363*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
364*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
365*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_myjavalib"],
366*333d2b36SAndroid Build Coastguard Worker}
367*333d2b36SAndroid Build Coastguard Worker
368*333d2b36SAndroid Build Coastguard Workerjava_import {
369*333d2b36SAndroid Build Coastguard Worker    name: "myjavalib",
370*333d2b36SAndroid Build Coastguard Worker    prefer: false,
371*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
372*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
373*333d2b36SAndroid Build Coastguard Worker    jars: ["java/myjavalib.jar"],
374*333d2b36SAndroid Build Coastguard Worker}
375*333d2b36SAndroid Build Coastguard Worker			`),
376*333d2b36SAndroid Build Coastguard Worker		)
377*333d2b36SAndroid Build Coastguard Worker	})
378*333d2b36SAndroid Build Coastguard Worker
379*333d2b36SAndroid Build Coastguard Worker	t.Run("SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=S", func(t *testing.T) {
380*333d2b36SAndroid Build Coastguard Worker		result := android.GroupFixturePreparers(
381*333d2b36SAndroid Build Coastguard Worker			prepareForSdkTestWithJava,
382*333d2b36SAndroid Build Coastguard Worker			java.PrepareForTestWithJavaDefaultModules,
383*333d2b36SAndroid Build Coastguard Worker			java.PrepareForTestWithJavaSdkLibraryFiles,
384*333d2b36SAndroid Build Coastguard Worker			java.FixtureWithLastReleaseApis("mysdklibrary"),
385*333d2b36SAndroid Build Coastguard Worker			android.FixtureWithRootAndroidBp(`
386*333d2b36SAndroid Build Coastguard Worker			sdk {
387*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
388*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
389*333d2b36SAndroid Build Coastguard Worker			}
390*333d2b36SAndroid Build Coastguard Worker
391*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
392*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
393*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
394*333d2b36SAndroid Build Coastguard Worker				contents: ["mysdklibrary"],
395*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
396*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
397*333d2b36SAndroid Build Coastguard Worker				},
398*333d2b36SAndroid Build Coastguard Worker			}
399*333d2b36SAndroid Build Coastguard Worker
400*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
401*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
402*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
403*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
404*333d2b36SAndroid Build Coastguard Worker				sdk_version: "S",
405*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
406*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mysdklibrary"],
407*333d2b36SAndroid Build Coastguard Worker			}
408*333d2b36SAndroid Build Coastguard Worker		`),
409*333d2b36SAndroid Build Coastguard Worker			android.FixtureMergeEnv(map[string]string{
410*333d2b36SAndroid Build Coastguard Worker				"SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
411*333d2b36SAndroid Build Coastguard Worker			}),
412*333d2b36SAndroid Build Coastguard Worker			android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
413*333d2b36SAndroid Build Coastguard Worker		).RunTest(t)
414*333d2b36SAndroid Build Coastguard Worker
415*333d2b36SAndroid Build Coastguard Worker		CheckSnapshot(t, result, "mysdk", "",
416*333d2b36SAndroid Build Coastguard Worker			checkAndroidBpContents(`
417*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
418*333d2b36SAndroid Build Coastguard Worker
419*333d2b36SAndroid Build Coastguard Workerapex_contributions_defaults {
420*333d2b36SAndroid Build Coastguard Worker    name: "mysdk.contributions",
421*333d2b36SAndroid Build Coastguard Worker    contents: ["prebuilt_mysdklibrary"],
422*333d2b36SAndroid Build Coastguard Worker}
423*333d2b36SAndroid Build Coastguard Worker
424*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
425*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
426*333d2b36SAndroid Build Coastguard Worker    prefer: false,
427*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
428*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
429*333d2b36SAndroid Build Coastguard Worker    contents: ["mysdklibrary"],
430*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
431*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
432*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
433*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
434*333d2b36SAndroid Build Coastguard Worker        stub_flags: "hiddenapi/stub-flags.csv",
435*333d2b36SAndroid Build Coastguard Worker        all_flags: "hiddenapi/all-flags.csv",
436*333d2b36SAndroid Build Coastguard Worker    },
437*333d2b36SAndroid Build Coastguard Worker}
438*333d2b36SAndroid Build Coastguard Worker
439*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
440*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
441*333d2b36SAndroid Build Coastguard Worker    prefer: false,
442*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
443*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
444*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
445*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
446*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mysdklibrary"],
447*333d2b36SAndroid Build Coastguard Worker    public: {
448*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
449*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
450*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
451*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
452*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
453*333d2b36SAndroid Build Coastguard Worker    },
454*333d2b36SAndroid Build Coastguard Worker}
455*333d2b36SAndroid Build Coastguard Worker`),
456*333d2b36SAndroid Build Coastguard Worker
457*333d2b36SAndroid Build Coastguard Worker			checkAllCopyRules(`
458*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
459*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
460*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
461*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
462*333d2b36SAndroid Build Coastguard Worker.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
463*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
464*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
465*333d2b36SAndroid Build Coastguard Worker.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
466*333d2b36SAndroid Build Coastguard Worker`),
467*333d2b36SAndroid Build Coastguard Worker		)
468*333d2b36SAndroid Build Coastguard Worker	})
469*333d2b36SAndroid Build Coastguard Worker
470*333d2b36SAndroid Build Coastguard Worker	t.Run("test replacing exportable module", func(t *testing.T) {
471*333d2b36SAndroid Build Coastguard Worker		result := android.GroupFixturePreparers(
472*333d2b36SAndroid Build Coastguard Worker			prepareForSdkTestWithJava,
473*333d2b36SAndroid Build Coastguard Worker			java.PrepareForTestWithJavaDefaultModules,
474*333d2b36SAndroid Build Coastguard Worker			java.PrepareForTestWithJavaSdkLibraryFiles,
475*333d2b36SAndroid Build Coastguard Worker			java.FixtureWithLastReleaseApis("mysdklibrary", "anothersdklibrary"),
476*333d2b36SAndroid Build Coastguard Worker			android.FixtureWithRootAndroidBp(`
477*333d2b36SAndroid Build Coastguard Worker			sdk {
478*333d2b36SAndroid Build Coastguard Worker				name: "mysdk",
479*333d2b36SAndroid Build Coastguard Worker				bootclasspath_fragments: ["mybootclasspathfragment"],
480*333d2b36SAndroid Build Coastguard Worker			}
481*333d2b36SAndroid Build Coastguard Worker
482*333d2b36SAndroid Build Coastguard Worker			bootclasspath_fragment {
483*333d2b36SAndroid Build Coastguard Worker				name: "mybootclasspathfragment",
484*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
485*333d2b36SAndroid Build Coastguard Worker				contents: ["mysdklibrary"],
486*333d2b36SAndroid Build Coastguard Worker				hidden_api: {
487*333d2b36SAndroid Build Coastguard Worker					split_packages: ["*"],
488*333d2b36SAndroid Build Coastguard Worker				},
489*333d2b36SAndroid Build Coastguard Worker				core_platform_api: {
490*333d2b36SAndroid Build Coastguard Worker					stub_libs: [
491*333d2b36SAndroid Build Coastguard Worker						"anothersdklibrary.stubs.exportable",
492*333d2b36SAndroid Build Coastguard Worker					],
493*333d2b36SAndroid Build Coastguard Worker				},
494*333d2b36SAndroid Build Coastguard Worker				api: {
495*333d2b36SAndroid Build Coastguard Worker					stub_libs: [
496*333d2b36SAndroid Build Coastguard Worker						"anothersdklibrary",
497*333d2b36SAndroid Build Coastguard Worker					],
498*333d2b36SAndroid Build Coastguard Worker				},
499*333d2b36SAndroid Build Coastguard Worker			}
500*333d2b36SAndroid Build Coastguard Worker
501*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
502*333d2b36SAndroid Build Coastguard Worker				name: "mysdklibrary",
503*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
504*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
505*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "S",
506*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
507*333d2b36SAndroid Build Coastguard Worker				permitted_packages: ["mysdklibrary"],
508*333d2b36SAndroid Build Coastguard Worker			}
509*333d2b36SAndroid Build Coastguard Worker
510*333d2b36SAndroid Build Coastguard Worker			java_sdk_library {
511*333d2b36SAndroid Build Coastguard Worker				name: "anothersdklibrary",
512*333d2b36SAndroid Build Coastguard Worker				srcs: ["Test.java"],
513*333d2b36SAndroid Build Coastguard Worker				compile_dex: true,
514*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "S",
515*333d2b36SAndroid Build Coastguard Worker				public: {enabled: true},
516*333d2b36SAndroid Build Coastguard Worker				system: {enabled: true},
517*333d2b36SAndroid Build Coastguard Worker				module_lib: {enabled: true},
518*333d2b36SAndroid Build Coastguard Worker			}
519*333d2b36SAndroid Build Coastguard Worker		`),
520*333d2b36SAndroid Build Coastguard Worker			android.FixtureMergeEnv(map[string]string{
521*333d2b36SAndroid Build Coastguard Worker				"SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
522*333d2b36SAndroid Build Coastguard Worker			}),
523*333d2b36SAndroid Build Coastguard Worker			android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
524*333d2b36SAndroid Build Coastguard Worker				variables.Platform_version_active_codenames = []string{"UpsideDownCake", "Tiramisu", "S-V2"}
525*333d2b36SAndroid Build Coastguard Worker			}),
526*333d2b36SAndroid Build Coastguard Worker			android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
527*333d2b36SAndroid Build Coastguard Worker		).RunTest(t)
528*333d2b36SAndroid Build Coastguard Worker
529*333d2b36SAndroid Build Coastguard Worker		CheckSnapshot(t, result, "mysdk", "",
530*333d2b36SAndroid Build Coastguard Worker			checkAndroidBpContents(`
531*333d2b36SAndroid Build Coastguard Worker// This is auto-generated. DO NOT EDIT.
532*333d2b36SAndroid Build Coastguard Worker
533*333d2b36SAndroid Build Coastguard Workerprebuilt_bootclasspath_fragment {
534*333d2b36SAndroid Build Coastguard Worker    name: "mybootclasspathfragment",
535*333d2b36SAndroid Build Coastguard Worker    prefer: false,
536*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
537*333d2b36SAndroid Build Coastguard Worker    apex_available: ["myapex"],
538*333d2b36SAndroid Build Coastguard Worker    contents: ["mysdklibrary"],
539*333d2b36SAndroid Build Coastguard Worker    api: {
540*333d2b36SAndroid Build Coastguard Worker        stub_libs: ["anothersdklibrary"],
541*333d2b36SAndroid Build Coastguard Worker    },
542*333d2b36SAndroid Build Coastguard Worker    core_platform_api: {
543*333d2b36SAndroid Build Coastguard Worker        stub_libs: ["anothersdklibrary.stubs"],
544*333d2b36SAndroid Build Coastguard Worker    },
545*333d2b36SAndroid Build Coastguard Worker    hidden_api: {
546*333d2b36SAndroid Build Coastguard Worker        annotation_flags: "hiddenapi/annotation-flags.csv",
547*333d2b36SAndroid Build Coastguard Worker        metadata: "hiddenapi/metadata.csv",
548*333d2b36SAndroid Build Coastguard Worker        index: "hiddenapi/index.csv",
549*333d2b36SAndroid Build Coastguard Worker        stub_flags: "hiddenapi/stub-flags.csv",
550*333d2b36SAndroid Build Coastguard Worker        all_flags: "hiddenapi/all-flags.csv",
551*333d2b36SAndroid Build Coastguard Worker    },
552*333d2b36SAndroid Build Coastguard Worker}
553*333d2b36SAndroid Build Coastguard Worker
554*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
555*333d2b36SAndroid Build Coastguard Worker    name: "mysdklibrary",
556*333d2b36SAndroid Build Coastguard Worker    prefer: false,
557*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
558*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
559*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
560*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
561*333d2b36SAndroid Build Coastguard Worker    permitted_packages: ["mysdklibrary"],
562*333d2b36SAndroid Build Coastguard Worker    public: {
563*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
564*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
565*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/mysdklibrary.txt",
566*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/mysdklibrary-removed.txt",
567*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
568*333d2b36SAndroid Build Coastguard Worker    },
569*333d2b36SAndroid Build Coastguard Worker}
570*333d2b36SAndroid Build Coastguard Worker
571*333d2b36SAndroid Build Coastguard Workerjava_sdk_library_import {
572*333d2b36SAndroid Build Coastguard Worker    name: "anothersdklibrary",
573*333d2b36SAndroid Build Coastguard Worker    prefer: false,
574*333d2b36SAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
575*333d2b36SAndroid Build Coastguard Worker    apex_available: ["//apex_available:platform"],
576*333d2b36SAndroid Build Coastguard Worker    shared_library: true,
577*333d2b36SAndroid Build Coastguard Worker    compile_dex: true,
578*333d2b36SAndroid Build Coastguard Worker    public: {
579*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/public/anothersdklibrary-stubs.jar"],
580*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/public/anothersdklibrary_stub_sources"],
581*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/public/anothersdklibrary.txt",
582*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/public/anothersdklibrary-removed.txt",
583*333d2b36SAndroid Build Coastguard Worker        sdk_version: "current",
584*333d2b36SAndroid Build Coastguard Worker    },
585*333d2b36SAndroid Build Coastguard Worker    system: {
586*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/system/anothersdklibrary-stubs.jar"],
587*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/system/anothersdklibrary_stub_sources"],
588*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/system/anothersdklibrary.txt",
589*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/system/anothersdklibrary-removed.txt",
590*333d2b36SAndroid Build Coastguard Worker        sdk_version: "system_current",
591*333d2b36SAndroid Build Coastguard Worker    },
592*333d2b36SAndroid Build Coastguard Worker    module_lib: {
593*333d2b36SAndroid Build Coastguard Worker        jars: ["sdk_library/module-lib/anothersdklibrary-stubs.jar"],
594*333d2b36SAndroid Build Coastguard Worker        stub_srcs: ["sdk_library/module-lib/anothersdklibrary_stub_sources"],
595*333d2b36SAndroid Build Coastguard Worker        current_api: "sdk_library/module-lib/anothersdklibrary.txt",
596*333d2b36SAndroid Build Coastguard Worker        removed_api: "sdk_library/module-lib/anothersdklibrary-removed.txt",
597*333d2b36SAndroid Build Coastguard Worker        sdk_version: "module_current",
598*333d2b36SAndroid Build Coastguard Worker    },
599*333d2b36SAndroid Build Coastguard Worker}
600*333d2b36SAndroid Build Coastguard Worker`),
601*333d2b36SAndroid Build Coastguard Worker		)
602*333d2b36SAndroid Build Coastguard Worker	})
603*333d2b36SAndroid Build Coastguard Worker
604*333d2b36SAndroid Build Coastguard Worker}
605