// Copyright 2020 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package java import ( "fmt" "reflect" "strings" "testing" "android/soong/android" ) func TestAndroidAppSet(t *testing.T) { result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, ` android_app_set { name: "foo", set: "prebuilts/apks/app.apks", prerelease: true, }`) module := result.ModuleForTests("foo", "android_common") const packedSplitApks = "foo.zip" params := module.Output(packedSplitApks) if params.Rule == nil { t.Errorf("expected output %s is missing", packedSplitApks) } if s := params.Args["allow-prereleased"]; s != "true" { t.Errorf("wrong allow-prereleased value: '%s', expected 'true'", s) } if s := params.Args["partition"]; s != "system" { t.Errorf("wrong partition value: '%s', expected 'system'", s) } android.AssertPathRelativeToTopEquals(t, "incorrect output path", "out/soong/.intermediates/foo/android_common/foo.apk", params.Output) android.AssertPathsRelativeToTopEquals(t, "incorrect implicit output paths", []string{ "out/soong/.intermediates/foo/android_common/foo.zip", "out/soong/.intermediates/foo/android_common/apkcerts.txt", }, params.ImplicitOutputs.Paths()) mkEntries := android.AndroidMkEntriesForTest(t, result.TestContext, module.Module())[0] actualInstallFile := mkEntries.EntryMap["LOCAL_APK_SET_INSTALL_FILE"] expectedInstallFile := []string{ strings.Replace(params.ImplicitOutputs[0].String(), android.OutSoongDir, result.Config.SoongOutDir(), 1), } if !reflect.DeepEqual(actualInstallFile, expectedInstallFile) { t.Errorf("Unexpected LOCAL_APK_SET_INSTALL_FILE value: '%s', expected: '%s',", actualInstallFile, expectedInstallFile) } } func TestAndroidAppSet_Variants(t *testing.T) { bp := ` android_app_set { name: "foo", set: "prebuilts/apks/app.apks", }` testCases := []struct { name string targets []android.Target aaptPrebuiltDPI []string sdkVersion int expected map[string]string }{ { name: "One", targets: []android.Target{ {Os: android.Android, Arch: android.Arch{ArchType: android.X86}}, }, aaptPrebuiltDPI: []string{"ldpi", "xxhdpi"}, sdkVersion: 29, expected: map[string]string{ "abis": "X86", "allow-prereleased": "false", "screen-densities": "LDPI,XXHDPI", "sdk-version": "29", "stem": "foo", }, }, { name: "Two", targets: []android.Target{ {Os: android.Android, Arch: android.Arch{ArchType: android.X86_64}}, {Os: android.Android, Arch: android.Arch{ArchType: android.X86}}, }, aaptPrebuiltDPI: nil, sdkVersion: 30, expected: map[string]string{ "abis": "X86_64,X86", "allow-prereleased": "false", "screen-densities": "all", "sdk-version": "30", "stem": "foo", }, }, } for _, test := range testCases { ctx := android.GroupFixturePreparers( PrepareForTestWithJavaDefaultModules, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { variables.AAPTPrebuiltDPI = test.aaptPrebuiltDPI variables.Platform_sdk_version = &test.sdkVersion }), android.FixtureModifyConfig(func(config android.Config) { config.Targets[android.Android] = test.targets }), ).RunTestWithBp(t, bp) module := ctx.ModuleForTests("foo", "android_common") const packedSplitApks = "foo.zip" params := module.Output(packedSplitApks) for k, v := range test.expected { t.Run(test.name, func(t *testing.T) { android.AssertStringEquals(t, fmt.Sprintf("arg value for `%s`", k), v, params.Args[k]) }) } } }