@Test public void withConfigurationAndAspects_BasicAccessors() throws Exception { update(); AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT); AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT); ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect); Dependency targetDep = Dependency.withConfigurationAndAspects( Label.parseAbsolute("//a"), getTargetConfiguration(), twoAspects); assertThat(targetDep.getLabel()).isEqualTo(Label.parseAbsolute("//a")); assertThat(targetDep.hasStaticConfiguration()).isTrue(); assertThat(targetDep.getConfiguration()).isEqualTo(getTargetConfiguration()); assertThat(targetDep.getAspects()).containsExactlyElementsIn(twoAspects); assertThat(targetDep.getAspectConfigurations()) .containsExactlyEntriesIn( ImmutableMap.of( simpleAspect, getTargetConfiguration(), attributeAspect, getTargetConfiguration())); try { targetDep.getTransition(); fail("withConfigurationAndAspects-created Dependencies should throw ISE on getTransition()"); } catch (IllegalStateException ex) { // good. that's what I WANTED to happen. } }
@Test public void withConfigurationAndAspects_AllowsEmptyAspectSet() throws Exception { update(); Dependency dep = Dependency.withConfigurationAndAspects( Label.parseAbsolute("//a"), getTargetConfiguration(), ImmutableSet.<AspectDescriptor>of()); // Here we're also checking that this doesn't throw an exception. No boom? OK. Good. assertThat(dep.getAspects()).isEmpty(); assertThat(dep.getAspectConfigurations()).isEmpty(); }
@Test public void withConfigurationAndAspects_RejectsNullAspectsWithNPE() throws Exception { update(); Set<AspectDescriptor> nullSet = new LinkedHashSet<>(); nullSet.add(null); try { Dependency.withConfigurationAndAspects( Label.parseAbsolute("//a"), getTargetConfiguration(), nullSet); fail("should not be allowed to create a dependency with a null aspect"); } catch (NullPointerException expected) { // good. just as planned. } }
@Test public void withConfigurationAndAspects_RejectsNullConfigWithNPE() throws Exception { // Although the NullPointerTester should check this, this test invokes a different code path, // because it includes aspects (which the NPT test will not). AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT); AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT); ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect); try { Dependency.withConfigurationAndAspects(Label.parseAbsolute("//a"), null, twoAspects); fail("should not be allowed to create a dependency with a null configuration"); } catch (NullPointerException expected) { // good. you fell rrrrright into my trap. } }
@Test public void equalsPassesEqualsTester() throws Exception { update(); Label a = Label.parseAbsolute("//a"); Label aExplicit = Label.parseAbsolute("//a:a"); Label b = Label.parseAbsolute("//b"); BuildConfiguration host = getHostConfiguration(); BuildConfiguration target = getTargetConfiguration(); AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT); AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT); AspectDescriptor errorAspect = new AspectDescriptor(TestAspects.ERROR_ASPECT); ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect); ImmutableSet<AspectDescriptor> inverseAspects = ImmutableSet.of(attributeAspect, simpleAspect); ImmutableSet<AspectDescriptor> differentAspects = ImmutableSet.of(attributeAspect, errorAspect); ImmutableSet<AspectDescriptor> noAspects = ImmutableSet.<AspectDescriptor>of(); ImmutableMap<AspectDescriptor, BuildConfiguration> twoAspectsHostMap = ImmutableMap.of(simpleAspect, host, attributeAspect, host); ImmutableMap<AspectDescriptor, BuildConfiguration> twoAspectsTargetMap = ImmutableMap.of(simpleAspect, target, attributeAspect, target); ImmutableMap<AspectDescriptor, BuildConfiguration> differentAspectsHostMap = ImmutableMap.of(attributeAspect, host, errorAspect, host); ImmutableMap<AspectDescriptor, BuildConfiguration> differentAspectsTargetMap = ImmutableMap.of(attributeAspect, target, errorAspect, target); ImmutableMap<AspectDescriptor, BuildConfiguration> noAspectsMap = ImmutableMap.<AspectDescriptor, BuildConfiguration>of(); new EqualsTester() .addEqualityGroup( // base set: //a, host configuration, normal aspect set Dependency.withConfigurationAndAspects(a, host, twoAspects), Dependency.withConfigurationAndAspects(aExplicit, host, twoAspects), Dependency.withConfigurationAndAspects(a, host, inverseAspects), Dependency.withConfigurationAndAspects(aExplicit, host, inverseAspects), Dependency.withConfiguredAspects(a, host, twoAspectsHostMap), Dependency.withConfiguredAspects(aExplicit, host, twoAspectsHostMap)) .addEqualityGroup( // base set but with label //b Dependency.withConfigurationAndAspects(b, host, twoAspects), Dependency.withConfigurationAndAspects(b, host, inverseAspects), Dependency.withConfiguredAspects(b, host, twoAspectsHostMap)) .addEqualityGroup( // base set but with target configuration Dependency.withConfigurationAndAspects(a, target, twoAspects), Dependency.withConfigurationAndAspects(aExplicit, target, twoAspects), Dependency.withConfigurationAndAspects(a, target, inverseAspects), Dependency.withConfigurationAndAspects(aExplicit, target, inverseAspects), Dependency.withConfiguredAspects(a, target, twoAspectsTargetMap), Dependency.withConfiguredAspects(aExplicit, target, twoAspectsTargetMap)) .addEqualityGroup( // base set but with null configuration Dependency.withNullConfiguration(a), Dependency.withNullConfiguration(aExplicit)) .addEqualityGroup( // base set but with different aspects Dependency.withConfigurationAndAspects(a, host, differentAspects), Dependency.withConfigurationAndAspects(aExplicit, host, differentAspects), Dependency.withConfiguredAspects(a, host, differentAspectsHostMap), Dependency.withConfiguredAspects(aExplicit, host, differentAspectsHostMap)) .addEqualityGroup( // base set but with label //b and target configuration Dependency.withConfigurationAndAspects(b, target, twoAspects), Dependency.withConfigurationAndAspects(b, target, inverseAspects), Dependency.withConfiguredAspects(b, target, twoAspectsTargetMap)) .addEqualityGroup( // base set but with label //b and null configuration Dependency.withNullConfiguration(b)) .addEqualityGroup( // base set but with label //b and different aspects Dependency.withConfigurationAndAspects(b, host, differentAspects), Dependency.withConfiguredAspects(b, host, differentAspectsHostMap)) .addEqualityGroup( // base set but with target configuration and different aspects Dependency.withConfigurationAndAspects(a, target, differentAspects), Dependency.withConfigurationAndAspects(aExplicit, target, differentAspects), Dependency.withConfiguredAspects(a, target, differentAspectsTargetMap), Dependency.withConfiguredAspects(aExplicit, target, differentAspectsTargetMap)) .addEqualityGroup( // inverse of base set: //b, target configuration, different aspects Dependency.withConfigurationAndAspects(b, target, differentAspects), Dependency.withConfiguredAspects(b, target, differentAspectsTargetMap)) .addEqualityGroup( // base set but with no aspects Dependency.withConfiguration(a, host), Dependency.withConfiguration(aExplicit, host), Dependency.withConfigurationAndAspects(a, host, noAspects), Dependency.withConfigurationAndAspects(aExplicit, host, noAspects), Dependency.withConfiguredAspects(a, host, noAspectsMap), Dependency.withConfiguredAspects(aExplicit, host, noAspectsMap)) .addEqualityGroup( // base set but with label //b and no aspects Dependency.withConfiguration(b, host), Dependency.withConfigurationAndAspects(b, host, noAspects), Dependency.withConfiguredAspects(b, host, noAspectsMap)) .addEqualityGroup( // base set but with target configuration and no aspects Dependency.withConfiguration(a, target), Dependency.withConfiguration(aExplicit, target), Dependency.withConfigurationAndAspects(a, target, noAspects), Dependency.withConfigurationAndAspects(aExplicit, target, noAspects), Dependency.withConfiguredAspects(a, target, noAspectsMap), Dependency.withConfiguredAspects(aExplicit, target, noAspectsMap)) .addEqualityGroup( // inverse of base set: //b, target configuration, no aspects Dependency.withConfiguration(b, target), Dependency.withConfigurationAndAspects(b, target, noAspects), Dependency.withConfiguredAspects(b, target, noAspectsMap)) .addEqualityGroup( // base set but with transition HOST Dependency.withTransitionAndAspects(a, ConfigurationTransition.HOST, twoAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.HOST, twoAspects), Dependency.withTransitionAndAspects(a, ConfigurationTransition.HOST, inverseAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.HOST, inverseAspects)) .addEqualityGroup( // base set but with transition HOST and different aspects Dependency.withTransitionAndAspects(a, ConfigurationTransition.HOST, differentAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.HOST, differentAspects)) .addEqualityGroup( // base set but with transition HOST and label //b Dependency.withTransitionAndAspects(b, ConfigurationTransition.HOST, twoAspects), Dependency.withTransitionAndAspects(b, ConfigurationTransition.HOST, inverseAspects)) .addEqualityGroup( // inverse of base set: transition HOST, label //b, different aspects Dependency.withTransitionAndAspects(b, ConfigurationTransition.HOST, differentAspects), Dependency.withTransitionAndAspects(b, ConfigurationTransition.HOST, differentAspects)) .addEqualityGroup( // base set but with transition NONE Dependency.withTransitionAndAspects(a, ConfigurationTransition.NONE, twoAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.NONE, twoAspects), Dependency.withTransitionAndAspects(a, ConfigurationTransition.NONE, inverseAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.NONE, inverseAspects)) .addEqualityGroup( // base set but with transition NONE and different aspects Dependency.withTransitionAndAspects(a, ConfigurationTransition.NONE, differentAspects), Dependency.withTransitionAndAspects( aExplicit, ConfigurationTransition.NONE, differentAspects)) .addEqualityGroup( // base set but with transition NONE and label //b Dependency.withTransitionAndAspects(b, ConfigurationTransition.NONE, twoAspects), Dependency.withTransitionAndAspects(b, ConfigurationTransition.NONE, inverseAspects)) .addEqualityGroup( // inverse of base set: transition NONE, label //b, different aspects Dependency.withTransitionAndAspects(b, ConfigurationTransition.NONE, differentAspects), Dependency.withTransitionAndAspects(b, ConfigurationTransition.NONE, differentAspects)) .testEquals(); }