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)); }
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>()); }
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>()); }
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)); }
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); }
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)); }
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)); }
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); }
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)); }
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); }