view Implab.Test/Mock/MockPollingComponent.cs @ 220:42814145d472 v2

.csproj changes
author cin
date Tue, 20 Jun 2017 19:45:52 +0300
parents 8200ab154c8a
children
line wrap: on
line source

using System;
using Implab.Components;

namespace Implab.Test.Mock {
    class MockPollingComponent : PollingComponent {
        public MockPollingComponent(TimeSpan interval, Func<Func<ICancellationToken, IPromise>, IPromise> dispatcher, bool initialized) : base(interval, dispatcher, initialized)  {
        }

        public Action MockInit {
            get;
            set;
        }

        public Action<Exception> MockOnError {
            get;
            set;
        }

        public Action<Exception> MockOnCancel {
            get;
            set;
        }

        public Func<IPromise> MockStart {
            get;
            set;
        }

        public Func<IPromise> MockStop {
            get;
            set;
        }

        public Func<ICancellationToken, IPromise> MockTick {
            get;
            set;
        }

        protected override IPromise OnStart() {
            return MockStart != null ? Safe.Run(MockStart).Chain(base.OnStart) : Safe.Run(base.OnStart);
        }

        protected override IPromise OnStop() {
            return MockStop != null ? Safe.Run(MockStop).Chain(base.OnStop) : Safe.Run(base.OnStop);
        }

        protected override void OnInitialize() {
            if (MockInit != null)
                MockInit();
        }

        protected override IPromise OnTick(ICancellationToken cancellationToken) {
            return MockTick != null ? Safe.Run(() => MockTick(cancellationToken)) : Promise.Success;
        }

        protected override void OnTickCancel(Exception error) {
            if (MockOnCancel != null)
                MockOnCancel(error);
        }

        protected override void OnTickError(Exception error) {
            if (MockOnError != null)
                MockOnError(error);
        }

        public void CallComponentFail(Exception error) {
            Fail(error);
        }
    }
}