public static Func <TContext, ITestScheduler, Task> DoScheduling <TContext>(VirtualTimeAgenda <TContext> schedule) where TContext : ReactiveClientContext { return((ctx, scheduler) => { foreach (var scheduledEvent in schedule) { if (scheduledEvent.IsAsync) { scheduler.ScheduleAbsolute(scheduledEvent.Time, () => scheduledEvent.AsyncEvent(ctx)); } else { scheduler.ScheduleAbsolute(scheduledEvent.Time, () => scheduledEvent.Event(ctx)); } } return Task.FromResult(true); }); }
public ITestObserver <T> Start <T>( Func <IAsyncReactiveQbservable <T> > create, long created, long subscribed, long disposed) { if (create == null) { throw new ArgumentNullException(nameof(create)); } if (created > subscribed) { throw new ArgumentOutOfRangeException(nameof(created)); } if (subscribed > disposed) { throw new ArgumentOutOfRangeException(nameof(subscribed)); } var source = default(IAsyncReactiveQbservable <T>); var subscription = default(IAsyncReactiveQubscription); var observer = CreateObserver <T>(); var agenda = new VirtualTimeAgenda <ReactiveClientContext> { { created, _ => source = Augment <T>(create()) }, { subscribed, _ => subscription = source.SubscribeAsync(observer, NextUri(), null, CancellationToken.None).Result }, { disposed, _ => subscription.DisposeAsync(CancellationToken.None).Wait() }, }; Helpers.DoScheduling(agenda)(Context, Scheduler).Wait(); Scheduler.Start(); return(observer); }