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.eclipse.jdt.annotation.NonNullByDefault;
19 import org.junit.jupiter.api.BeforeEach;
20 import org.junit.jupiter.api.Test;
21 import org.mockito.Mockito;
22 import org.openhab.binding.dmx.internal.DmxBindingConstants.ListenerType;
23 import org.openhab.binding.dmx.internal.action.FadeAction;
24 import org.openhab.binding.dmx.internal.action.ResumeAction;
25 import org.openhab.binding.dmx.internal.handler.DimmerThingHandler;
26 import org.openhab.core.thing.ChannelUID;
29 * Tests cases for Channel
31 * @author Jan N. Klug - Initial contribution
34 public class DmxChannelTest {
35 private final ChannelUID valueChannelUID = new ChannelUID("dmx:testBridge:testThing:valueChannel");
37 private @NonNullByDefault({}) DmxChannel dmxChannel;
38 private @NonNullByDefault({}) DimmerThingHandler dimmerThingHandler;
39 private long currentTime;
43 dimmerThingHandler = Mockito.mock(DimmerThingHandler.class);
44 dmxChannel = new DmxChannel(0, 1, 0);
45 dmxChannel.addListener(valueChannelUID, dimmerThingHandler, ListenerType.VALUE);
46 dmxChannel.setValue(0);
47 currentTime = System.currentTimeMillis();
51 public void checkValueSettingAndReporting() {
52 dmxChannel.setValue(125);
53 dmxChannel.getNewValue(currentTime);
55 assertThat(dmxChannel.getValue(), is(125));
56 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 125);
60 public void checkLimitsAreObserved() {
61 dmxChannel.setValue(300);
62 assertThat(dmxChannel.getValue(), is(DmxChannel.MAX_VALUE));
64 dmxChannel.setValue(-1);
65 assertThat(dmxChannel.getValue(), is(DmxChannel.MIN_VALUE));
69 public void setAndClearAction() {
71 dmxChannel.setChannelAction(new FadeAction(0, 100, -1));
72 assertThat(dmxChannel.hasRunningActions(), is(true));
75 dmxChannel.clearAction();
76 assertThat(dmxChannel.hasRunningActions(), is(false));
80 public void checkSingleFadeAction() {
81 dmxChannel.addChannelAction(new FadeAction(1000, 243, -1));
83 dmxChannel.getNewValue(currentTime);
84 assertThat(dmxChannel.hasRunningActions(), is(true));
85 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
87 dmxChannel.getNewValue(currentTime + 1000);
88 assertThat(dmxChannel.hasRunningActions(), is(false));
89 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
93 public void checkMultipleInfiniteFadeAction() {
94 dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
95 dmxChannel.addChannelAction(new FadeAction(1000, 127, 0));
97 dmxChannel.getNewValue(currentTime);
98 assertThat(dmxChannel.hasRunningActions(), is(true));
99 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
101 // check first action completes
102 dmxChannel.getNewValue(currentTime);
104 dmxChannel.getNewValue(currentTime);
105 assertThat(dmxChannel.hasRunningActions(), is(true));
106 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
108 // check second action completes
109 dmxChannel.getNewValue(currentTime);
111 dmxChannel.getNewValue(currentTime);
112 assertThat(dmxChannel.hasRunningActions(), is(true));
113 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
115 // check first action completes again
117 dmxChannel.getNewValue(currentTime);
118 assertThat(dmxChannel.hasRunningActions(), is(true));
119 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
123 public void checkFadeActionWithResume() {
124 dmxChannel.setValue(127);
125 dmxChannel.suspendAction();
127 dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
128 dmxChannel.addChannelAction(new ResumeAction());
130 dmxChannel.getNewValue(currentTime);
131 assertThat(dmxChannel.hasRunningActions(), is(true));
132 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
134 // check action completes
135 dmxChannel.getNewValue(currentTime);
137 dmxChannel.getNewValue(currentTime);
138 assertThat(dmxChannel.hasRunningActions(), is(true));
139 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
141 // check state is restored
142 dmxChannel.getNewValue(currentTime);
143 assertThat(dmxChannel.hasRunningActions(), is(false));
144 Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);