public void A_BidiFlow_must_combine_materialization_values()
{
this.AssertAllStagesStopped(() =>
{
var left = Flow.FromGraph(GraphDsl.Create(Sink.First<int>(), (b, sink) =>
{
var broadcast = b.Add(new Broadcast<int>(2));
var merge = b.Add(new Merge<int>(2));
var flow = b.Add(Flow.Create<string>().Select(int.Parse));
b.From(broadcast).To(sink);
b.From(Source.Single(1).MapMaterializedValue(_ => Task.FromResult(0))).Via(broadcast).To(merge);
b.From(flow).To(merge);
return new FlowShape<string, int>(flow.Inlet, merge.Out);
}));
var right = Flow.FromGraph(GraphDsl.Create(Sink.First<List<long>>(), (b, sink) =>
{
var flow = b.Add(Flow.Create<long>().Grouped(10));
var source = b.Add(Source.Single(ByteString.FromString("10")));
b.From(flow).To(sink);
return new FlowShape<long, ByteString>(flow.Inlet, source.Outlet);
}));
var tt = left.JoinMaterialized(BidiMaterialized(), Keep.Both)
.JoinMaterialized(right, Keep.Both)
.Run(Materializer);
var t = tt.Item1;
var l = t.Item1;
var m = t.Item2;
var r = tt.Item2;
Task.WhenAll(l, m, r).Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
l.Result.Should().Be(1);
m.Result.Should().Be(42);
r.Result.ShouldAllBeEquivalentTo(new [] {3L, 12L});
}, Materializer);
}