test_class.file: client/src/test/java/io/spine/grpc/CompositeObserverTest.java
test_class.identifier: CompositeObserverTest
test_case.body: @Test
      @DisplayName("delegate `onNext` calls to wrapped observers")
      void delegateOnNext() {
          MemoizingObserver<String> observer1 = StreamObservers.memoizingObserver();
          MemoizingObserver<String> observer2 = StreamObservers.memoizingObserver();
          StreamObserver<String> observer =
                  new CompositeObserver<>(ImmutableList.of(observer1, observer2));
  
          String value = "String value.";
          observer.onNext(value);
  
          assertThat(observer1.firstResponse()).isEqualTo(value);
          assertThat(observer2.firstResponse()).isEqualTo(value);
      }
test_case.class_method_signature: CompositeObserverTest.delegateOnNext()
test_case.full_signature: @Test @DisplayName("delegate `onNext` calls to wrapped observers") void delegateOnNext()
test_case.identifier: delegateOnNext
test_case.invocations: memoizingObserver memoizingObserver of onNext isEqualTo assertThat firstResponse isEqualTo assertThat firstResponse
test_case.modifiers: @Test @DisplayName("delegate `onNext` calls to wrapped observers")
test_case.parameters: ()
test_case.return: void
test_case.signature: void delegateOnNext()
focal_class.declarator: observers
focal_class.modifier: private final
focal_class.original_string: private final ImmutableList<StreamObserver<? super T>> observers;
focal_class.type: ImmutableList<StreamObserver<? super T>>
focal_class.var_name: observers
focal_class.file: client/src/main/java/io/spine/grpc/CompositeObserver.java
focal_class.identifier: CompositeObserver
focal_class.interfaces: implements StreamObserver<T>
focal_class.class_method_signature: CompositeObserver.CompositeObserver(Iterable<StreamObserver<? super T>> observers)
focal_class.full_signature: public  CompositeObserver(Iterable<StreamObserver<? super T>> observers)
focal_class.identifier: CompositeObserver
focal_class.modifiers: public
focal_class.parameters: (Iterable<StreamObserver<? super T>> observers)
focal_class.signature:  CompositeObserver(Iterable<StreamObserver<? super T>> observers)
focal_class.class_method_signature: CompositeObserver.onNext(T value)
focal_class.full_signature: @Override public void onNext(T value)
focal_class.identifier: onNext
focal_class.modifiers: @Override public
focal_class.parameters: (T value)
focal_class.return: void
focal_class.signature: void onNext(T value)
focal_class.class_method_signature: CompositeObserver.onError(Throwable t)
focal_class.full_signature: @Override public void onError(Throwable t)
focal_class.identifier: onError
focal_class.modifiers: @Override public
focal_class.parameters: (Throwable t)
focal_class.return: void
focal_class.signature: void onError(Throwable t)
focal_class.class_method_signature: CompositeObserver.onCompleted()
focal_class.full_signature: @Override public void onCompleted()
focal_class.identifier: onCompleted
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void onCompleted()
focal_method.body: @Override
      public void onNext(T value) {
          observers.forEach(o -> o.onNext(value));
      }
focal_method.class_method_signature: CompositeObserver.onNext(T value)
focal_method.full_signature: @Override public void onNext(T value)
focal_method.identifier: onNext
focal_method.invocations: forEach onNext
focal_method.modifiers: @Override public
focal_method.parameters: (T value)
focal_method.return: void
focal_method.signature: void onNext(T value)