]> git.basschouten.com Git - openhab-addons.git/blob
cb2b7281d31b03fe1d18d4e0252b243f954b5abc
[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.lcn.internal.subhandler;
14
15 import static org.mockito.ArgumentMatchers.any;
16 import static org.mockito.Mockito.*;
17
18 import java.math.BigDecimal;
19
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.openhab.binding.lcn.internal.common.DimmerOutputCommand;
24 import org.openhab.binding.lcn.internal.common.LcnChannelGroup;
25 import org.openhab.binding.lcn.internal.common.LcnDefs;
26 import org.openhab.binding.lcn.internal.common.LcnException;
27 import org.openhab.core.library.types.OnOffType;
28 import org.openhab.core.library.types.PercentType;
29 import org.openhab.core.library.types.StringType;
30 import org.openhab.core.library.types.UpDownType;
31
32 /**
33  * Test class.
34  *
35  * @author Fabian Wolter - Initial contribution
36  */
37 @NonNullByDefault
38 public class LcnModuleOutputSubHandlerTest extends AbstractTestLcnModuleSubHandler {
39     private @NonNullByDefault({}) LcnModuleOutputSubHandler l;
40
41     @Override
42     @BeforeEach
43     public void setUp() {
44         super.setUp();
45
46         l = new LcnModuleOutputSubHandler(handler, info);
47     }
48
49     @Test
50     public void testStatusOutput1OffPercent() {
51         tryParseAllHandlers(":M000005A1000");
52         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "1", new PercentType(0));
53         verify(handler).updateChannel(any(), any(), any());
54     }
55
56     @Test
57     public void testStatusOutput2OffPercent() {
58         tryParseAllHandlers(":M000005A2000");
59         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "2", new PercentType(0));
60         verify(handler).updateChannel(any(), any(), any());
61     }
62
63     @Test
64     public void testStatusOutput1OffNative() {
65         tryParseAllHandlers(":M000005O1000");
66         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "1", new PercentType(0));
67         verify(handler).updateChannel(any(), any(), any());
68     }
69
70     @Test
71     public void testStatusOutput2OffNative() {
72         tryParseAllHandlers(":M000005O2000");
73         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "2", new PercentType(0));
74         verify(handler).updateChannel(any(), any(), any());
75     }
76
77     @Test
78     public void testStatusOutput1OnPercent() {
79         tryParseAllHandlers(":M000005A1100");
80         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "1", new PercentType(100));
81         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.UP);
82         verify(handler, times(2)).updateChannel(any(), any(), any());
83     }
84
85     @Test
86     public void testStatusOutput2OnPercent() {
87         tryParseAllHandlers(":M000005A2100");
88         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "2", new PercentType(100));
89         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.DOWN);
90         verify(handler, times(2)).updateChannel(any(), any(), any());
91     }
92
93     @Test
94     public void testStatusOutput1OnNative() {
95         tryParseAllHandlers(":M000005O1200");
96         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "1", new PercentType(100));
97         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.UP);
98         verify(handler, times(2)).updateChannel(any(), any(), any());
99     }
100
101     @Test
102     public void testStatusOutput2OnNative() {
103         tryParseAllHandlers(":M000005O2200");
104         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "2", new PercentType(100));
105         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.DOWN);
106         verify(handler, times(2)).updateChannel(any(), any(), any());
107     }
108
109     @Test
110     public void testStatusOutput2On50Percent() {
111         tryParseAllHandlers(":M000005A2050");
112         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "2", new PercentType(50));
113         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.DOWN);
114         verify(handler, times(2)).updateChannel(any(), any(), any());
115     }
116
117     @Test
118     public void testStatusOutput1On50Native() {
119         tryParseAllHandlers(":M000005O1100");
120         verify(handler).updateChannel(LcnChannelGroup.OUTPUT, "1", new PercentType(50));
121         verify(handler).updateChannel(LcnChannelGroup.ROLLERSHUTTEROUTPUT, "1", UpDownType.UP);
122         verify(handler, times(2)).updateChannel(any(), any(), any());
123     }
124
125     @Test
126     public void testHandleCommandOutput1On() throws LcnException {
127         l.handleCommandOnOff(OnOffType.ON, LcnChannelGroup.OUTPUT, 0);
128         verify(handler).sendPck("A1DI100000");
129     }
130
131     @Test
132     public void testHandleCommandOutput2On() throws LcnException {
133         l.handleCommandOnOff(OnOffType.ON, LcnChannelGroup.OUTPUT, 1);
134         verify(handler).sendPck("A2DI100000");
135     }
136
137     @Test
138     public void testHandleCommandOutput1Off() throws LcnException {
139         l.handleCommandOnOff(OnOffType.OFF, LcnChannelGroup.OUTPUT, 0);
140         verify(handler).sendPck("A1DI000000");
141     }
142
143     @Test
144     public void testHandleCommandOutput2Off() throws LcnException {
145         l.handleCommandOnOff(OnOffType.OFF, LcnChannelGroup.OUTPUT, 1);
146         verify(handler).sendPck("A2DI000000");
147     }
148
149     @Test
150     public void testHandleCommandOutput1Percent10() throws LcnException {
151         l.handleCommandPercent(new PercentType(99), LcnChannelGroup.OUTPUT, 0);
152         verify(handler).sendPck("A1DI099000");
153     }
154
155     @Test
156     public void testHandleCommandOutput2Percent1() throws LcnException {
157         l.handleCommandPercent(new PercentType(1), LcnChannelGroup.OUTPUT, 1);
158         verify(handler).sendPck("A2DI001000");
159     }
160
161     @Test
162     public void testHandleCommandOutput1Percent995() throws LcnException {
163         l.handleCommandPercent(new PercentType(BigDecimal.valueOf(99.5)), LcnChannelGroup.OUTPUT, 0);
164         verify(handler).sendPck("O1DI199000");
165     }
166
167     @Test
168     public void testHandleCommandOutput2Percent05() throws LcnException {
169         l.handleCommandPercent(new PercentType(BigDecimal.valueOf(0.5)), LcnChannelGroup.OUTPUT, 1);
170         verify(handler).sendPck("O2DI001000");
171     }
172
173     @Test
174     public void testHandleCommandDimmerOutputAll60FixedRamp() throws LcnException {
175         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(60), true, false, LcnDefs.FIXED_RAMP_MS),
176                 0);
177         verify(handler).sendPck("AH060");
178     }
179
180     @Test
181     public void testHandleCommandDimmerOutputAll40CustomRamp() throws LcnException {
182         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(40), true, false, 1000), 0);
183         verify(handler).sendPck("OY080080080080004");
184     }
185
186     @Test
187     public void testHandleCommandDimmerOutput12Value100FixedRamp() throws LcnException {
188         l.handleCommandDimmerOutput(
189                 new DimmerOutputCommand(BigDecimal.valueOf(100), false, true, LcnDefs.FIXED_RAMP_MS), 0);
190         verify(handler).sendPck("X2001200200");
191     }
192
193     @Test
194     public void testHandleCommandDimmerOutput12Value0FixedRamp() throws LcnException {
195         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(0), false, true, LcnDefs.FIXED_RAMP_MS),
196                 0);
197         verify(handler).sendPck("X2001000000");
198     }
199
200     @Test
201     public void testHandleCommandDimmerOutput12Value100NoRamp() throws LcnException {
202         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(100), false, true, 0), 0);
203         verify(handler).sendPck("X2001253253");
204     }
205
206     @Test
207     public void testHandleCommandDimmerOutput12Value0NoRamp() throws LcnException {
208         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(0), false, true, 0), 0);
209         verify(handler).sendPck("X2001252252");
210     }
211
212     @Test
213     public void testHandleCommandDimmerOutput12Value40() throws LcnException {
214         l.handleCommandDimmerOutput(new DimmerOutputCommand(BigDecimal.valueOf(40), false, true, 0), 0);
215         verify(handler).sendPck("AY040040");
216     }
217
218     @Test
219     public void testHandleCommandTuneableWhite0() throws LcnException {
220         l.handleCommandString(new StringType("DISABLE"), 0);
221         verify(handler).sendPck("AW0");
222     }
223
224     @Test
225     public void testHandleCommandTuneableWhite1() throws LcnException {
226         l.handleCommandString(new StringType("OUTPUT1"), 0);
227         verify(handler).sendPck("AW1");
228     }
229
230     @Test
231     public void testHandleCommandTuneableWhite2() throws LcnException {
232         l.handleCommandString(new StringType("BOTH"), 0);
233         verify(handler).sendPck("AW2");
234     }
235 }