2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.dmx.internal.multiverse;
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
18 import org.junit.jupiter.api.BeforeEach;
19 import org.junit.jupiter.api.Test;
20 import org.mockito.Mockito;
21 import org.openhab.binding.dmx.internal.DmxBindingConstants.ListenerType;
22 import org.openhab.binding.dmx.internal.action.FadeAction;
23 import org.openhab.binding.dmx.internal.action.ResumeAction;
24 import org.openhab.binding.dmx.internal.handler.DimmerThingHandler;
25 import org.openhab.core.thing.ChannelUID;
28 * Tests cases for Channel
30 * @author Jan N. Klug - Initial contribution
32 public class DmxChannelTest {
34 private final ChannelUID valueChannelUID = new ChannelUID("dmx:testBridge:testThing:valueChannel");
36 DmxChannel dmxChannel;
37 DimmerThingHandler dimmerThingHandler;
42 dimmerThingHandler = Mockito.mock(DimmerThingHandler.class);
43 dmxChannel = new DmxChannel(0, 1, 0);
44 dmxChannel.addListener(valueChannelUID, dimmerThingHandler, ListenerType.VALUE);
45 dmxChannel.setValue(0);
46 currentTime = System.currentTimeMillis();
50 public void checkValueSettingAndReporting() {
51 dmxChannel.setValue(125);
52 dmxChannel.getNewValue(currentTime);
54 assertThat(dmxChannel.getValue(), is(125));
55 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 125);
59 public void checkLimitsAreObserved() {
60 dmxChannel.setValue(300);
61 assertThat(dmxChannel.getValue(), is(DmxChannel.MAX_VALUE));
63 dmxChannel.setValue(-1);
64 assertThat(dmxChannel.getValue(), is(DmxChannel.MIN_VALUE));
68 public void setAndClearAction() {
70 dmxChannel.setChannelAction(new FadeAction(0, 100, -1));
71 assertThat(dmxChannel.hasRunningActions(), is(true));
74 dmxChannel.clearAction();
75 assertThat(dmxChannel.hasRunningActions(), is(false));
79 public void checkSingleFadeAction() {
80 dmxChannel.addChannelAction(new FadeAction(1000, 243, -1));
82 dmxChannel.getNewValue(currentTime);
83 assertThat(dmxChannel.hasRunningActions(), is(true));
84 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
86 dmxChannel.getNewValue(currentTime + 1000);
87 assertThat(dmxChannel.hasRunningActions(), is(false));
88 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
92 public void checkMultipleInfiniteFadeAction() {
93 dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
94 dmxChannel.addChannelAction(new FadeAction(1000, 127, 0));
96 dmxChannel.getNewValue(currentTime);
97 assertThat(dmxChannel.hasRunningActions(), is(true));
98 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
100 // check first action completes
101 dmxChannel.getNewValue(currentTime);
103 dmxChannel.getNewValue(currentTime);
104 assertThat(dmxChannel.hasRunningActions(), is(true));
105 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
107 // check second action completes
108 dmxChannel.getNewValue(currentTime);
110 dmxChannel.getNewValue(currentTime);
111 assertThat(dmxChannel.hasRunningActions(), is(true));
112 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
114 // check first action completes again
116 dmxChannel.getNewValue(currentTime);
117 assertThat(dmxChannel.hasRunningActions(), is(true));
118 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
122 public void checkFadeActionWithResume() {
123 dmxChannel.setValue(127);
124 dmxChannel.suspendAction();
126 dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
127 dmxChannel.addChannelAction(new ResumeAction());
129 dmxChannel.getNewValue(currentTime);
130 assertThat(dmxChannel.hasRunningActions(), is(true));
131 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
133 // check action completes
134 dmxChannel.getNewValue(currentTime);
136 dmxChannel.getNewValue(currentTime);
137 assertThat(dmxChannel.hasRunningActions(), is(true));
138 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
140 // check state is restored
141 dmxChannel.getNewValue(currentTime);
142 assertThat(dmxChannel.hasRunningActions(), is(false));
143 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);