blob: 741da4564579d3c55f224689db28b7599ea7ce96 [file] [log] [blame]
Damien Martin-Guillerezf88f4d82015-09-25 13:56:55 +00001// Copyright 2015 The Bazel Authors. All rights reserved.
Ulf Adams89179252015-04-23 18:48:39 +00002//
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.
14package com.google.devtools.build.lib.analysis;
15
Michael Staibcd48cd52016-01-15 20:11:11 +000016import static com.google.common.truth.Truth.assertThat;
Ulf Adams89179252015-04-23 18:48:39 +000017import static com.google.devtools.build.lib.packages.Attribute.attr;
michajlo660d17f2020-03-27 09:01:57 -070018import static org.junit.Assert.assertThrows;
Ulf Adams89179252015-04-23 18:48:39 +000019
Michael Staibcd48cd52016-01-15 20:11:11 +000020import com.google.common.collect.ImmutableList;
Rumou Duan6f8393f2016-11-30 16:03:10 +000021import com.google.common.collect.ImmutableSet;
gregce614dc502017-12-20 17:24:46 -080022import com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder;
jcatera666f002020-04-14 14:55:20 -070023import com.google.devtools.build.lib.analysis.config.Fragment;
gregcec7b21212017-12-21 12:40:20 -080024import com.google.devtools.build.lib.analysis.config.HostTransition;
gregce7fa23ea2018-01-18 12:46:04 -080025import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
Lukacs Berki6e91eb92015-09-21 09:12:37 +000026import com.google.devtools.build.lib.cmdline.Label;
Dmitry Lomovb5174c72017-01-10 10:57:17 +000027import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
Ulf Adams89179252015-04-23 18:48:39 +000028import com.google.devtools.build.lib.packages.AspectDefinition;
Marian Lobur702cad72015-09-02 09:53:58 +000029import com.google.devtools.build.lib.packages.AspectParameters;
Michael Staibcd48cd52016-01-15 20:11:11 +000030import com.google.devtools.build.lib.packages.Attribute;
janakra56a6ad2018-02-02 15:52:22 -080031import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
mstaib807a9b22017-09-19 17:06:32 +020032import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault;
Lukacs Berkiffa73ad2015-09-18 11:40:12 +000033import com.google.devtools.build.lib.packages.BuildType;
Michael Staibcd48cd52016-01-15 20:11:11 +000034import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
35import com.google.devtools.build.lib.packages.NativeAspectClass;
messa1bca1bd2021-05-14 00:48:19 -070036import com.google.devtools.build.lib.packages.StarlarkProvider;
37import com.google.devtools.build.lib.packages.StarlarkProviderIdentifier;
janakr9c101402018-03-10 06:48:59 -080038import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
Michael Staibcd48cd52016-01-15 20:11:11 +000039import com.google.devtools.build.lib.util.FileTypeSet;
adonovanb0174682020-05-18 16:01:53 -070040import net.starlark.java.annot.StarlarkBuiltin;
adonovan450c7ad2020-09-14 13:00:21 -070041import net.starlark.java.eval.StarlarkValue;
Ulf Adams89179252015-04-23 18:48:39 +000042import org.junit.Test;
43import org.junit.runner.RunWith;
44import org.junit.runners.JUnit4;
45
46/**
47 * Tests for aspect definitions.
48 */
49@RunWith(JUnit4.class)
50public class AspectDefinitionTest {
Dmitry Lomovdce01702016-11-28 15:51:32 +000051
ilist85e89a62020-04-24 08:52:25 -070052 private static final class P1 implements TransitiveInfoProvider {}
53
54 private static final class P2 implements TransitiveInfoProvider {}
55
56 private static final class P3 implements TransitiveInfoProvider {}
57
58 private static final class P4 implements TransitiveInfoProvider {}
59
messa1bca1bd2021-05-14 00:48:19 -070060 private static final Label FAKE_LABEL = Label.parseAbsoluteUnchecked("//fake/label.bzl");
61
62 private static final StarlarkProviderIdentifier STARLARK_P1 =
63 StarlarkProviderIdentifier.forKey(new StarlarkProvider.Key(FAKE_LABEL, "STARLARK_P1"));
64
65 private static final StarlarkProviderIdentifier STARLARK_P2 =
66 StarlarkProviderIdentifier.forKey(new StarlarkProvider.Key(FAKE_LABEL, "STARLARK_P2"));
67
68 private static final StarlarkProviderIdentifier STARLARK_P3 =
69 StarlarkProviderIdentifier.forKey(new StarlarkProvider.Key(FAKE_LABEL, "STARLARK_P3"));
70
71 private static final StarlarkProviderIdentifier STARLARK_P4 =
72 StarlarkProviderIdentifier.forKey(new StarlarkProvider.Key(FAKE_LABEL, "STARLARK_P4"));
73
Ulf Adams89179252015-04-23 18:48:39 +000074 /**
75 * A dummy aspect factory. Is there to demonstrate how to define aspects and so that we can test
76 * {@code attributeAspect}.
77 */
Luis Fernando Pino Duquee82713d2016-04-26 16:22:38 +000078 public static final class TestAspectClass extends NativeAspectClass
79 implements ConfiguredAspectFactory {
80 private AspectDefinition definition;
Ulf Adams89179252015-04-23 18:48:39 +000081
Luis Fernando Pino Duquee82713d2016-04-26 16:22:38 +000082 public void setAspectDefinition(AspectDefinition definition) {
Ulf Adams89179252015-04-23 18:48:39 +000083 this.definition = definition;
84 }
85
86 @Override
Dmitry Lomovb487ac62015-11-09 13:09:12 +000087 public ConfiguredAspect create(
dannarke75cfb32019-01-10 14:36:24 -080088 ConfiguredTargetAndData ctadBase,
89 RuleContext context,
90 AspectParameters parameters,
91 String toolsRepository) {
Ulf Adams89179252015-04-23 18:48:39 +000092 throw new IllegalStateException();
93 }
94
95 @Override
Dmitry Lomov6231d082015-11-02 17:17:20 +000096 public AspectDefinition getDefinition(AspectParameters aspectParameters) {
Ulf Adams89179252015-04-23 18:48:39 +000097 return definition;
98 }
99 }
100
Luis Fernando Pino Duquee82713d2016-04-26 16:22:38 +0000101 public static final TestAspectClass TEST_ASPECT_CLASS = new TestAspectClass();
102
Ulf Adams89179252015-04-23 18:48:39 +0000103 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700104 public void testAspectWithImplicitOrLateboundAttribute_addsToAttributeMap() throws Exception {
Michael Staibcd48cd52016-01-15 20:11:11 +0000105 Attribute implicit = attr("$runtime", BuildType.LABEL)
106 .value(Label.parseAbsoluteUnchecked("//run:time"))
Ulf Adams89179252015-04-23 18:48:39 +0000107 .build();
janakra56a6ad2018-02-02 15:52:22 -0800108 LabelLateBoundDefault<Void> latebound =
109 LateBoundDefault.fromConstantForTesting(Label.parseAbsoluteUnchecked("//run:away"));
Dmitry Lomovdce01702016-11-28 15:51:32 +0000110 AspectDefinition simple = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
Michael Staibcd48cd52016-01-15 20:11:11 +0000111 .add(implicit)
112 .add(attr(":latebound", BuildType.LABEL).value(latebound))
113 .build();
114 assertThat(simple.getAttributes()).containsEntry("$runtime", implicit);
115 assertThat(simple.getAttributes()).containsKey(":latebound");
116 assertThat(simple.getAttributes().get(":latebound").getLateBoundDefault())
117 .isEqualTo(latebound);
Ulf Adams89179252015-04-23 18:48:39 +0000118 }
119
120 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700121 public void testAspectWithDuplicateAttribute_failsToAdd() throws Exception {
jcater42edea62019-05-01 08:46:18 -0700122 assertThrows(
123 IllegalArgumentException.class,
124 () ->
125 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
126 .add(
127 attr("$runtime", BuildType.LABEL)
128 .value(Label.parseAbsoluteUnchecked("//run:time")))
129 .add(
130 attr("$runtime", BuildType.LABEL)
131 .value(Label.parseAbsoluteUnchecked("//oops"))));
Ulf Adams89179252015-04-23 18:48:39 +0000132 }
Michael Staibcd48cd52016-01-15 20:11:11 +0000133
134 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700135 public void testAspectWithUserVisibleAttribute_failsToAdd() throws Exception {
jcater42edea62019-05-01 08:46:18 -0700136 assertThrows(
137 IllegalArgumentException.class,
138 () ->
139 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
140 .add(
141 attr("invalid", BuildType.LABEL)
142 .value(Label.parseAbsoluteUnchecked("//run:time"))
143 .allowedFileTypes(FileTypeSet.NO_FILE))
144 .build());
Michael Staibcd48cd52016-01-15 20:11:11 +0000145 }
146
147 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700148 public void testAttributeAspect_wrapsAndAddsToMap() throws Exception {
Dmitry Lomovdce01702016-11-28 15:51:32 +0000149 AspectDefinition withAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
Dmitry Lomov0d380642017-01-20 14:39:55 +0000150 .propagateAlongAttribute("srcs")
151 .propagateAlongAttribute("deps")
Michael Staibcd48cd52016-01-15 20:11:11 +0000152 .build();
Dmitry Lomovbb5901b2016-09-27 08:49:26 +0000153
lberki3bd28392019-02-05 01:01:02 -0800154 assertThat(withAspects.propagateAlong("srcs")).isTrue();
155 assertThat(withAspects.propagateAlong("deps")).isTrue();
Dmitry Lomovbb5901b2016-09-27 08:49:26 +0000156 }
157
158 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700159 public void testAttributeAspect_allAttributes() throws Exception {
Dmitry Lomovdce01702016-11-28 15:51:32 +0000160 AspectDefinition withAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
Dmitry Lomov0d380642017-01-20 14:39:55 +0000161 .propagateAlongAllAttributes()
Dmitry Lomovbb5901b2016-09-27 08:49:26 +0000162 .build();
163
lberki3bd28392019-02-05 01:01:02 -0800164 assertThat(withAspects.propagateAlong("srcs")).isTrue();
165 assertThat(withAspects.propagateAlong("deps")).isTrue();
Michael Staibcd48cd52016-01-15 20:11:11 +0000166 }
167
168 @Test
messa1bca1bd2021-05-14 00:48:19 -0700169 public void testRequireBuiltinProviders_addsToSetOfRequiredProvidersAndNames() throws Exception {
ilist85e89a62020-04-24 08:52:25 -0700170 AspectDefinition requiresProviders =
171 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
172 .requireProviders(P1.class, P2.class)
173 .build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000174 AdvertisedProviderSet expectedOkSet =
175 AdvertisedProviderSet.builder()
adonovandd000462020-11-06 12:57:38 -0800176 .addBuiltin(P1.class)
177 .addBuiltin(P2.class)
178 .addBuiltin(P3.class)
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000179 .build();
180 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet))
181 .isTrue();
182
183 AdvertisedProviderSet expectedFailSet =
adonovandd000462020-11-06 12:57:38 -0800184 AdvertisedProviderSet.builder().addBuiltin(P1.class).build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000185 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet))
186 .isFalse();
Dmitry Lomovf868b3e2017-01-17 10:25:28 +0000187
188 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
189 .isTrue();
190 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
191 .isFalse();
Michael Staibcd48cd52016-01-15 20:11:11 +0000192 }
193
jmmvbfbd95f2020-08-31 13:12:38 -0700194 @Test
messa1bca1bd2021-05-14 00:48:19 -0700195 public void testRequireBuiltinProviders_addsTwoSetsOfRequiredProvidersAndNames()
196 throws Exception {
ilist85e89a62020-04-24 08:52:25 -0700197 AspectDefinition requiresProviders =
198 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
199 .requireProviderSets(
200 ImmutableList.of(ImmutableSet.of(P1.class, P2.class), ImmutableSet.of(P3.class)))
201 .build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000202
203 AdvertisedProviderSet expectedOkSet1 =
adonovandd000462020-11-06 12:57:38 -0800204 AdvertisedProviderSet.builder().addBuiltin(P1.class).addBuiltin(P2.class).build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000205
206 AdvertisedProviderSet expectedOkSet2 =
adonovandd000462020-11-06 12:57:38 -0800207 AdvertisedProviderSet.builder().addBuiltin(P3.class).build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000208
209 AdvertisedProviderSet expectedFailSet =
adonovandd000462020-11-06 12:57:38 -0800210 AdvertisedProviderSet.builder().addBuiltin(P4.class).build();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000211
Dmitry Lomovf868b3e2017-01-17 10:25:28 +0000212 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
213 .isTrue();
Dmitry Lomovb5174c72017-01-10 10:57:17 +0000214 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet1)).isTrue();
215 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet2)).isTrue();
216 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet)).isFalse();
Dmitry Lomovf868b3e2017-01-17 10:25:28 +0000217 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
218 .isFalse();
219
220 }
221
222 @Test
messa1bca1bd2021-05-14 00:48:19 -0700223 public void testRequireStarlarkProviders_addsFlatSetOfRequiredProviders() throws Exception {
224 AspectDefinition requiresProviders =
225 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
226 .requireStarlarkProviders(STARLARK_P1, STARLARK_P2)
227 .build();
228
229 AdvertisedProviderSet expectedOkSet =
230 AdvertisedProviderSet.builder()
231 .addStarlark(STARLARK_P1)
232 .addStarlark(STARLARK_P2)
233 .addStarlark(STARLARK_P3)
234 .build();
235 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet)).isTrue();
236
237 AdvertisedProviderSet expectedFailSet =
238 AdvertisedProviderSet.builder().addStarlark(STARLARK_P1).build();
239 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet)).isFalse();
240
241 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
242 .isTrue();
243 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
244 .isFalse();
245 }
246
247 @Test
248 public void testRequireStarlarkProviders_addsTwoSetsOfRequiredProviders() throws Exception {
249 AspectDefinition requiresProviders =
250 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
251 .requireStarlarkProviderSets(
252 ImmutableList.of(
253 ImmutableSet.of(STARLARK_P1, STARLARK_P2), ImmutableSet.of(STARLARK_P3)))
254 .build();
255
256 AdvertisedProviderSet expectedOkSet1 =
257 AdvertisedProviderSet.builder().addStarlark(STARLARK_P1).addStarlark(STARLARK_P2).build();
258 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet1)).isTrue();
259
260 AdvertisedProviderSet expectedOkSet2 =
261 AdvertisedProviderSet.builder().addStarlark(STARLARK_P3).build();
262 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet2)).isTrue();
263
264 AdvertisedProviderSet expectedFailSet =
265 AdvertisedProviderSet.builder().addStarlark(STARLARK_P4).build();
266 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet)).isFalse();
267
268 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
269 .isTrue();
270 assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
271 .isFalse();
272 }
273
274 @Test
275 public void testRequireProviders_defaultAcceptsEverything() {
276 AspectDefinition noRequiredProviders = new AspectDefinition.Builder(TEST_ASPECT_CLASS).build();
277
278 AdvertisedProviderSet expectedOkSet =
279 AdvertisedProviderSet.builder().addBuiltin(P4.class).addStarlark(STARLARK_P4).build();
280 assertThat(noRequiredProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet)).isTrue();
281
282 assertThat(noRequiredProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
283 .isTrue();
284 assertThat(
285 noRequiredProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
286 .isTrue();
287 }
288
289 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700290 public void testRequireAspectClass_defaultAcceptsNothing() {
Dmitry Lomovf868b3e2017-01-17 10:25:28 +0000291 AspectDefinition noAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
292 .build();
293
294 AdvertisedProviderSet expectedFailSet =
adonovandd000462020-11-06 12:57:38 -0800295 AdvertisedProviderSet.builder().addBuiltin(P4.class).build();
Dmitry Lomovf868b3e2017-01-17 10:25:28 +0000296
297 assertThat(noAspects.getRequiredProvidersForAspects().isSatisfiedBy(AdvertisedProviderSet.ANY))
298 .isFalse();
299 assertThat(noAspects.getRequiredProvidersForAspects()
300 .isSatisfiedBy(AdvertisedProviderSet.EMPTY))
301 .isFalse();
302
303 assertThat(noAspects.getRequiredProvidersForAspects().isSatisfiedBy(expectedFailSet))
304 .isFalse();
Rumou Duan6f8393f2016-11-30 16:03:10 +0000305 }
306
Michael Staibcd48cd52016-01-15 20:11:11 +0000307 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700308 public void testNoConfigurationFragmentPolicySetup_hasNonNullPolicy() throws Exception {
Dmitry Lomovdce01702016-11-28 15:51:32 +0000309 AspectDefinition noPolicy = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
Michael Staibcd48cd52016-01-15 20:11:11 +0000310 .build();
Michael Staibaf270462016-05-18 16:22:07 +0000311 assertThat(noPolicy.getConfigurationFragmentPolicy()).isNotNull();
Michael Staibcd48cd52016-01-15 20:11:11 +0000312 }
313
314 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700315 public void testRequiresConfigurationFragments_propagatedToConfigurationFragmentPolicy()
Michael Staibcd48cd52016-01-15 20:11:11 +0000316 throws Exception {
Dmitry Lomovdce01702016-11-28 15:51:32 +0000317 AspectDefinition requiresFragments = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
Michael Staibcd48cd52016-01-15 20:11:11 +0000318 .requiresConfigurationFragments(Integer.class, String.class)
319 .build();
320 assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull();
321 assertThat(
322 requiresFragments.getConfigurationFragmentPolicy().getRequiredConfigurationFragments())
323 .containsExactly(Integer.class, String.class);
324 }
325
jcatera666f002020-04-14 14:55:20 -0700326 private static class FooFragment extends Fragment {}
327
328 private static class BarFragment extends Fragment {}
gregce614dc502017-12-20 17:24:46 -0800329
Michael Staibcd48cd52016-01-15 20:11:11 +0000330 @Test
twigg8e9f9e12020-09-17 09:07:58 -0700331 public void testMissingFragmentPolicy_propagatedToConfigurationFragmentPolicy() throws Exception {
332 AspectDefinition missingFragments =
333 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
334 .setMissingFragmentPolicy(FooFragment.class, MissingFragmentPolicy.IGNORE)
335 .build();
336 assertThat(missingFragments.getConfigurationFragmentPolicy()).isNotNull();
337 assertThat(
338 missingFragments
339 .getConfigurationFragmentPolicy()
340 .getMissingFragmentPolicy(FooFragment.class))
341 .isEqualTo(MissingFragmentPolicy.IGNORE);
342 }
343
344 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700345 public void testRequiresHostConfigurationFragments_propagatedToConfigurationFragmentPolicy()
Michael Staibcd48cd52016-01-15 20:11:11 +0000346 throws Exception {
gregce614dc502017-12-20 17:24:46 -0800347 AspectDefinition requiresFragments =
348 ConfigAwareAspectBuilder.of(new AspectDefinition.Builder(TEST_ASPECT_CLASS))
349 .requiresHostConfigurationFragments(FooFragment.class, BarFragment.class)
350 .originalBuilder()
351 .build();
Michael Staibcd48cd52016-01-15 20:11:11 +0000352 assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull();
353 assertThat(
354 requiresFragments.getConfigurationFragmentPolicy().getRequiredConfigurationFragments())
gregce614dc502017-12-20 17:24:46 -0800355 .containsExactly(FooFragment.class, BarFragment.class);
Michael Staibcd48cd52016-01-15 20:11:11 +0000356 }
357
358 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700359 public void testRequiresConfigurationFragmentNames_propagatedToConfigurationFragmentPolicy()
Michael Staibcd48cd52016-01-15 20:11:11 +0000360 throws Exception {
gregce220a1c82020-05-01 10:19:52 -0700361 AspectDefinition requiresFragments =
362 new AspectDefinition.Builder(TEST_ASPECT_CLASS)
363 .requiresConfigurationFragmentsByStarlarkBuiltinName(ImmutableList.of("test_fragment"))
364 .build();
Michael Staibcd48cd52016-01-15 20:11:11 +0000365 assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull();
366 assertThat(
367 requiresFragments.getConfigurationFragmentPolicy()
gregce7fa23ea2018-01-18 12:46:04 -0800368 .isLegalConfigurationFragment(TestFragment.class, NoTransition.INSTANCE))
Michael Staibcd48cd52016-01-15 20:11:11 +0000369 .isTrue();
370 }
371
372 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700373 public void testRequiresHostConfigurationFragmentNames_propagatedToConfigurationFragmentPolicy()
Michael Staibcd48cd52016-01-15 20:11:11 +0000374 throws Exception {
gregce614dc502017-12-20 17:24:46 -0800375 AspectDefinition requiresFragments =
376 ConfigAwareAspectBuilder.of(new AspectDefinition.Builder(TEST_ASPECT_CLASS))
gregce220a1c82020-05-01 10:19:52 -0700377 .requiresHostConfigurationFragmentsByStarlarkBuiltinName(
gregce614dc502017-12-20 17:24:46 -0800378 ImmutableList.of("test_fragment"))
379 .originalBuilder()
380 .build();
Michael Staibcd48cd52016-01-15 20:11:11 +0000381 assertThat(requiresFragments.getConfigurationFragmentPolicy()).isNotNull();
382 assertThat(
383 requiresFragments.getConfigurationFragmentPolicy()
gregcec7b21212017-12-21 12:40:20 -0800384 .isLegalConfigurationFragment(TestFragment.class, HostTransition.INSTANCE))
Michael Staibcd48cd52016-01-15 20:11:11 +0000385 .isTrue();
386 }
387
388 @Test
jmmvbfbd95f2020-08-31 13:12:38 -0700389 public void testEmptyStarlarkConfigurationFragmentPolicySetup_hasNonNullPolicy()
gregceb100b1d2020-05-20 10:22:17 -0700390 throws Exception {
gregce614dc502017-12-20 17:24:46 -0800391 AspectDefinition noPolicy =
392 ConfigAwareAspectBuilder.of(new AspectDefinition.Builder(TEST_ASPECT_CLASS))
gregce220a1c82020-05-01 10:19:52 -0700393 .requiresHostConfigurationFragmentsByStarlarkBuiltinName(ImmutableList.<String>of())
gregce614dc502017-12-20 17:24:46 -0800394 .originalBuilder()
gregce220a1c82020-05-01 10:19:52 -0700395 .requiresConfigurationFragmentsByStarlarkBuiltinName(ImmutableList.<String>of())
gregce614dc502017-12-20 17:24:46 -0800396 .build();
Michael Staibaf270462016-05-18 16:22:07 +0000397 assertThat(noPolicy.getConfigurationFragmentPolicy()).isNotNull();
Michael Staibcd48cd52016-01-15 20:11:11 +0000398 }
399
gregce220a1c82020-05-01 10:19:52 -0700400 @StarlarkBuiltin(name = "test_fragment", doc = "test fragment")
Googler34f70582019-11-25 12:27:34 -0800401 private static final class TestFragment implements StarlarkValue {}
Ulf Adams89179252015-04-23 18:48:39 +0000402}