]> git.basschouten.com Git - openhab-addons.git/blob
73430438dc576bc50432ca1def5acdd7dcd43ca4
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.dmx.internal.multiverse;
14
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
17
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;
27
28 /**
29  * Tests cases for Channel
30  *
31  * @author Jan N. Klug - Initial contribution
32  */
33 @NonNullByDefault
34 public class DmxChannelTest {
35     private final ChannelUID valueChannelUID = new ChannelUID("dmx:testBridge:testThing:valueChannel");
36
37     private @NonNullByDefault({}) DmxChannel dmxChannel;
38     private @NonNullByDefault({}) DimmerThingHandler dimmerThingHandler;
39     private long currentTime;
40
41     @BeforeEach
42     public void setup() {
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();
48     }
49
50     @Test
51     public void checkValueSettingAndReporting() {
52         dmxChannel.setValue(125);
53         dmxChannel.getNewValue(currentTime);
54
55         assertThat(dmxChannel.getValue(), is(125));
56         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 125);
57     }
58
59     @Test
60     public void checkLimitsAreObserved() {
61         dmxChannel.setValue(300);
62         assertThat(dmxChannel.getValue(), is(DmxChannel.MAX_VALUE));
63
64         dmxChannel.setValue(-1);
65         assertThat(dmxChannel.getValue(), is(DmxChannel.MIN_VALUE));
66     }
67
68     @Test
69     public void setAndClearAction() {
70         // has action
71         dmxChannel.setChannelAction(new FadeAction(0, 100, -1));
72         assertThat(dmxChannel.hasRunningActions(), is(true));
73
74         // clear action
75         dmxChannel.clearAction();
76         assertThat(dmxChannel.hasRunningActions(), is(false));
77     }
78
79     @Test
80     public void checkSingleFadeAction() {
81         dmxChannel.addChannelAction(new FadeAction(1000, 243, -1));
82
83         dmxChannel.getNewValue(currentTime);
84         assertThat(dmxChannel.hasRunningActions(), is(true));
85         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
86
87         dmxChannel.getNewValue(currentTime + 1000);
88         assertThat(dmxChannel.hasRunningActions(), is(false));
89         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
90     }
91
92     @Test
93     public void checkMultipleInfiniteFadeAction() {
94         dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
95         dmxChannel.addChannelAction(new FadeAction(1000, 127, 0));
96
97         dmxChannel.getNewValue(currentTime);
98         assertThat(dmxChannel.hasRunningActions(), is(true));
99         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 0);
100
101         // check first action completes
102         dmxChannel.getNewValue(currentTime);
103         currentTime += 1000;
104         dmxChannel.getNewValue(currentTime);
105         assertThat(dmxChannel.hasRunningActions(), is(true));
106         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
107
108         // check second action completes
109         dmxChannel.getNewValue(currentTime);
110         currentTime += 1000;
111         dmxChannel.getNewValue(currentTime);
112         assertThat(dmxChannel.hasRunningActions(), is(true));
113         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
114
115         // check first action completes again
116         currentTime += 1000;
117         dmxChannel.getNewValue(currentTime);
118         assertThat(dmxChannel.hasRunningActions(), is(true));
119         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
120     }
121
122     @Test
123     public void checkFadeActionWithResume() {
124         dmxChannel.setValue(127);
125         dmxChannel.suspendAction();
126
127         dmxChannel.addChannelAction(new FadeAction(1000, 243, 0));
128         dmxChannel.addChannelAction(new ResumeAction());
129
130         dmxChannel.getNewValue(currentTime);
131         assertThat(dmxChannel.hasRunningActions(), is(true));
132         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
133
134         // check action completes
135         dmxChannel.getNewValue(currentTime);
136         currentTime += 1000;
137         dmxChannel.getNewValue(currentTime);
138         assertThat(dmxChannel.hasRunningActions(), is(true));
139         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 243);
140
141         // check state is restored
142         dmxChannel.getNewValue(currentTime);
143         assertThat(dmxChannel.hasRunningActions(), is(false));
144         Mockito.verify(dimmerThingHandler).updateChannelValue(valueChannelUID, 127);
145     }
146 }