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