xref: /aosp_15_r20/build/soong/java/app_set_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 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	"fmt"
19*333d2b36SAndroid Build Coastguard Worker	"reflect"
20*333d2b36SAndroid Build Coastguard Worker	"strings"
21*333d2b36SAndroid Build Coastguard Worker	"testing"
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
24*333d2b36SAndroid Build Coastguard Worker)
25*333d2b36SAndroid Build Coastguard Worker
26*333d2b36SAndroid Build Coastguard Workerfunc TestAndroidAppSet(t *testing.T) {
27*333d2b36SAndroid Build Coastguard Worker	result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
28*333d2b36SAndroid Build Coastguard Worker		android_app_set {
29*333d2b36SAndroid Build Coastguard Worker			name: "foo",
30*333d2b36SAndroid Build Coastguard Worker			set: "prebuilts/apks/app.apks",
31*333d2b36SAndroid Build Coastguard Worker			prerelease: true,
32*333d2b36SAndroid Build Coastguard Worker		}`)
33*333d2b36SAndroid Build Coastguard Worker	module := result.ModuleForTests("foo", "android_common")
34*333d2b36SAndroid Build Coastguard Worker	const packedSplitApks = "foo.zip"
35*333d2b36SAndroid Build Coastguard Worker	params := module.Output(packedSplitApks)
36*333d2b36SAndroid Build Coastguard Worker	if params.Rule == nil {
37*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected output %s is missing", packedSplitApks)
38*333d2b36SAndroid Build Coastguard Worker	}
39*333d2b36SAndroid Build Coastguard Worker	if s := params.Args["allow-prereleased"]; s != "true" {
40*333d2b36SAndroid Build Coastguard Worker		t.Errorf("wrong allow-prereleased value: '%s', expected 'true'", s)
41*333d2b36SAndroid Build Coastguard Worker	}
42*333d2b36SAndroid Build Coastguard Worker	if s := params.Args["partition"]; s != "system" {
43*333d2b36SAndroid Build Coastguard Worker		t.Errorf("wrong partition value: '%s', expected 'system'", s)
44*333d2b36SAndroid Build Coastguard Worker	}
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "incorrect output path",
47*333d2b36SAndroid Build Coastguard Worker		"out/soong/.intermediates/foo/android_common/foo.apk", params.Output)
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Worker	android.AssertPathsRelativeToTopEquals(t, "incorrect implicit output paths",
50*333d2b36SAndroid Build Coastguard Worker		[]string{
51*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/foo/android_common/foo.zip",
52*333d2b36SAndroid Build Coastguard Worker			"out/soong/.intermediates/foo/android_common/apkcerts.txt",
53*333d2b36SAndroid Build Coastguard Worker		},
54*333d2b36SAndroid Build Coastguard Worker		params.ImplicitOutputs.Paths())
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker	mkEntries := android.AndroidMkEntriesForTest(t, result.TestContext, module.Module())[0]
57*333d2b36SAndroid Build Coastguard Worker	actualInstallFile := mkEntries.EntryMap["LOCAL_APK_SET_INSTALL_FILE"]
58*333d2b36SAndroid Build Coastguard Worker	expectedInstallFile := []string{
59*333d2b36SAndroid Build Coastguard Worker		strings.Replace(params.ImplicitOutputs[0].String(), android.TestOutSoongDir, result.Config.SoongOutDir(), 1),
60*333d2b36SAndroid Build Coastguard Worker	}
61*333d2b36SAndroid Build Coastguard Worker	if !reflect.DeepEqual(actualInstallFile, expectedInstallFile) {
62*333d2b36SAndroid Build Coastguard Worker		t.Errorf("Unexpected LOCAL_APK_SET_INSTALL_FILE value: '%s', expected: '%s',",
63*333d2b36SAndroid Build Coastguard Worker			actualInstallFile, expectedInstallFile)
64*333d2b36SAndroid Build Coastguard Worker	}
65*333d2b36SAndroid Build Coastguard Worker}
66*333d2b36SAndroid Build Coastguard Worker
67*333d2b36SAndroid Build Coastguard Workerfunc TestAndroidAppSet_Variants(t *testing.T) {
68*333d2b36SAndroid Build Coastguard Worker	bp := `
69*333d2b36SAndroid Build Coastguard Worker		android_app_set {
70*333d2b36SAndroid Build Coastguard Worker			name: "foo",
71*333d2b36SAndroid Build Coastguard Worker			set: "prebuilts/apks/app.apks",
72*333d2b36SAndroid Build Coastguard Worker		}`
73*333d2b36SAndroid Build Coastguard Worker	testCases := []struct {
74*333d2b36SAndroid Build Coastguard Worker		name            string
75*333d2b36SAndroid Build Coastguard Worker		targets         []android.Target
76*333d2b36SAndroid Build Coastguard Worker		aaptPrebuiltDPI []string
77*333d2b36SAndroid Build Coastguard Worker		sdkVersion      int
78*333d2b36SAndroid Build Coastguard Worker		expected        map[string]string
79*333d2b36SAndroid Build Coastguard Worker	}{
80*333d2b36SAndroid Build Coastguard Worker		{
81*333d2b36SAndroid Build Coastguard Worker			name: "One",
82*333d2b36SAndroid Build Coastguard Worker			targets: []android.Target{
83*333d2b36SAndroid Build Coastguard Worker				{Os: android.Android, Arch: android.Arch{ArchType: android.X86}},
84*333d2b36SAndroid Build Coastguard Worker			},
85*333d2b36SAndroid Build Coastguard Worker			aaptPrebuiltDPI: []string{"ldpi", "xxhdpi"},
86*333d2b36SAndroid Build Coastguard Worker			sdkVersion:      29,
87*333d2b36SAndroid Build Coastguard Worker			expected: map[string]string{
88*333d2b36SAndroid Build Coastguard Worker				"abis":              "X86",
89*333d2b36SAndroid Build Coastguard Worker				"allow-prereleased": "false",
90*333d2b36SAndroid Build Coastguard Worker				"screen-densities":  "LDPI,XXHDPI",
91*333d2b36SAndroid Build Coastguard Worker				"sdk-version":       "29",
92*333d2b36SAndroid Build Coastguard Worker				"skip-sdk-check":    "false",
93*333d2b36SAndroid Build Coastguard Worker				"stem":              "foo",
94*333d2b36SAndroid Build Coastguard Worker			},
95*333d2b36SAndroid Build Coastguard Worker		},
96*333d2b36SAndroid Build Coastguard Worker		{
97*333d2b36SAndroid Build Coastguard Worker			name: "Two",
98*333d2b36SAndroid Build Coastguard Worker			targets: []android.Target{
99*333d2b36SAndroid Build Coastguard Worker				{Os: android.Android, Arch: android.Arch{ArchType: android.X86_64}},
100*333d2b36SAndroid Build Coastguard Worker				{Os: android.Android, Arch: android.Arch{ArchType: android.X86}},
101*333d2b36SAndroid Build Coastguard Worker			},
102*333d2b36SAndroid Build Coastguard Worker			aaptPrebuiltDPI: nil,
103*333d2b36SAndroid Build Coastguard Worker			sdkVersion:      30,
104*333d2b36SAndroid Build Coastguard Worker			expected: map[string]string{
105*333d2b36SAndroid Build Coastguard Worker				"abis":              "X86_64,X86",
106*333d2b36SAndroid Build Coastguard Worker				"allow-prereleased": "false",
107*333d2b36SAndroid Build Coastguard Worker				"screen-densities":  "all",
108*333d2b36SAndroid Build Coastguard Worker				"sdk-version":       "30",
109*333d2b36SAndroid Build Coastguard Worker				"skip-sdk-check":    "false",
110*333d2b36SAndroid Build Coastguard Worker				"stem":              "foo",
111*333d2b36SAndroid Build Coastguard Worker			},
112*333d2b36SAndroid Build Coastguard Worker		},
113*333d2b36SAndroid Build Coastguard Worker	}
114*333d2b36SAndroid Build Coastguard Worker
115*333d2b36SAndroid Build Coastguard Worker	for _, test := range testCases {
116*333d2b36SAndroid Build Coastguard Worker		ctx := android.GroupFixturePreparers(
117*333d2b36SAndroid Build Coastguard Worker			PrepareForTestWithJavaDefaultModules,
118*333d2b36SAndroid Build Coastguard Worker			android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
119*333d2b36SAndroid Build Coastguard Worker				variables.AAPTPrebuiltDPI = test.aaptPrebuiltDPI
120*333d2b36SAndroid Build Coastguard Worker				variables.Platform_sdk_version = &test.sdkVersion
121*333d2b36SAndroid Build Coastguard Worker			}),
122*333d2b36SAndroid Build Coastguard Worker			android.FixtureModifyConfig(func(config android.Config) {
123*333d2b36SAndroid Build Coastguard Worker				config.Targets[android.Android] = test.targets
124*333d2b36SAndroid Build Coastguard Worker			}),
125*333d2b36SAndroid Build Coastguard Worker		).RunTestWithBp(t, bp)
126*333d2b36SAndroid Build Coastguard Worker
127*333d2b36SAndroid Build Coastguard Worker		module := ctx.ModuleForTests("foo", "android_common")
128*333d2b36SAndroid Build Coastguard Worker		const packedSplitApks = "foo.zip"
129*333d2b36SAndroid Build Coastguard Worker		params := module.Output(packedSplitApks)
130*333d2b36SAndroid Build Coastguard Worker		for k, v := range test.expected {
131*333d2b36SAndroid Build Coastguard Worker			t.Run(test.name, func(t *testing.T) {
132*333d2b36SAndroid Build Coastguard Worker				android.AssertStringEquals(t, fmt.Sprintf("arg value for `%s`", k), v, params.Args[k])
133*333d2b36SAndroid Build Coastguard Worker			})
134*333d2b36SAndroid Build Coastguard Worker		}
135*333d2b36SAndroid Build Coastguard Worker	}
136*333d2b36SAndroid Build Coastguard Worker}
137