blob: 0419a469bd00bdc79371621ab5d1243417088469 [file] [log] [blame]
Paul Duffin3451e162021-01-20 15:16:56 +00001// Copyright (C) 2021 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package java
16
17import (
18 "testing"
Paul Duffin837486d2021-03-23 23:13:53 +000019
20 "android/soong/android"
21 "android/soong/dexpreopt"
Paul Duffin3451e162021-01-20 15:16:56 +000022)
23
Paul Duffin7771eba2021-04-23 14:25:28 +010024// Contains some simple tests for bootclasspath_fragment logic, additional tests can be found in
25// apex/bootclasspath_fragment_test.go as the ART boot image requires modules from the ART apex.
Paul Duffin3451e162021-01-20 15:16:56 +000026
Paul Duffin7771eba2021-04-23 14:25:28 +010027var prepareForTestWithBootclasspathFragment = android.GroupFixturePreparers(
Paul Duffin837486d2021-03-23 23:13:53 +000028 PrepareForTestWithJavaDefaultModules,
29 dexpreopt.PrepareForTestByEnablingDexpreopt,
30)
31
Paul Duffin7771eba2021-04-23 14:25:28 +010032func TestUnknownBootclasspathFragment(t *testing.T) {
33 prepareForTestWithBootclasspathFragment.
Paul Duffin837486d2021-03-23 23:13:53 +000034 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
35 `\Qimage_name: Unknown image name "unknown", expected one of art, boot\E`)).
36 RunTestWithBp(t, `
Paul Duffin7771eba2021-04-23 14:25:28 +010037 bootclasspath_fragment {
38 name: "unknown-bootclasspath-fragment",
Paul Duffin837486d2021-03-23 23:13:53 +000039 image_name: "unknown",
40 }
41 `)
Paul Duffin3451e162021-01-20 15:16:56 +000042}
Paul Duffinf7f65da2021-03-10 15:00:46 +000043
Paul Duffin4b64ba02021-03-29 11:02:53 +010044func TestUnknownBootclasspathFragmentImageName(t *testing.T) {
Paul Duffin7771eba2021-04-23 14:25:28 +010045 prepareForTestWithBootclasspathFragment.
Paul Duffin4b64ba02021-03-29 11:02:53 +010046 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
47 `\Qimage_name: Unknown image name "unknown", expected one of art, boot\E`)).
48 RunTestWithBp(t, `
49 bootclasspath_fragment {
Paul Duffin7771eba2021-04-23 14:25:28 +010050 name: "unknown-bootclasspath-fragment",
Paul Duffin4b64ba02021-03-29 11:02:53 +010051 image_name: "unknown",
52 }
53 `)
54}
55
Paul Duffin7771eba2021-04-23 14:25:28 +010056func TestUnknownPrebuiltBootclasspathFragment(t *testing.T) {
57 prepareForTestWithBootclasspathFragment.
Paul Duffin837486d2021-03-23 23:13:53 +000058 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
59 `\Qimage_name: Unknown image name "unknown", expected one of art, boot\E`)).
60 RunTestWithBp(t, `
Paul Duffin7771eba2021-04-23 14:25:28 +010061 prebuilt_bootclasspath_fragment {
62 name: "unknown-bootclasspath-fragment",
Paul Duffin837486d2021-03-23 23:13:53 +000063 image_name: "unknown",
64 }
65 `)
Paul Duffinf7f65da2021-03-10 15:00:46 +000066}
Paul Duffinc7ef9892021-03-23 23:21:59 +000067
Paul Duffin7771eba2021-04-23 14:25:28 +010068func TestBootclasspathFragmentInconsistentArtConfiguration_Platform(t *testing.T) {
Paul Duffinc7ef9892021-03-23 23:21:59 +000069 android.GroupFixturePreparers(
Paul Duffin7771eba2021-04-23 14:25:28 +010070 prepareForTestWithBootclasspathFragment,
Paul Duffinc7ef9892021-03-23 23:21:59 +000071 dexpreopt.FixtureSetArtBootJars("platform:foo", "apex:bar"),
72 ).
73 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
74 `\QArtApexJars is invalid as it requests a platform variant of "foo"\E`)).
75 RunTestWithBp(t, `
Paul Duffin7771eba2021-04-23 14:25:28 +010076 bootclasspath_fragment {
77 name: "bootclasspath-fragment",
Paul Duffinc7ef9892021-03-23 23:21:59 +000078 image_name: "art",
79 apex_available: [
80 "apex",
81 ],
82 }
83 `)
84}
85
Paul Duffin7771eba2021-04-23 14:25:28 +010086func TestBootclasspathFragmentInconsistentArtConfiguration_ApexMixture(t *testing.T) {
Paul Duffinc7ef9892021-03-23 23:21:59 +000087 android.GroupFixturePreparers(
Paul Duffin7771eba2021-04-23 14:25:28 +010088 prepareForTestWithBootclasspathFragment,
Paul Duffinc7ef9892021-03-23 23:21:59 +000089 dexpreopt.FixtureSetArtBootJars("apex1:foo", "apex2:bar"),
90 ).
91 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
92 `\QArtApexJars configuration is inconsistent, expected all jars to be in the same apex but it specifies apex "apex1" and "apex2"\E`)).
93 RunTestWithBp(t, `
Paul Duffin7771eba2021-04-23 14:25:28 +010094 bootclasspath_fragment {
95 name: "bootclasspath-fragment",
Paul Duffinc7ef9892021-03-23 23:21:59 +000096 image_name: "art",
97 apex_available: [
98 "apex1",
99 "apex2",
100 ],
101 }
102 `)
103}
Paul Duffin82886d62021-03-24 01:34:57 +0000104
Paul Duffin7771eba2021-04-23 14:25:28 +0100105func TestBootclasspathFragmentWithoutImageNameOrContents(t *testing.T) {
106 prepareForTestWithBootclasspathFragment.
Paul Duffin82886d62021-03-24 01:34:57 +0000107 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
108 `\Qneither of the "image_name" and "contents" properties\E`)).
109 RunTestWithBp(t, `
Paul Duffin7771eba2021-04-23 14:25:28 +0100110 bootclasspath_fragment {
111 name: "bootclasspath-fragment",
Paul Duffin82886d62021-03-24 01:34:57 +0000112 }
113 `)
114}
115
Paul Duffinc7d16442021-04-23 13:55:49 +0100116func TestBootclasspathFragment_Coverage(t *testing.T) {
117 prepareForTestWithFrameworkCoverage := android.FixtureMergeEnv(map[string]string{
118 "EMMA_INSTRUMENT": "true",
119 "EMMA_INSTRUMENT_FRAMEWORK": "true",
120 })
121
122 prepareWithBp := android.FixtureWithRootAndroidBp(`
123 bootclasspath_fragment {
124 name: "myfragment",
125 contents: [
126 "mybootlib",
127 ],
128 coverage: {
129 contents: [
130 "coveragelib",
131 ],
132 },
133 }
134
135 java_library {
136 name: "mybootlib",
137 srcs: ["Test.java"],
138 system_modules: "none",
139 sdk_version: "none",
140 compile_dex: true,
141 }
142
143 java_library {
144 name: "coveragelib",
145 srcs: ["Test.java"],
146 system_modules: "none",
147 sdk_version: "none",
148 compile_dex: true,
149 }
150 `)
151
152 checkContents := func(t *testing.T, result *android.TestResult, expected ...string) {
153 module := result.Module("myfragment", "android_common").(*BootclasspathFragmentModule)
154 android.AssertArrayString(t, "contents property", expected, module.properties.Contents)
155 }
156
157 t.Run("without coverage", func(t *testing.T) {
158 result := android.GroupFixturePreparers(
159 prepareForTestWithBootclasspathFragment,
160 prepareWithBp,
161 ).RunTest(t)
162 checkContents(t, result, "mybootlib")
163 })
164
165 t.Run("with coverage", func(t *testing.T) {
166 result := android.GroupFixturePreparers(
167 prepareForTestWithBootclasspathFragment,
168 prepareForTestWithFrameworkCoverage,
169 prepareWithBp,
170 ).RunTest(t)
171 checkContents(t, result, "mybootlib", "coveragelib")
172 })
173}