public void A_RecoverWith_must_switch_the_second_time_if_alternative_source_throws_exception()
{
this.AssertAllStagesStopped(() =>
{
var probe = Source.From(Enumerable.Range(1, 3)).Select(x =>
{
if (x == 3)
throw new IndexOutOfRangeException();
return x;
}).RecoverWith(ex =>
{
if (ex is IndexOutOfRangeException)
return Source.From(new [] {11,22}).Select(x =>
{
if (x == 22)
throw new ArgumentException();
return x;
});
if (ex is ArgumentException)
return Source.From(new[] { 33, 44 });
return null;
}).RunWith(this.SinkProbe<int>(), Materializer);
probe
.Request(2)
.ExpectNext(1, 2);
probe
.Request(2)
.ExpectNext(11, 33);
probe
.Request(1)
.ExpectNext(44)
.ExpectComplete();
}, Materializer);
}