예제 #1
0
        public void Fade_with_high_value_should_fadeIn()
        {
            var       times       = 0;
            const int toIntensity = 255;

            A.CallTo(() => _arduino.AnalogWrite(Pin, A <int> ._))
            .Invokes(() => { times++; });
            _led.Fade(toIntensity);
            for (var i = 0; i < toIntensity - 1; i++)
            {
                _timer.Tick();
            }
            _led.Intensity.ShouldEqual(toIntensity);
            times.ShouldEqual(255);
        }
        public void DigitalRead_1_should_trigger_Down()
        {
            var wasCalled = false;

            _button.Down = () =>
            {
                wasCalled = true;
            };
            A.CallTo(() => _arduino.DigitalRead(Pin)).Returns(0);
            wasCalled.ShouldBeFalse();
            _button.IsDown.ShouldBeFalse();

            _timer.Tick();

            A.CallTo(() => _arduino.DigitalRead(Pin)).Returns(1);
            _timer.Tick();

            wasCalled.ShouldBeTrue();
            _button.IsDown.ShouldBeTrue();
        }
예제 #3
0
        public void StrobeOn_should_start_timer()
        {
            A.CallTo(() => _arduino.DigitalWrite(Pin, DigitalPin.High)).DoesNothing();
            A.CallTo(() => _arduino.DigitalWrite(Pin, DigitalPin.Low)).DoesNothing();
            _led.On();

            _led.StrobeOn();
            _led.State.ShouldEqual(LedState.Off);
            _timer.Tick();
            _led.State.ShouldEqual(LedState.On);
            A.CallTo(() => _arduino.DigitalWrite(Pin, DigitalPin.High)).MustHaveHappened(Repeated.Exactly.Twice);
            A.CallTo(() => _arduino.DigitalWrite(Pin, DigitalPin.Low)).MustHaveHappened(Repeated.Exactly.Twice);
        }
    public async Task It_uses_correct_cut_off_time()
    {
        var timer      = new FakeTimer();
        var cutOffTime = DateTime.MinValue;
        var cleaner    = new TestableCleaner((time, token) =>
        {
            cutOffTime = time;
            return(Task.FromResult(0));
        }, (m, e) => { }, TimeSpan.FromDays(7), TimeSpan.Zero, timer);

        await cleaner.Start().ConfigureAwait(false);

        var now = new DateTime(2017, 3, 31, 0, 0, 0);
        await timer.Tick(now, CancellationToken.None).ConfigureAwait(false);

        var expected = new DateTime(2017, 3, 24, 0, 0, 0);

        Assert.AreEqual(expected, cutOffTime);
    }
    public async Task It_resets_the_failure_counter_after_successful_attempt()
    {
        var criticalActionTriggered = false;
        var timer   = new FakeTimer();
        var cleaner = new TestableCleaner((time, token) => Task.FromResult(0),
                                          (m, e) => criticalActionTriggered = true, TimeSpan.FromDays(7), TimeSpan.Zero, timer);

        await cleaner.Start().ConfigureAwait(false);

        for (var i = 0; i < 100; i++)
        {
            if (i % 9 == 0) //Succeed every 9th attempt
            {
                await timer.Tick(DateTime.UtcNow, CancellationToken.None).ConfigureAwait(false);
            }
            else
            {
                timer.OnError(new Exception("Simulated!"));
            }
        }

        Assert.IsFalse(criticalActionTriggered);
    }
예제 #6
0
    public async Task It_resets_the_failure_counter_after_successful_attempt()
    {
        var criticalActionTriggered = false;
        var timer   = new FakeTimer();
        var cleaner = new DedupeCleaner(_ => Task.FromResult(0),
                                        _ => criticalActionTriggered = true, TimeSpan.Zero, timer);

        cleaner.Start();

        for (var i = 0; i < 100; i++)
        {
            if (i % 9 == 0) //Succeed every 9th attempt
            {
                await timer.Tick(DateTime.UtcNow, CancellationToken.None);
            }
            else
            {
                timer.OnError(new("Simulated!"));
            }
        }

        Assert.False(criticalActionTriggered);
    }