]> git.basschouten.com Git - openhab-addons.git/blob
8514cb29d943e4299eeebf93888d2ca55b95d4d9
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.yamahareceiver.internal.protocol.xml;
14
15 import static org.junit.Assert.assertEquals;
16 import static org.mockito.ArgumentMatchers.eq;
17 import static org.mockito.Mockito.verify;
18 import static org.openhab.binding.yamahareceiver.internal.TestModels.*;
19 import static org.openhab.binding.yamahareceiver.internal.YamahaReceiverBindingConstants.Inputs.*;
20
21 import java.util.function.Consumer;
22
23 import org.junit.Test;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.Captor;
26 import org.mockito.Mock;
27 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoState;
28 import org.openhab.binding.yamahareceiver.internal.state.PresetInfoStateListener;
29
30 /**
31  * Unit test for {@link InputWithPresetControlXML}.
32  *
33  * @author Tomasz Maruszak - Initial contribution
34  */
35 public class InputWithPresetControlXMLTest extends AbstractZoneControlXMLTest {
36
37     private InputWithPresetControlXML subject;
38
39     @Mock
40     private PresetInfoStateListener presetInfoStateListener;
41
42     @Captor
43     private ArgumentCaptor<PresetInfoState> presetInfoStateArg;
44
45     private void given(String model, String input, Consumer<ModelContext> setup) throws Exception {
46         ctx.prepareForModel(model);
47
48         DeviceInformationXML deviceInformation = new DeviceInformationXML(con, deviceInformationState);
49         deviceInformation.update();
50
51         setup.accept(ctx);
52
53         subject = new InputWithPresetControlXML(input, con, presetInfoStateListener, deviceInformationState);
54     }
55
56     @Test
57     public void given_RX_S601D_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
58         given(RX_S601D, INPUT_NET_RADIO, ctx -> {
59             ctx.respondWith(
60                     "<NET_RADIO><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_RADIO>",
61                     "NET_RADIO_Play_Control_Preset_Preset_Sel_Item.xml");
62             ctx.respondWith(
63                     "<NET_RADIO><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_RADIO>",
64                     "NET_RADIO_Play_Control_Preset_Preset_Sel.xml");
65         });
66
67         // when
68         subject.selectItemByPresetNumber(1);
69
70         // then
71         verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
72         PresetInfoState state = presetInfoStateArg.getValue();
73
74         verify(con).send(
75                 eq("<NET_RADIO><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_RADIO>"));
76         assertEquals("1 : NET RADIO  Chilli ZET PL", state.presetChannelNames.get(0).getName());
77         assertEquals(1, state.presetChannelNames.get(0).getValue());
78         assertEquals("2 : NET RADIO  Polskie Radio 24", state.presetChannelNames.get(1).getName());
79         assertEquals(2, state.presetChannelNames.get(1).getValue());
80     }
81
82     @Test
83     public void given_RX_V3900_and_NET_RADIO_when_preset1_then_sendsProperCommand() throws Exception {
84         given(RX_V3900, INPUT_NET_RADIO, ctx -> {
85             ctx.respondWith(
86                     "<NET_USB><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></NET_USB>",
87                     "NET_USB_Play_Control_Preset_Preset_Sel_Item.xml");
88             ctx.respondWith(
89                     "<NET_USB><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></NET_USB>",
90                     "NET_USB_Play_Control_Preset_Preset_Sel.xml");
91         });
92
93         // when
94         subject.selectItemByPresetNumber(1);
95
96         // then
97         verify(con).send(
98                 eq("<NET_USB><Play_Control><Preset><Preset_Sel>1</Preset_Sel></Preset></Play_Control></NET_USB>"));
99     }
100
101     @Test
102     public void given_RX_V3900_and_TUNER_when_preset1_then_sendsProperCommand() throws Exception {
103         given(RX_V3900, INPUT_TUNER, ctx -> {
104             ctx.respondWith(
105                     "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
106                     "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
107             ctx.respondWith(
108                     "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
109                     "Tuner_Play_Control_Preset_Preset_Sel.xml");
110         });
111
112         // when
113         subject.selectItemByPresetNumber(101);
114         subject.selectItemByPresetNumber(212);
115
116         // then
117         verify(con)
118                 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>A1</Preset_Sel></Preset></Play_Control></Tuner>"));
119         verify(con)
120                 .send(eq("<Tuner><Play_Control><Preset><Preset_Sel>B12</Preset_Sel></Preset></Play_Control></Tuner>"));
121     }
122
123     @Test
124     public void given_RX_V3900_and_TUNER_when_update_then_populatesStateCorrectly() throws Exception {
125         given(RX_V3900, INPUT_TUNER, ctx -> {
126             ctx.respondWith(
127                     "<Tuner><Play_Control><Preset><Preset_Sel_Item>GetParam</Preset_Sel_Item></Preset></Play_Control></Tuner>",
128                     "Tuner_Play_Control_Preset_Preset_Sel_Item.xml");
129             ctx.respondWith(
130                     "<Tuner><Play_Control><Preset><Preset_Sel>GetParam</Preset_Sel></Preset></Play_Control></Tuner>",
131                     "Tuner_Play_Control_Preset_Preset_Sel.xml");
132         });
133
134         // when
135         subject.update();
136
137         // then
138         verify(presetInfoStateListener).presetInfoUpdated(presetInfoStateArg.capture());
139         PresetInfoState state = presetInfoStateArg.getValue();
140
141         // A1
142         assertEquals(101, state.presetChannel);
143
144         assertEquals(16, state.presetChannelNames.size());
145         assertEquals("A1", state.presetChannelNames.get(0).getName());
146         assertEquals(101, state.presetChannelNames.get(0).getValue());
147         assertEquals("A2", state.presetChannelNames.get(1).getName());
148         assertEquals(102, state.presetChannelNames.get(1).getValue());
149     }
150 }