public void Should_TurnOn_IfButtonPressed_EvenIfTimeRangeConditionIs_NotFulfilled()
        {
            var testController = new TestController();

            testController.SetTime(TimeSpan.Parse("18:00:00"));

            var automation = new TurnOnAndOffAutomation(
                "Test",
                testController.GetInstance <IDateTimeService>(),
                testController.GetInstance <ISchedulerService>(),
                testController.GetInstance <ISettingsService>(),
                testController.GetInstance <IDaylightService>());

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());
            var output        = new Lamp("Test", new TestLampAdapter());

            Assert.AreEqual(true, output.GetState().Has(PowerState.Off));

            automation.WithTurnOnWithinTimeRange(() => TimeSpan.Parse("10:00:00"), () => TimeSpan.Parse("15:00:00"));
            automation.WithTrigger(button.PressedShortTrigger);
            automation.WithTarget(output);

            buttonAdapter.Touch();

            Assert.AreEqual(true, output.GetState().Has(PowerState.On));
        }
        public void Should_TurnOn_IfButtonPressedShort()
        {
            var testController = new TestController();

            var automation = new TurnOnAndOffAutomation(
                "Test",
                testController.GetInstance <IDateTimeService>(),
                testController.GetInstance <ISchedulerService>(),
                testController.GetInstance <ISettingsService>(),
                testController.GetInstance <IDaylightService>(),
                testController.GetInstance <IMessageBrokerService>());

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>(), testController.GetInstance <IMessageBrokerService>(), testController.GetInstance <ILogService>());
            var output        = new Lamp("Test", new TestLampAdapter());

            Assert.AreEqual(true, output.GetState().Has(PowerState.Off));

            automation.WithTrigger(button.CreatePressedShortTrigger(testController.GetInstance <IMessageBrokerService>()));
            automation.WithTarget(output);

            buttonAdapter.Touch();

            Assert.AreEqual(true, output.GetState().Has(PowerState.On));
        }
예제 #3
0
        public void Button_StateAvailable()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());

            Assert.IsTrue(button.GetState().Supports <ButtonState>());
        }
예제 #4
0
        public void Button_FeatureAvailable()
        {
            var c = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, c.GetInstance <ITimerService>(), c.GetInstance <ISettingsService>(), c.GetInstance <IMessageBrokerService>(), c.GetInstance <ILogService>());

            Assert.IsTrue(button.GetFeatures().Supports <ButtonFeature>());
        }
예제 #5
0
        public void Button_PressShortly()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());

            Assert.IsTrue(button.GetState().Has(ButtonState.Released));
            buttonAdapter.Press();
            Assert.IsTrue(button.GetState().Has(ButtonState.Pressed));
            buttonAdapter.Release();
            Assert.IsTrue(button.GetState().Has(ButtonState.Released));
        }
예제 #6
0
        public void Button_PressedShortlyTrigger()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());

            var triggerRaised = false;

            button.PressedShortTrigger.Attach(() => triggerRaised = true);

            Assert.IsTrue(button.GetState().Has(ButtonState.Released));
            buttonAdapter.Touch();
            Assert.IsTrue(triggerRaised);
        }
예제 #7
0
        public void Trigger_AttachAction()
        {
            var c = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, c.GetInstance <ITimerService>(), c.GetInstance <ISettingsService>(), c.GetInstance <IMessageBrokerService>(), c.GetInstance <ILogService>());
            var lamp          = new Lamp("Test", new TestLampAdapter());

            button.CreatePressedShortTrigger(c.GetInstance <IMessageBrokerService>()).Attach(() => lamp.TryTogglePowerState());

            lamp.GetState().Has(PowerState.Off);
            buttonAdapter.Touch();
            lamp.GetState().Has(PowerState.On);
            buttonAdapter.Touch();
            lamp.GetState().Has(PowerState.Off);
        }
        public void Empty_ConditionalOnAutomation()
        {
            var c = new TestController();

            var automation = new ConditionalOnAutomation("Test",
                                                         c.GetInstance <ISchedulerService>(),
                                                         c.GetInstance <IDateTimeService>(),
                                                         c.GetInstance <IDaylightService>());

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, c.GetInstance <ITimerService>(), c.GetInstance <ISettingsService>(), c.GetInstance <IMessageBrokerService>(), c.GetInstance <ILogService>());
            var testOutput    = new Lamp("Test", new TestLampAdapter());

            automation.WithTrigger(button.CreatePressedShortTrigger(c.GetInstance <IMessageBrokerService>()));
            automation.WithComponent(testOutput);

            Assert.IsTrue(testOutput.GetState().Has(PowerState.Off));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.On));
        }
