public void CallSchedulerFactoryOnCreation()
        {
            var schedulerFactoryCalls = 0;
            var schedulerFactory      = new Func <IScheduler>(() => { schedulerFactoryCalls++; return(null); });

            var sut = new WaitForDispatcherScheduler(schedulerFactory);

            Assert.Equal(1, schedulerFactoryCalls);
        }
        public void SuccessfulFactory_UsesCachedScheduler()
        {
            var schedulerFactoryCalls = 0;
            var schedulerFactory      = new Func <IScheduler>(() => {
                schedulerFactoryCalls++;
                return(CurrentThreadScheduler.Instance);
            });

            var sut = new WaitForDispatcherScheduler(schedulerFactory);

            sut.Schedule(() => { });

            Assert.Equal(1, schedulerFactoryCalls);
        }
        public void FactoryThrowsException_ReCallsOnSchedule()
        {
            var schedulerFactoryCalls = 0;
            var schedulerFactory      = new Func <IScheduler>(() => {
                schedulerFactoryCalls++;
                throw new InvalidOperationException();
            });

            var sut = new WaitForDispatcherScheduler(schedulerFactory);

            sut.Schedule(() => { });

            Assert.Equal(2, schedulerFactoryCalls);
        }
        public void FactoryThrowsArgumentNullException_FallsBackToCurrentThread()
        {
            IScheduler?schedulerExecutedOn = null;
            var        schedulerFactory    = new Func <IScheduler>(() => throw new ArgumentNullException());
            var        sut = new WaitForDispatcherScheduler(schedulerFactory);

            sut.Schedule <object>(
                null !,
                (scheduler, state) =>
            {
                schedulerExecutedOn = scheduler;
                return(Disposable.Empty);
            });

            Assert.Equal(CurrentThreadScheduler.Instance, schedulerExecutedOn);
        }
Example #5
0
        public void FactoryThrowsArgumentNullException_FallsBackToCurrentThread()
        {
            IScheduler schedulerExecutedOn = null;

#pragma warning disable CA2208 // Instantiate argument exceptions correctly
            var schedulerFactory = new Func <IScheduler>(() => throw new ArgumentNullException());
#pragma warning restore CA2208 // Instantiate argument exceptions correctly

            var sut = new WaitForDispatcherScheduler(schedulerFactory);
            sut.Schedule <object>(
                null,
                (scheduler, state) =>
            {
                schedulerExecutedOn = scheduler;
                return(Disposable.Empty);
            });

            Assert.Equal(CurrentThreadScheduler.Instance, schedulerExecutedOn);
        }