Example #1
0
        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);
            });
        }
Example #2
0
        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);
        }