예제 #9
0
        public void Automation_Toggle()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());
            var testOutput    = new Lamp("Test", new TestLampAdapter());

            new Automation("Test")
            .WithTrigger(button.PressedShortTrigger)
            .WithActionIfConditionsFulfilled(() => testOutput.TryTogglePowerState());

            Assert.IsTrue(testOutput.GetState().Has(PowerState.Off));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.On));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.Off));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.On));
        }
        public void Should_TurnOff_IfButtonPressed_WhileTargetIsAlreadyOn()
        {
            var testController = new TestController();

            testController.SetTime(TimeSpan.Parse("14:00:00"));

            var automation = new TurnOnAndOffAutomation(
                "Test",
                testController.GetInstance <IDateTimeService>(),
                testController.GetInstance <ISchedulerService>(),
                testController.GetInstance <ISettingsService>(),
                testController.GetInstance <IDaylightService>(),
                testController.GetInstance <IMessageBrokerService>());

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>(), testController.GetInstance <IMessageBrokerService>(), testController.GetInstance <ILogService>());
            var output        = new Lamp("Test", new TestLampAdapter());

            Assert.AreEqual(true, output.GetState().Has(PowerState.Off));

            automation.WithTrigger(button.CreatePressedShortTrigger(testController.GetInstance <IMessageBrokerService>()));
            automation.WithTarget(output);

            IComponent[] otherActuators =
            {
                new Lamp("Test", new TestLampAdapter()),
                new Lamp("Test", new TestLampAdapter())
            };

            automation.WithSkipIfAnyIsAlreadyOn(otherActuators);

            buttonAdapter.Touch();
            Assert.AreEqual(true, output.GetState().Has(PowerState.On));

            buttonAdapter.Touch();
            Assert.AreEqual(true, output.GetState().Has(PowerState.On));

            automation.WithTurnOffIfButtonPressedWhileAlreadyOn();
            buttonAdapter.Touch();
            Assert.AreEqual(true, output.GetState().Has(PowerState.Off));
        }
예제 #11
0
        public void Button_PressedLongTrigger()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());

            var triggerRaised = false;

            button.PressedLongTrigger.Attach(() => triggerRaised = true);

            Assert.IsTrue(button.GetState().Has(ButtonState.Released));
            buttonAdapter.Press();

            // Should be false because time was too slow.
            Assert.IsFalse(triggerRaised);

            // 1h is only for test. Enough to test with default settings.
            testController.Tick(TimeSpan.FromHours(1));
            Assert.IsTrue(triggerRaised);
        }
예제 #12
0
        public void Automation_WithCondition()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());
            var testOutput    = new Lamp("Test", new TestLampAdapter());

            new Automation("Test")
            .WithTrigger(button.PressedShortTrigger)
            .WithCondition(ConditionRelation.And, new TimeRangeCondition(testController.GetInstance <IDateTimeService>()).WithStart(TimeSpan.FromHours(1)).WithEnd(TimeSpan.FromHours(2)))
            .WithActionIfConditionsFulfilled(() => testOutput.TryTogglePowerState());

            Assert.IsTrue(testOutput.GetState().Has(PowerState.Off));
            testController.SetTime(TimeSpan.FromHours(0));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.Off));

            testController.SetTime(TimeSpan.FromHours(1.5));
            buttonAdapter.Touch();
            Assert.IsTrue(testOutput.GetState().Has(PowerState.On));
        }
예제 #13
0
        public void Button_NoDoublePressedLongTrigger()
        {
            var testController = new TestController();

            var buttonAdapter = new TestButtonAdapter();
            var button        = new Button("Test", buttonAdapter, testController.GetInstance <ITimerService>(), testController.GetInstance <ISettingsService>());

            var triggerRaisedCount = 0;

            button.PressedLongTrigger.Attach(() => triggerRaisedCount++);

            buttonAdapter.Press();

            // 1h is only for test. Enough to test with default settings.
            testController.Tick(TimeSpan.FromHours(1));

            Assert.AreEqual(1, triggerRaisedCount);

            buttonAdapter.Release();

            Assert.AreEqual(1, triggerRaisedCount);
        }