2019-07-11 15:18:47 +08:00
|
|
|
// Copyright 2019 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 (
|
2019-08-30 05:56:03 +08:00
|
|
|
"reflect"
|
2019-07-11 15:18:47 +08:00
|
|
|
"testing"
|
2019-07-18 02:15:09 +08:00
|
|
|
|
|
|
|
"android/soong/android"
|
2019-07-11 15:18:47 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestRequired(t *testing.T) {
|
2020-07-04 04:18:24 +08:00
|
|
|
ctx, _ := testJava(t, `
|
2019-07-11 15:18:47 +08:00
|
|
|
java_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
required: ["libfoo"],
|
|
|
|
}
|
2019-07-18 02:15:09 +08:00
|
|
|
`)
|
2019-07-11 15:18:47 +08:00
|
|
|
|
2019-08-30 05:56:03 +08:00
|
|
|
mod := ctx.ModuleForTests("foo", "android_common").Module()
|
2020-07-04 04:18:24 +08:00
|
|
|
entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0]
|
2019-08-30 05:56:03 +08:00
|
|
|
|
|
|
|
expected := []string{"libfoo"}
|
|
|
|
actual := entries.EntryMap["LOCAL_REQUIRED_MODULES"]
|
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected required modules - expected: %q, actual: %q", expected, actual)
|
|
|
|
}
|
2019-07-11 15:18:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestHostdex(t *testing.T) {
|
2020-07-04 04:18:24 +08:00
|
|
|
ctx, _ := testJava(t, `
|
2019-07-11 15:18:47 +08:00
|
|
|
java_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
hostdex: true,
|
|
|
|
}
|
2019-07-18 02:15:09 +08:00
|
|
|
`)
|
2019-07-11 15:18:47 +08:00
|
|
|
|
2019-08-30 05:56:03 +08:00
|
|
|
mod := ctx.ModuleForTests("foo", "android_common").Module()
|
2020-07-04 04:18:24 +08:00
|
|
|
entriesList := android.AndroidMkEntriesForTest(t, ctx, mod)
|
2019-12-11 16:27:07 +08:00
|
|
|
if len(entriesList) != 2 {
|
|
|
|
t.Errorf("two entries are expected, but got %d", len(entriesList))
|
|
|
|
}
|
2019-08-30 05:56:03 +08:00
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
mainEntries := &entriesList[0]
|
2019-08-30 05:56:03 +08:00
|
|
|
expected := []string{"foo"}
|
2019-12-11 16:27:07 +08:00
|
|
|
actual := mainEntries.EntryMap["LOCAL_MODULE"]
|
2019-08-30 05:56:03 +08:00
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected module name - expected: %q, actual: %q", expected, actual)
|
|
|
|
}
|
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
subEntries := &entriesList[1]
|
|
|
|
expected = []string{"foo-hostdex"}
|
|
|
|
actual = subEntries.EntryMap["LOCAL_MODULE"]
|
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected module name - expected: %q, actual: %q", expected, actual)
|
2019-08-30 05:56:03 +08:00
|
|
|
}
|
2019-07-11 15:18:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestHostdexRequired(t *testing.T) {
|
2020-07-04 04:18:24 +08:00
|
|
|
ctx, _ := testJava(t, `
|
2019-07-11 15:18:47 +08:00
|
|
|
java_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
hostdex: true,
|
|
|
|
required: ["libfoo"],
|
|
|
|
}
|
2019-07-18 02:15:09 +08:00
|
|
|
`)
|
2019-07-11 15:18:47 +08:00
|
|
|
|
2019-08-30 05:56:03 +08:00
|
|
|
mod := ctx.ModuleForTests("foo", "android_common").Module()
|
2020-07-04 04:18:24 +08:00
|
|
|
entriesList := android.AndroidMkEntriesForTest(t, ctx, mod)
|
2019-12-11 16:27:07 +08:00
|
|
|
if len(entriesList) != 2 {
|
|
|
|
t.Errorf("two entries are expected, but got %d", len(entriesList))
|
|
|
|
}
|
2019-08-30 05:56:03 +08:00
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
mainEntries := &entriesList[0]
|
2019-08-30 05:56:03 +08:00
|
|
|
expected := []string{"libfoo"}
|
2019-12-11 16:27:07 +08:00
|
|
|
actual := mainEntries.EntryMap["LOCAL_REQUIRED_MODULES"]
|
2019-08-30 05:56:03 +08:00
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected required modules - expected: %q, actual: %q", expected, actual)
|
|
|
|
}
|
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
subEntries := &entriesList[1]
|
|
|
|
expected = []string{"libfoo"}
|
|
|
|
actual = subEntries.EntryMap["LOCAL_REQUIRED_MODULES"]
|
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected required modules - expected: %q, actual: %q", expected, actual)
|
2019-08-30 05:56:03 +08:00
|
|
|
}
|
2019-07-11 15:18:47 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestHostdexSpecificRequired(t *testing.T) {
|
2020-07-04 04:18:24 +08:00
|
|
|
ctx, _ := testJava(t, `
|
2019-07-11 15:18:47 +08:00
|
|
|
java_library {
|
|
|
|
name: "foo",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
hostdex: true,
|
|
|
|
target: {
|
|
|
|
hostdex: {
|
|
|
|
required: ["libfoo"],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
2019-07-18 02:15:09 +08:00
|
|
|
`)
|
2019-07-11 15:18:47 +08:00
|
|
|
|
2019-08-30 05:56:03 +08:00
|
|
|
mod := ctx.ModuleForTests("foo", "android_common").Module()
|
2020-07-04 04:18:24 +08:00
|
|
|
entriesList := android.AndroidMkEntriesForTest(t, ctx, mod)
|
2019-12-11 16:27:07 +08:00
|
|
|
if len(entriesList) != 2 {
|
|
|
|
t.Errorf("two entries are expected, but got %d", len(entriesList))
|
|
|
|
}
|
2019-08-30 05:56:03 +08:00
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
mainEntries := &entriesList[0]
|
|
|
|
if r, ok := mainEntries.EntryMap["LOCAL_REQUIRED_MODULES"]; ok {
|
2019-08-30 05:56:03 +08:00
|
|
|
t.Errorf("Unexpected required modules: %q", r)
|
|
|
|
}
|
|
|
|
|
2019-12-11 16:27:07 +08:00
|
|
|
subEntries := &entriesList[1]
|
|
|
|
expected := []string{"libfoo"}
|
|
|
|
actual := subEntries.EntryMap["LOCAL_REQUIRED_MODULES"]
|
|
|
|
if !reflect.DeepEqual(expected, actual) {
|
|
|
|
t.Errorf("Unexpected required modules - expected: %q, actual: %q", expected, actual)
|
2019-08-30 05:56:03 +08:00
|
|
|
}
|
2019-07-11 15:18:47 +08:00
|
|
|
}
|
2020-03-28 03:39:48 +08:00
|
|
|
|
2020-06-05 17:43:19 +08:00
|
|
|
func TestJavaSdkLibrary_RequireXmlPermissionFile(t *testing.T) {
|
2021-03-22 23:36:52 +08:00
|
|
|
result := android.GroupFixturePreparers(
|
|
|
|
prepareForJavaTest,
|
2021-03-13 03:18:49 +08:00
|
|
|
PrepareForTestWithJavaSdkLibraryFiles,
|
|
|
|
FixtureWithLastReleaseApis("foo-shared_library", "foo-no_shared_library"),
|
|
|
|
).RunTestWithBp(t, `
|
2020-06-05 17:43:19 +08:00
|
|
|
java_sdk_library {
|
|
|
|
name: "foo-shared_library",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
}
|
|
|
|
java_sdk_library {
|
|
|
|
name: "foo-no_shared_library",
|
|
|
|
srcs: ["a.java"],
|
|
|
|
shared_library: false,
|
|
|
|
}
|
|
|
|
`)
|
|
|
|
|
|
|
|
// Verify the existence of internal modules
|
2021-03-13 03:15:01 +08:00
|
|
|
result.ModuleForTests("foo-shared_library.xml", "android_common")
|
2020-06-05 17:43:19 +08:00
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
moduleName string
|
|
|
|
expected []string
|
|
|
|
}{
|
|
|
|
{"foo-shared_library", []string{"foo-shared_library.xml"}},
|
|
|
|
{"foo-no_shared_library", nil},
|
|
|
|
}
|
|
|
|
for _, tc := range testCases {
|
2021-03-13 03:15:01 +08:00
|
|
|
mod := result.ModuleForTests(tc.moduleName, "android_common").Module()
|
|
|
|
entries := android.AndroidMkEntriesForTest(t, result.TestContext, mod)[0]
|
2020-06-05 17:43:19 +08:00
|
|
|
actual := entries.EntryMap["LOCAL_REQUIRED_MODULES"]
|
|
|
|
if !reflect.DeepEqual(tc.expected, actual) {
|
|
|
|
t.Errorf("Unexpected required modules - expected: %q, actual: %q", tc.expected, actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-01-12 04:27:24 +08:00
|
|
|
|
|
|
|
func TestImportSoongDexJar(t *testing.T) {
|
2021-03-23 01:31:51 +08:00
|
|
|
result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
|
2021-01-12 04:27:24 +08:00
|
|
|
java_import {
|
|
|
|
name: "my-java-import",
|
|
|
|
jars: ["a.jar"],
|
|
|
|
prefer: true,
|
|
|
|
compile_dex: true,
|
|
|
|
}
|
|
|
|
`)
|
|
|
|
|
2021-03-23 01:31:51 +08:00
|
|
|
mod := result.Module("my-java-import", "android_common")
|
|
|
|
entries := android.AndroidMkEntriesForTest(t, result.TestContext, mod)[0]
|
|
|
|
expectedSoongDexJar := "out/soong/.intermediates/my-java-import/android_common/dex/my-java-import.jar"
|
2021-01-12 04:27:24 +08:00
|
|
|
actualSoongDexJar := entries.EntryMap["LOCAL_SOONG_DEX_JAR"]
|
|
|
|
|
2021-03-23 01:31:51 +08:00
|
|
|
android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_SOONG_DEX_JAR", result.Config, []string{expectedSoongDexJar}, actualSoongDexJar)
|
2021-01-12 04:27:24 +08:00
|
|
|
}
|