public FrmDimmer(DimmerNode node) { InitializeComponent(); this.Text = this.Text + "-" + node.Title; this.ckbSwitch.Checked = this.tlpSwitch.Enabled = node.Switch.Enable; this.ckbDimRelatively.Checked = this.tlpDimRelatively.Enabled = node.DimRelatively.Enable; this.ckbDimAbsolutely.Checked = this.tlpDimAbsolutely.Enabled = node.DimAbsolutely.Enable; this.ckbStateOnOff.Checked = this.tlpStateOnOff.Enabled = node.StateOnOff.Enable; this.ckbStateDimValue.Checked = this.tlpStateDimValue.Enabled = node.StateDimValue.Enable; this.gaSwitch = new Dictionary <string, KNXSelectedAddress>(node.Switch.MapSelectedAddress); this.gaDimRelatively = new Dictionary <string, KNXSelectedAddress>(node.DimRelatively.MapSelectedAddress); this.gaDimAbsoultely = new Dictionary <string, KNXSelectedAddress>(node.DimAbsolutely.MapSelectedAddress); this.gaStateOnOff = new Dictionary <string, KNXSelectedAddress>(node.StateOnOff.MapSelectedAddress); this.gaStateDimValue = new Dictionary <string, KNXSelectedAddress>(node.StateDimValue.MapSelectedAddress); this.txbxSwitch.Text = KNXSelectedAddress.GetGroupAddressName(this.gaSwitch); this.txbxDimRelatively.Text = KNXSelectedAddress.GetGroupAddressName(this.gaDimRelatively); this.txbxDimAbsolutely.Text = KNXSelectedAddress.GetGroupAddressName(this.gaDimAbsoultely); this.txbxStateOnOff.Text = KNXSelectedAddress.GetGroupAddressName(this.gaStateOnOff); this.txbxStateDimValue.Text = KNXSelectedAddress.GetGroupAddressName(this.gaStateDimValue); this.node = node; }
public void When_PressedButtonUpOrDownLongWithoutReleaseAfterTimeout_ShouldStopDimmingAfterTimeout(int upOrDown, int startDimDelay, int dimPercent, int expectedDimPercent) { // Arrange: Create node var schedMock = new MockSchedulerService(); var node = new DimmerNode(TestNodeContext.Create(), schedMock); node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING; node.StartDimDelay.Value = startDimDelay; node.DimPercent.Value = dimPercent; var testCases = new[] { node.ButtonDimUp, node.ButtonDimDown }; // Act 1: Press button testCases[upOrDown].Value = true; int callCounter = 0; schedMock.InvokeInObserver = (delay) => { ++callCounter; Assert.AreEqual(new TimeSpan(0, 0, 0, 0, startDimDelay), delay); }; node.Execute(); // Assert 1: The correct timeout is applied Assert.AreEqual(1, callCounter); // InvokeIn must be called exactly once. // Act 2: schedMock.MockInvokeNow(); Assert.AreEqual((double)expectedDimPercent, node.Dim.Value); schedMock.Now = schedMock.Now.AddMilliseconds(startDimDelay + 100); testCases[upOrDown].Value = false; node.Execute(); // Assert 2: }
public void When_ButtonUpOrDownReleasedAfterPresedLong_ShouldStopDimming(int upOrDown) { // Arrange: Create node var schedMock = new MockSchedulerService(); var node = new DimmerNode(TestNodeContext.Create(), schedMock); node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING; var testCases = new Tuple <BoolValueObject, double>[] { new Tuple <BoolValueObject, double>(node.ButtonDimUp, 100.0d), new Tuple <BoolValueObject, double>(node.ButtonDimDown, -100.0d) }; // Act Phase 2: Press button and release button testCases[upOrDown].Item1.Value = true; node.Execute(); schedMock.MockInvokeNow(); // Assert Phase 1: Light should not be switched on or off, but dimming should be started Assert.IsFalse(node.SwitchOnOff.HasValue); Assert.AreEqual(testCases[upOrDown].Item2, node.Dim.Value); // Act Phase 2: Release button after 800ms testCases[upOrDown].Item1.Value = false; schedMock.Now = schedMock.Now + TimeSpan.FromMilliseconds(800); node.Execute(); // Assert: Light should not be switched on or off, and dimming should be stoped Assert.IsNull(schedMock.InvokeInAction); // No start dimming action should be scheduled Assert.IsFalse(node.SwitchOnOff.HasValue); Assert.AreEqual(0.0d, node.Dim.Value); }
public void When_ModeIs_MODE_SINGLE_BUTTON_SWITCHING_ShouldOnlyActivateButtonSwitchOnOff_And_SwitchOnOff() { // Arrange: Create node, lightis off var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService()); // Act: Change mode node.Mode.Value = DimmerNode.MODE_SINGLE_BUTTON_SWITCHING; // Assert: Validate Inputs: Assert.IsNull(node.ButtonDimUp); Assert.IsNull(node.ButtonDimDown); Assert.IsNull(node.ButtonDimUpDown); Assert.IsNotNull(node.ButtonSwitchOnOff); // Assert: Validate Outputs: Assert.IsNotNull(node.SwitchOnOff); Assert.IsNull(node.Dim); }
public void When_ButtonUpPressedShortlyWhileOn_Should_ToggleOff() { // Arrange: Create node, lightis on var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService()); node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING; node.LightState.Value = true; // Act: Press button and release button node.ButtonDimUp.Value = true; node.Execute(); node.ButtonDimUp.Value = false; node.Execute(); // Assert: Light should be toggled off and not dimmed Assert.IsFalse(node.SwitchOnOff.Value); Assert.IsFalse(node.Dim.HasValue); }
public void When_ButtonUpOrDownPressedLong_ShouldStartDimmingUpOrDown(int upOrDOwn) { // Arrange: Create node var schedMock = new MockSchedulerService(); var node = new DimmerNode(TestNodeContext.Create(), schedMock); node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING; var testCases = new Tuple <BoolValueObject, double>[] { new Tuple <BoolValueObject, double>(node.ButtonDimUp, 100.0d), new Tuple <BoolValueObject, double>(node.ButtonDimDown, -100.0d) }; // Act: Press button and release button testCases[upOrDOwn].Item1.Value = true; node.Execute(); schedMock.MockInvokeNow(); // Assert: Light should not be switched on or off, but dimming should be started Assert.IsFalse(node.SwitchOnOff.HasValue); Assert.AreEqual(testCases[upOrDOwn].Item2, node.Dim.Value); }
public void When_ButtonDown_AndLightIsOn_Should_TurnLightOff_And_IgnoreButtonUp() { // Arrange: Create node, lightis off var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService()); node.Mode.Value = DimmerNode.MODE_SINGLE_BUTTON_SWITCHING; node.LightState.Value = false; // Act 1: Press button and release button node.ButtonSwitchOnOff.Value = true; node.Execute(); // Assert 1: Light should be toggled on and not dimmed Assert.IsTrue(node.SwitchOnOff.Value); // Act 2: Press button and release button node.ButtonSwitchOnOff.Value = false; node.Execute(); // Assert 2: Light should NOT be toggled again Assert.IsTrue(node.SwitchOnOff.Value); }
private static ViewNode ImportControlNode(BackgroundWorker worker, ContainerNode parentNode, KNXControlBase knx, string ResImgDir) { ViewNode node = null; switch (knx.GetType().Name) { case MyConst.Controls.KnxBlindsType: node = new BlindsNode(knx as KNXBlinds, worker, ResImgDir); break; case MyConst.Controls.KnxLabelType: node = new LabelNode(knx as KNXLabel, worker, ResImgDir); break; case MyConst.Controls.KnxSceneButtonType: node = new SceneButtonNode(knx as KNXSceneButton, worker, ResImgDir); break; case MyConst.Controls.KnxSliderSwitchType: node = new SliderSwitchNode(knx as KNXSliderSwitch, worker, ResImgDir); break; case MyConst.Controls.KnxSwitchType: node = new SwitchNode(knx as KNXSwitch, worker, ResImgDir); break; case MyConst.Controls.KnxValueDisplayType: node = new ValueDisplayNode(knx as KNXValueDisplay, worker, ResImgDir); break; case MyConst.Controls.KnxTimerButtonType: node = new TimerButtonNode(knx as KNXTimerButton, worker, ResImgDir); break; case MyConst.Controls.KnxDigitalAdjustmentType: node = new DigitalAdjustmentNode(knx as KNXDigitalAdjustment, worker, ResImgDir); break; case MyConst.Controls.KnxImageButtonType: node = new ImageButtonNode(knx as KNXImageButton, worker, ResImgDir); break; case MyConst.Controls.KnxShutterType: node = new ShutterNode(knx as KNXShutter, worker, ResImgDir); break; case MyConst.Controls.KnxDimmerType: node = new DimmerNode(knx as KNXDimmer, worker, ResImgDir); break; case MyConst.Controls.KnxWebCamViewerType: node = new WebCamerNode(knx as KNXWebCamer, worker, ResImgDir); break; case MyConst.Controls.KnxMediaButtonType: node = new MediaButtonNode(knx as KNXMediaButton, worker, ResImgDir); break; case MyConst.Controls.KnxAirConditionType: node = new AirConditionNode(knx as KNXAirCondition, worker, ResImgDir); break; case MyConst.Controls.KnxHVACType: node = new HVACNode(knx as KNXHVAC, worker, ResImgDir); break; case MyConst.Controls.KnxGroupBoxType: node = new GroupBoxNode(knx as KNXGroupBox, worker, ResImgDir); KNXGroupBox knxGroupBox = knx as KNXGroupBox; if (knxGroupBox.Controls != null && knxGroupBox.Controls.Count > 0) { foreach (var item in knxGroupBox.Controls) { ImportControlNode(worker, node as ContainerNode, item, ResImgDir); } } break; default: MessageBox.Show(UIResMang.GetString("Message39") + knx.GetType().Name, UIResMang.GetString("Message6"), MessageBoxButtons.OK, MessageBoxIcon.Error); break; } if (null != parentNode) { parentNode.Nodes.Add(node); } return(node); }