public void GroupBy_and_SplitWhen_must_not_timeout_and_cancel_substream_publisher_when_they_have_been_subscribed_to()
{
var subscriber = TestSubscriber.CreateManualProbe<Tuple<int, Source<int, NotUsed>>>(this);
var publisherProbe = TestPublisher.CreateProbe<int>(this);
var publisher =
Source.FromPublisher(publisherProbe)
.GroupBy(2, x => x % 2)
.Lift(x => x % 2).RunWith(Sink.FromSubscriber(subscriber), Materializer);
var downstreamSubscription = subscriber.ExpectSubscription();
downstreamSubscription.Request(10);
publisherProbe.SendNext(1);
publisherProbe.SendNext(2);
var s1 = subscriber.ExpectNext().Item2;
var s1SubscriberProbe = TestSubscriber.CreateManualProbe<int>(this);
s1.RunWith(Sink.FromSubscriber(s1SubscriberProbe), Materializer);
var s1Subscription = s1SubscriberProbe.ExpectSubscription();
s1Subscription.Request(1);
s1SubscriberProbe.ExpectNext().Should().Be(1);
var s2 = subscriber.ExpectNext().Item2;
var s2SubscriberProbe = TestSubscriber.CreateManualProbe<int>(this);
s2.RunWith(Sink.FromSubscriber(s2SubscriberProbe), Materializer);
var s2Subscription = s2SubscriberProbe.ExpectSubscription();
Thread.Sleep(1500);
s2Subscription.Request(100);
s2SubscriberProbe.ExpectNext().Should().Be(2);
s1Subscription.Request(100);
publisherProbe.SendNext(3);
publisherProbe.SendNext(4);
s1SubscriberProbe.ExpectNext().Should().Be(3);
s2SubscriberProbe.ExpectNext().Should().Be(4);
}
}