|
17 | 17 | import static com.google.devtools.build.lib.packages.Attribute.attr; |
18 | 18 | import static com.google.devtools.build.lib.packages.BuildType.LABEL; |
19 | 19 | import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; |
| 20 | +import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL; |
20 | 21 | import static com.google.devtools.build.lib.packages.Type.INTEGER; |
21 | 22 | import static com.google.devtools.build.lib.packages.Type.STRING; |
22 | 23 | import static com.google.devtools.build.lib.packages.Type.STRING_LIST; |
23 | 24 | import static org.junit.Assert.assertThrows; |
24 | 25 |
|
25 | 26 | import com.google.common.base.Predicates; |
26 | 27 | import com.google.common.collect.ImmutableMap; |
| 28 | +import com.google.common.testing.EqualsTester; |
| 29 | +import com.google.devtools.build.lib.analysis.DefaultInfo; |
27 | 30 | import com.google.devtools.build.lib.analysis.config.BuildOptions; |
28 | 31 | import com.google.devtools.build.lib.analysis.config.BuildOptionsView; |
29 | 32 | import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory; |
|
34 | 37 | import com.google.devtools.build.lib.analysis.util.TestAspects; |
35 | 38 | import com.google.devtools.build.lib.cmdline.Label; |
36 | 39 | import com.google.devtools.build.lib.events.EventHandler; |
| 40 | +import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet; |
37 | 41 | import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate; |
38 | 42 | import com.google.devtools.build.lib.testutil.FakeAttributeMapper; |
39 | 43 | import com.google.devtools.build.lib.util.FileType; |
@@ -325,4 +329,77 @@ public void allowedRuleClassesAndAllowedRuleClassesWithWarningsCannotOverlap() { |
325 | 329 | .build()); |
326 | 330 | assertThat(e).hasMessageThat().contains("may not contain the same rule classes"); |
327 | 331 | } |
| 332 | + |
| 333 | + @Test |
| 334 | + public void factoryEquality() throws Exception { |
| 335 | + new EqualsTester() |
| 336 | + .addEqualityGroup(attr("foo", LABEL).buildPartial(), attr("foo", LABEL).buildPartial()) |
| 337 | + .addEqualityGroup( |
| 338 | + attr("foo", LABEL).value(Label.parseCanonicalUnchecked("//a:b")).buildPartial(), |
| 339 | + attr("foo", LABEL).value(Label.parseCanonicalUnchecked("//a:b")).buildPartial()) |
| 340 | + .addEqualityGroup( |
| 341 | + attr("foo", NODEP_LABEL).value(Label.parseCanonicalUnchecked("//a:b")).buildPartial(), |
| 342 | + attr("foo", NODEP_LABEL).value(Label.parseCanonicalUnchecked("//a:b")).buildPartial()) |
| 343 | + .addEqualityGroup( |
| 344 | + attr("foo", LABEL).value(Label.parseCanonicalUnchecked("//c:d")).buildPartial(), |
| 345 | + attr("foo", LABEL).value(Label.parseCanonicalUnchecked("//c:d")).buildPartial()) |
| 346 | + .addEqualityGroup( |
| 347 | + attr("foo", LABEL) |
| 348 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 349 | + .setDoc("My doc") |
| 350 | + .buildPartial(), |
| 351 | + attr("foo", LABEL) |
| 352 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 353 | + .setDoc("My doc") |
| 354 | + .buildPartial()) |
| 355 | + .addEqualityGroup( |
| 356 | + // PredicateWithMessage does not define any particular equality semantics |
| 357 | + attr("foo", LABEL) |
| 358 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 359 | + .allowedValues(new AllowedValueSet(Label.parseCanonical("//a:b"))) |
| 360 | + .buildPartial()) |
| 361 | + .addEqualityGroup( |
| 362 | + attr("foo", LABEL) |
| 363 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 364 | + .validityPredicate(Attribute.ANY_EDGE) |
| 365 | + .buildPartial(), |
| 366 | + attr("foo", LABEL) |
| 367 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 368 | + .validityPredicate(Attribute.ANY_EDGE) |
| 369 | + .buildPartial()) |
| 370 | + .addEqualityGroup( |
| 371 | + attr("foo", LABEL) |
| 372 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 373 | + .allowedRuleClasses("java_binary") |
| 374 | + .buildPartial(), |
| 375 | + attr("foo", LABEL) |
| 376 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 377 | + .allowedRuleClasses("java_binary") |
| 378 | + .buildPartial()) |
| 379 | + .addEqualityGroup( |
| 380 | + attr("foo", LABEL) |
| 381 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 382 | + .allowedFileTypes(FileTypeSet.ANY_FILE) |
| 383 | + .buildPartial(), |
| 384 | + attr("foo", LABEL) |
| 385 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 386 | + .allowedFileTypes(FileTypeSet.ANY_FILE) |
| 387 | + .buildPartial()) |
| 388 | + .addEqualityGroup( |
| 389 | + attr("foo", LABEL) |
| 390 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 391 | + .mandatoryProviders(DefaultInfo.PROVIDER.id()) |
| 392 | + .buildPartial(), |
| 393 | + attr("foo", LABEL) |
| 394 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 395 | + .mandatoryProviders(DefaultInfo.PROVIDER.id()) |
| 396 | + .buildPartial()) |
| 397 | + .addEqualityGroup( |
| 398 | + // Aspects list builder does not define any particular equality semantics |
| 399 | + attr("foo", LABEL) |
| 400 | + .value(Label.parseCanonicalUnchecked("//a:b")) |
| 401 | + .aspect(TestAspects.SIMPLE_ASPECT) |
| 402 | + .buildPartial()) |
| 403 | + .testEquals(); |
| 404 | + } |
328 | 405 | } |
0 commit comments