EntityAsserts { public static <T> T assertAttributeEventually(final Entity entity, final AttributeSensor<T> attribute, Predicate<? super T> predicate) { return assertAttributeEventually(ImmutableMap.of(), entity, attribute, predicate); }  static void assertAttributeEquals(Entity entity, AttributeSensor<T> attribute, T expected); static void assertConfigEquals(Entity entity, ConfigKey<T> configKey, T expected); static void assertAttributeEqualsEventually(final Entity entity, final AttributeSensor<T> attribute, final T expected); static void assertAttributeEqualsEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected); static T assertAttributeEventuallyNonNull(final Entity entity, final AttributeSensor<T> attribute); static T assertAttributeEventuallyNonNull(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute); static T assertAttributeEventually(final Entity entity, final AttributeSensor<T> attribute, Predicate<? super T> predicate); static T assertAttributeEventually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate); static T assertAttribute(final Entity entity, final AttributeSensor<T> attribute, final Predicate<? super T> predicate); static void assertPredicateEventuallyTrue(final T entity, final Predicate<? super T> predicate); static void assertPredicateEventuallyTrue(Map<?,?> flags, final T entity, final Predicate<? super T> predicate); static void assertAttributeEqualsContinually(final Entity entity, final AttributeSensor<T> attribute, final T expected); static void assertAttributeEqualsContinually(Map<?,?> flags, final Entity entity, final AttributeSensor<T> attribute, final T expected); static void assertGroupSizeEqualsEventually(final Group group, int expected); static void assertGroupSizeEqualsEventually(Map<?,?> flags, final Group group, final int expected); static void assertAttributeChangesEventually(final Entity entity, final AttributeSensor<?> attribute); @Beta @SafeVarargs static void assertAttributeContinuallyNotEqualTo(final Entity entity, final AttributeSensor<T> attribute, T... disallowed); @Beta @SafeVarargs static void assertAttributeContinuallyNotEqualTo(final Map<?, ?> flags, final Entity entity, final AttributeSensor<T> attribute, T... disallowed); static void assertEntityHealthy(Entity entity); static void assertEntityHealthyEventually(Entity entity); @Beta static void assertEntityFailed(Entity entity);  }
@Test public void shouldAssertAttributeEventually() throws Exception { final CountDownLatch eventuallyEntered = new CountDownLatch(2); Task<?> assertValue = entity.getExecutionContext().submit("assert attribute", () -> EntityAsserts.assertAttributeEventually(entity, TestEntity.NAME, (input) -> { eventuallyEntered.countDown(); return input.matches(".*\\d+"); }) ); eventuallyEntered.await(); entity.sensors().set(TestEntity.NAME, "testing testing 123"); assertValue.get(); }