@Override public DefaultStepVerifierBuilder<T> expectSubscriptionMatches( Predicate<? super Subscription> predicate) { Objects.requireNonNull(predicate, "predicate"); this.script.set(0, new SignalEvent<>((signal, se) -> { if (!signal.isOnSubscribe()) { return errorFormatter.failOptional(se, "expected: onSubscribe(); actual: %s", signal); } else if (!predicate.test(signal.getSubscription())) { return errorFormatter.failOptional(se, "predicate failed on subscription: %s", signal.getSubscription()); } else { return Optional.empty(); } }, "expectSubscriptionMatches")); return this; }
@Override public DefaultStepVerifierBuilder<T> consumeSubscriptionWith( Consumer<? super Subscription> consumer) { Objects.requireNonNull(consumer, "consumer"); if(script.isEmpty() || (script.size() == 1 && script.get(0) == defaultFirstStep)) { this.script.set(0, new SignalEvent<>((signal, se) -> { if (!signal.isOnSubscribe()) { return errorFormatter.failOptional(se, "expected: onSubscribe(); actual: %s", signal); } else { consumer.accept(signal.getSubscription()); return Optional.empty(); } }, "consumeSubscriptionWith")); } else { this.script.add(new SubscriptionConsumerEvent<>(consumer, "consumeSubscriptionWith")); } return this; }
@Override public boolean equals(@Nullable Object o) { if (this == o) { return true; } if (o == null || !(o instanceof Signal)) { return false; } Signal<?> signal = (Signal<?>) o; if (getType() != signal.getType()) { return false; } if (isOnComplete()) { return true; } if (isOnSubscribe()) { return Objects.equals(this.getSubscription(), signal.getSubscription()); } if (isOnError()) { return Objects.equals(this.getThrowable(), signal.getThrowable()); } if (isOnNext()) { return Objects.equals(this.get(), signal.get()); } return false; }
/** * Propagate the signal represented by this {@link Signal} instance to a * given {@link Subscriber}. * * @param observer the {@link Subscriber} to play the {@link Signal} on */ @Override default void accept(Subscriber<? super T> observer) { if (isOnNext()) { observer.onNext(get()); } else if (isOnComplete()) { observer.onComplete(); } else if (isOnError()) { observer.onError(getThrowable()); } else if (isOnSubscribe()) { observer.onSubscribe(getSubscription()); } } }
@Test public void subscribeState(){ Signal<Integer> s = Signal.subscribe(Operators.emptySubscription()); assertThat(s.isOnComplete()).isFalse(); assertThat(s.isOnSubscribe()).isTrue(); assertThat(s.hasError()).isFalse(); assertThat(s.hasValue()).isFalse(); assertThat(s).isEqualTo(Signal.subscribe(Operators.emptySubscription())); assertThat(s).isNotEqualTo(Signal.subscribe(Operators.cancelledSubscription())); assertThat(s).isNotEqualTo(Signal.next(1)); assertThat(s).isNotEqualTo(Signal.error(e)); assertThat(s).isNotEqualTo(Signal.complete()); assertThat(s.hashCode()).isEqualTo(Signal.subscribe(Operators.emptySubscription()).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.subscribe(Operators.cancelledSubscription()).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.next(1).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.error(e).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.complete().hashCode()); assertThat(Signal.isComplete(s)).isFalse(); assertThat(Signal.isError(s)).isFalse(); assertThat(s.getSubscription()).isEqualTo(Operators.emptySubscription()); assertThat(s.getType()).isEqualTo(SignalType.ON_SUBSCRIBE); assertThat(s.toString()).contains("onSubscribe"); StepVerifier.create(Flux.<Integer>from(s::accept)) .expectSubscription() .thenCancel() .verify(); }
@Test public void subscribeStateWithContext(){ Context context = Context.of("foo", "bar"); Signal<Integer> s = Signal.subscribe(Operators.emptySubscription(), context); assertThat(s.getContext().isEmpty()).as("has context").isFalse(); assertThat(s.isOnComplete()).isFalse(); assertThat(s.isOnSubscribe()).isTrue(); assertThat(s.hasError()).isFalse(); assertThat(s.hasValue()).isFalse(); assertThat(s).isEqualTo(Signal.subscribe(Operators.emptySubscription())); assertThat(s).isNotEqualTo(Signal.subscribe(Operators.cancelledSubscription())); assertThat(s).isNotEqualTo(Signal.next(1)); assertThat(s).isNotEqualTo(Signal.error(e)); assertThat(s).isNotEqualTo(Signal.complete()); assertThat(s.hashCode()).isEqualTo(Signal.subscribe(Operators.emptySubscription()).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.subscribe(Operators.cancelledSubscription()).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.next(1).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.error(e).hashCode()); assertThat(s.hashCode()).isNotEqualTo(Signal.complete().hashCode()); assertThat(Signal.isComplete(s)).isFalse(); assertThat(Signal.isError(s)).isFalse(); assertThat(s.getSubscription()).isEqualTo(Operators.emptySubscription()); assertThat(s.getType()).isEqualTo(SignalType.ON_SUBSCRIBE); assertThat(s.toString()).contains("onSubscribe"); StepVerifier.create(Flux.<Integer>from(s::accept)) .expectSubscription() .thenCancel() .verify(); } @Test
@Override public DefaultStepVerifierBuilder<T> expectSubscriptionMatches( Predicate<? super Subscription> predicate) { Objects.requireNonNull(predicate, "predicate"); this.script.set(0, new SignalEvent<>((signal, se) -> { if (!signal.isOnSubscribe()) { return errorFormatter.failOptional(se, "expected: onSubscribe(); actual: %s", signal); } else if (!predicate.test(signal.getSubscription())) { return errorFormatter.failOptional(se, "predicate failed on subscription: %s", signal.getSubscription()); } else { return Optional.empty(); } }, "expectSubscriptionMatches")); return this; }
@Override public DefaultStepVerifierBuilder<T> consumeSubscriptionWith( Consumer<? super Subscription> consumer) { Objects.requireNonNull(consumer, "consumer"); if(script.isEmpty() || (script.size() == 1 && script.get(0) == defaultFirstStep)) { this.script.set(0, new SignalEvent<>((signal, se) -> { if (!signal.isOnSubscribe()) { return errorFormatter.failOptional(se, "expected: onSubscribe(); actual: %s", signal); } else { consumer.accept(signal.getSubscription()); return Optional.empty(); } }, "consumeSubscriptionWith")); } else { this.script.add(new SubscriptionConsumerEvent<>(consumer, "consumeSubscriptionWith")); } return this; }
@Override public boolean equals(@Nullable Object o) { if (this == o) { return true; } if (o == null || !(o instanceof Signal)) { return false; } Signal<?> signal = (Signal<?>) o; if (getType() != signal.getType()) { return false; } if (isOnComplete()) { return true; } if (isOnSubscribe()) { return Objects.equals(this.getSubscription(), signal.getSubscription()); } if (isOnError()) { return Objects.equals(this.getThrowable(), signal.getThrowable()); } if (isOnNext()) { return Objects.equals(this.get(), signal.get()); } return false; }
/** * Propagate the signal represented by this {@link Signal} instance to a * given {@link Subscriber}. * * @param observer the {@link Subscriber} to play the {@link Signal} on */ @Override default void accept(Subscriber<? super T> observer) { if (isOnNext()) { observer.onNext(get()); } else if (isOnComplete()) { observer.onComplete(); } else if (isOnError()) { observer.onError(getThrowable()); } else if (isOnSubscribe()) { observer.onSubscribe(getSubscription()); } } }